element", () => {
+ // https://on.cypress.io/select
+
+ // at first, no option should be selected
+ cy.get(".action-select").should("have.value", "--Select a fruit--");
+
+ // Select option(s) with matching text content
+ cy.get(".action-select").select("apples");
+ // confirm the apples were selected
+ // note that each value starts with "fr-" in our HTML
+ cy.get(".action-select").should("have.value", "fr-apples");
+
+ cy.get(".action-select-multiple")
+ .select(["apples", "oranges", "bananas"])
+ // when getting multiple values, invoke "val" method first
+ .invoke("val")
+ .should("deep.equal", ["fr-apples", "fr-oranges", "fr-bananas"]);
+
+ // Select option(s) with matching value
+ cy.get(".action-select")
+ .select("fr-bananas")
+ // can attach an assertion right away to the element
+ .should("have.value", "fr-bananas");
+
+ cy.get(".action-select-multiple")
+ .select(["fr-apples", "fr-oranges", "fr-bananas"])
+ .invoke("val")
+ .should("deep.equal", ["fr-apples", "fr-oranges", "fr-bananas"]);
+
+ // assert the selected values include oranges
+ cy.get(".action-select-multiple")
+ .invoke("val")
+ .should("include", "fr-oranges");
+ });
+
+ it(".scrollIntoView() - scroll an element into view", () => {
+ // https://on.cypress.io/scrollintoview
+
+ // normally all of these buttons are hidden,
+ // because they're not within
+ // the viewable area of their parent
+ // (we need to scroll to see them)
+ cy.get("#scroll-horizontal button").should("not.be.visible");
+
+ // scroll the button into view, as if the user had scrolled
+ cy.get("#scroll-horizontal button").scrollIntoView().should("be.visible");
+
+ cy.get("#scroll-vertical button").should("not.be.visible");
+
+ // Cypress handles the scroll direction needed
+ cy.get("#scroll-vertical button").scrollIntoView().should("be.visible");
+
+ cy.get("#scroll-both button").should("not.be.visible");
+
+ // Cypress knows to scroll to the right and down
+ cy.get("#scroll-both button").scrollIntoView().should("be.visible");
+ });
+
+ it(".trigger() - trigger an event on a DOM element", () => {
+ // https://on.cypress.io/trigger
+
+ // To interact with a range input (slider)
+ // we need to set its value & trigger the
+ // event to signal it changed
+
+ // Here, we invoke jQuery's val() method to set
+ // the value and trigger the 'change' event
+ cy.get(".trigger-input-range")
+ .invoke("val", 25)
+ .trigger("change")
+ .get("input[type=range]")
+ .siblings("p")
+ .should("have.text", "25");
+ });
+
+ it("cy.scrollTo() - scroll the window or element to a position", () => {
+ // https://on.cypress.io/scrollto
+
+ // You can scroll to 9 specific positions of an element:
+ // -----------------------------------
+ // | topLeft top topRight |
+ // | |
+ // | |
+ // | |
+ // | left center right |
+ // | |
+ // | |
+ // | |
+ // | bottomLeft bottom bottomRight |
+ // -----------------------------------
+
+ // if you chain .scrollTo() off of cy, we will
+ // scroll the entire window
+ cy.scrollTo("bottom");
+
+ cy.get("#scrollable-horizontal").scrollTo("right");
+
+ // or you can scroll to a specific coordinate:
+ // (x axis, y axis) in pixels
+ cy.get("#scrollable-vertical").scrollTo(250, 250);
+
+ // or you can scroll to a specific percentage
+ // of the (width, height) of the element
+ cy.get("#scrollable-both").scrollTo("75%", "25%");
+
+ // control the easing of the scroll (default is 'swing')
+ cy.get("#scrollable-vertical").scrollTo("center", { easing: "linear" });
+
+ // control the duration of the scroll (in ms)
+ cy.get("#scrollable-both").scrollTo("center", { duration: 2000 });
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/aliasing.cy.js b/cypress/e2e/2-advanced-examples/aliasing.cy.js
new file mode 100644
index 00000000..cbf76104
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/aliasing.cy.js
@@ -0,0 +1,43 @@
+///
+
+context("Aliasing", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/aliasing");
+ });
+
+ it(".as() - alias a DOM element for later use", () => {
+ // https://on.cypress.io/as
+
+ // Alias a DOM element for use later
+ // We don't have to traverse to the element
+ // later in our code, we reference it with @
+
+ cy.get(".as-table")
+ .find("tbody>tr")
+ .first()
+ .find("td")
+ .first()
+ .find("button")
+ .as("firstBtn");
+
+ // when we reference the alias, we place an
+ // @ in front of its name
+ cy.get("@firstBtn").click();
+
+ cy.get("@firstBtn")
+ .should("have.class", "btn-success")
+ .and("contain", "Changed");
+ });
+
+ it(".as() - alias a route for later use", () => {
+ // Alias the route to wait for its response
+ cy.intercept("GET", "**/comments/*").as("getComment");
+
+ // we have code that gets a comment when
+ // the button is clicked in scripts.js
+ cy.get(".network-btn").click();
+
+ // https://on.cypress.io/wait
+ cy.wait("@getComment").its("response.statusCode").should("eq", 200);
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/assertions.cy.js b/cypress/e2e/2-advanced-examples/assertions.cy.js
new file mode 100644
index 00000000..8f355e89
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/assertions.cy.js
@@ -0,0 +1,176 @@
+/* eslint-disable no-unused-expressions */
+///
+
+context("Assertions", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/assertions");
+ });
+
+ describe("Implicit Assertions", () => {
+ it(".should() - make an assertion about the current subject", () => {
+ // https://on.cypress.io/should
+ cy.get(".assertion-table")
+ .find("tbody tr:last")
+ .should("have.class", "success")
+ .find("td")
+ .first()
+ // checking the text of the element in various ways
+ .should("have.text", "Column content")
+ .should("contain", "Column content")
+ .should("have.html", "Column content")
+ // chai-jquery uses "is()" to check if element matches selector
+ .should("match", "td")
+ // to match text content against a regular expression
+ // first need to invoke jQuery method text()
+ // and then match using regular expression
+ .invoke("text")
+ .should("match", /column content/i);
+
+ // a better way to check element's text content against a regular expression
+ // is to use "cy.contains"
+ // https://on.cypress.io/contains
+ cy.get(".assertion-table")
+ .find("tbody tr:last")
+ // finds first element with text content matching regular expression
+ .contains("td", /column content/i)
+ .should("be.visible");
+
+ // for more information about asserting element's text
+ // see https://on.cypress.io/using-cypress-faq#How-do-I-get-an-element’s-text-contents
+ });
+
+ it(".and() - chain multiple assertions together", () => {
+ // https://on.cypress.io/and
+ cy.get(".assertions-link")
+ .should("have.class", "active")
+ .and("have.attr", "href")
+ .and("include", "cypress.io");
+ });
+ });
+
+ describe("Explicit Assertions", () => {
+ // https://on.cypress.io/assertions
+ it("expect - make an assertion about a specified subject", () => {
+ // We can use Chai's BDD style assertions
+ expect(true).to.be.true;
+ const o = { foo: "bar" };
+
+ expect(o).to.equal(o);
+ expect(o).to.deep.equal({ foo: "bar" });
+ // matching text using regular expression
+ expect("FooBar").to.match(/bar$/i);
+ });
+
+ it("pass your own callback function to should()", () => {
+ // Pass a function to should that can have any number
+ // of explicit assertions within it.
+ // The ".should(cb)" function will be retried
+ // automatically until it passes all your explicit assertions or times out.
+ cy.get(".assertions-p")
+ .find("p")
+ .should(($p) => {
+ // https://on.cypress.io/$
+ // return an array of texts from all of the p's
+ const texts = $p.map((i, el) => Cypress.$(el).text());
+
+ // jquery map returns jquery object
+ // and .get() convert this to simple array
+ const paragraphs = texts.get();
+
+ // array should have length of 3
+ expect(paragraphs, "has 3 paragraphs").to.have.length(3);
+
+ // use second argument to expect(...) to provide clear
+ // message with each assertion
+ expect(paragraphs, "has expected text in each paragraph").to.deep.eq([
+ "Some text from first p",
+ "More text from second p",
+ "And even more text from third p",
+ ]);
+ });
+ });
+
+ it("finds element by class name regex", () => {
+ cy.get(".docs-header")
+ .find("div")
+ // .should(cb) callback function will be retried
+ .should(($div) => {
+ expect($div).to.have.length(1);
+
+ const className = $div[0].className;
+
+ expect(className).to.match(/heading-/);
+ })
+ // .then(cb) callback is not retried,
+ // it either passes or fails
+ .then(($div) => {
+ expect($div, "text content").to.have.text("Introduction");
+ });
+ });
+
+ it("can throw any error", () => {
+ cy.get(".docs-header")
+ .find("div")
+ .should(($div) => {
+ if ($div.length !== 1) {
+ // you can throw your own errors
+ throw new Error("Did not find 1 element");
+ }
+
+ const className = $div[0].className;
+
+ if (!className.match(/heading-/)) {
+ throw new Error(`Could not find class "heading-" in ${className}`);
+ }
+ });
+ });
+
+ it("matches unknown text between two elements", () => {
+ /**
+ * Text from the first element.
+ * @type {string}
+ */
+ let text;
+
+ /**
+ * Normalizes passed text,
+ * useful before comparing text with spaces and different capitalization.
+ * @param {string} s Text to normalize
+ */
+ const normalizeText = (s) => s.replace(/\s/g, "").toLowerCase();
+
+ cy.get(".two-elements")
+ .find(".first")
+ .then(($first) => {
+ // save text from the first element
+ text = normalizeText($first.text());
+ });
+
+ cy.get(".two-elements")
+ .find(".second")
+ .should(($div) => {
+ // we can massage text before comparing
+ const secondText = normalizeText($div.text());
+
+ expect(secondText, "second text").to.equal(text);
+ });
+ });
+
+ it("assert - assert shape of an object", () => {
+ const person = {
+ name: "Joe",
+ age: 20,
+ };
+
+ assert.isObject(person, "value is object");
+ });
+
+ it("retries the should callback until assertions pass", () => {
+ cy.get("#random-number").should(($div) => {
+ const n = parseFloat($div.text());
+
+ expect(n).to.be.gte(1).and.be.lte(10);
+ });
+ });
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/connectors.cy.js b/cypress/e2e/2-advanced-examples/connectors.cy.js
new file mode 100644
index 00000000..aaabcd13
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/connectors.cy.js
@@ -0,0 +1,96 @@
+///
+
+context("Connectors", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/connectors");
+ });
+
+ it(".each() - iterate over an array of elements", () => {
+ // https://on.cypress.io/each
+ cy.get(".connectors-each-ul>li").each(($el, index, $list) => {
+ console.log($el, index, $list);
+ });
+ });
+
+ it(".its() - get properties on the current subject", () => {
+ // https://on.cypress.io/its
+ cy.get(".connectors-its-ul>li")
+ // calls the 'length' property yielding that value
+ .its("length")
+ .should("be.gt", 2);
+ });
+
+ it(".invoke() - invoke a function on the current subject", () => {
+ // our div is hidden in our script.js
+ // $('.connectors-div').hide()
+ cy.get(".connectors-div").should("be.hidden");
+
+ // https://on.cypress.io/invoke
+ // call the jquery method 'show' on the 'div.container'
+ cy.get(".connectors-div").invoke("show");
+
+ cy.get(".connectors-div").should("be.visible");
+ });
+
+ it(".spread() - spread an array as individual args to callback function", () => {
+ // https://on.cypress.io/spread
+ const arr = ["foo", "bar", "baz"];
+
+ cy.wrap(arr).spread((foo, bar, baz) => {
+ expect(foo).to.eq("foo");
+ expect(bar).to.eq("bar");
+ expect(baz).to.eq("baz");
+ });
+ });
+
+ describe(".then()", () => {
+ it("invokes a callback function with the current subject", () => {
+ // https://on.cypress.io/then
+ cy.get(".connectors-list > li").then(($lis) => {
+ expect($lis, "3 items").to.have.length(3);
+ expect($lis.eq(0), "first item").to.contain("Walk the dog");
+ expect($lis.eq(1), "second item").to.contain("Feed the cat");
+ expect($lis.eq(2), "third item").to.contain("Write JavaScript");
+ });
+ });
+
+ it("yields the returned value to the next command", () => {
+ cy.wrap(1)
+ .then((num) => {
+ expect(num).to.equal(1);
+
+ return 2;
+ })
+ .then((num) => {
+ expect(num).to.equal(2);
+ });
+ });
+
+ it("yields the original subject without return", () => {
+ cy.wrap(1)
+ .then((num) => {
+ expect(num).to.equal(1);
+ // note that nothing is returned from this callback
+ })
+ .then((num) => {
+ // this callback receives the original unchanged value 1
+ expect(num).to.equal(1);
+ });
+ });
+
+ it("yields the value yielded by the last Cypress command inside", () => {
+ cy.wrap(1)
+ .then((num) => {
+ expect(num).to.equal(1);
+ // note how we run a Cypress command
+ // the result yielded by this Cypress command
+ // will be passed to the second ".then"
+ cy.wrap(2);
+ })
+ .then((num) => {
+ // this callback receives the value yielded by "cy.wrap(2)"
+ expect(num).to.equal(2);
+ });
+ });
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/cookies.cy.js b/cypress/e2e/2-advanced-examples/cookies.cy.js
new file mode 100644
index 00000000..d497107e
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/cookies.cy.js
@@ -0,0 +1,122 @@
+///
+
+context("Cookies", () => {
+ beforeEach(() => {
+ Cypress.Cookies.debug(true);
+
+ cy.visit("https://example.cypress.io/commands/cookies");
+
+ // clear cookies again after visiting to remove
+ // any 3rd party cookies picked up such as cloudflare
+ cy.clearCookies();
+ });
+
+ it("cy.getCookie() - get a browser cookie", () => {
+ // https://on.cypress.io/getcookie
+ cy.get("#getCookie .set-a-cookie").click();
+
+ // cy.getCookie() yields a cookie object
+ cy.getCookie("token").should("have.property", "value", "123ABC");
+ });
+
+ it("cy.getCookies() - get browser cookies for the current domain", () => {
+ // https://on.cypress.io/getcookies
+ cy.getCookies().should("be.empty");
+
+ cy.get("#getCookies .set-a-cookie").click();
+
+ // cy.getCookies() yields an array of cookies
+ cy.getCookies()
+ .should("have.length", 1)
+ .should((cookies) => {
+ // each cookie has these properties
+ expect(cookies[0]).to.have.property("name", "token");
+ expect(cookies[0]).to.have.property("value", "123ABC");
+ expect(cookies[0]).to.have.property("httpOnly", false);
+ expect(cookies[0]).to.have.property("secure", false);
+ expect(cookies[0]).to.have.property("domain");
+ expect(cookies[0]).to.have.property("path");
+ });
+ });
+
+ it("cy.getAllCookies() - get all browser cookies", () => {
+ // https://on.cypress.io/getallcookies
+ cy.getAllCookies().should("be.empty");
+
+ cy.setCookie("key", "value");
+ cy.setCookie("key", "value", { domain: ".example.com" });
+
+ // cy.getAllCookies() yields an array of cookies
+ cy.getAllCookies()
+ .should("have.length", 2)
+ .should((cookies) => {
+ // each cookie has these properties
+ expect(cookies[0]).to.have.property("name", "key");
+ expect(cookies[0]).to.have.property("value", "value");
+ expect(cookies[0]).to.have.property("httpOnly", false);
+ expect(cookies[0]).to.have.property("secure", false);
+ expect(cookies[0]).to.have.property("domain");
+ expect(cookies[0]).to.have.property("path");
+
+ expect(cookies[1]).to.have.property("name", "key");
+ expect(cookies[1]).to.have.property("value", "value");
+ expect(cookies[1]).to.have.property("httpOnly", false);
+ expect(cookies[1]).to.have.property("secure", false);
+ expect(cookies[1]).to.have.property("domain", ".example.com");
+ expect(cookies[1]).to.have.property("path");
+ });
+ });
+
+ it("cy.setCookie() - set a browser cookie", () => {
+ // https://on.cypress.io/setcookie
+ cy.getCookies().should("be.empty");
+
+ cy.setCookie("foo", "bar");
+
+ // cy.getCookie() yields a cookie object
+ cy.getCookie("foo").should("have.property", "value", "bar");
+ });
+
+ it("cy.clearCookie() - clear a browser cookie", () => {
+ // https://on.cypress.io/clearcookie
+ cy.getCookie("token").should("be.null");
+
+ cy.get("#clearCookie .set-a-cookie").click();
+
+ cy.getCookie("token").should("have.property", "value", "123ABC");
+
+ // cy.clearCookies() yields null
+ cy.clearCookie("token").should("be.null");
+
+ cy.getCookie("token").should("be.null");
+ });
+
+ it("cy.clearCookies() - clear browser cookies for the current domain", () => {
+ // https://on.cypress.io/clearcookies
+ cy.getCookies().should("be.empty");
+
+ cy.get("#clearCookies .set-a-cookie").click();
+
+ cy.getCookies().should("have.length", 1);
+
+ // cy.clearCookies() yields null
+ cy.clearCookies();
+
+ cy.getCookies().should("be.empty");
+ });
+
+ it("cy.clearAllCookies() - clear all browser cookies", () => {
+ // https://on.cypress.io/clearallcookies
+ cy.getAllCookies().should("be.empty");
+
+ cy.setCookie("key", "value");
+ cy.setCookie("key", "value", { domain: ".example.com" });
+
+ cy.getAllCookies().should("have.length", 2);
+
+ // cy.clearAllCookies() yields null
+ cy.clearAllCookies();
+
+ cy.getAllCookies().should("be.empty");
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/cypress_api.cy.js b/cypress/e2e/2-advanced-examples/cypress_api.cy.js
new file mode 100644
index 00000000..79fdaa80
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/cypress_api.cy.js
@@ -0,0 +1,197 @@
+/* eslint-disable no-unused-vars */
+/* eslint-disable no-unused-expressions */
+///
+
+context("Cypress.Commands", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/cypress-api");
+ });
+
+ // https://on.cypress.io/custom-commands
+
+ it(".add() - create a custom command", () => {
+ Cypress.Commands.add(
+ "console",
+ {
+ prevSubject: true,
+ },
+ (subject, method) => {
+ // the previous subject is automatically received
+ // and the commands arguments are shifted
+
+ // allow us to change the console method used
+ method = method || "log";
+
+ // log the subject to the console
+ console[method]("The subject is", subject);
+
+ // whatever we return becomes the new subject
+ // we don't want to change the subject so
+ // we return whatever was passed in
+ return subject;
+ }
+ );
+
+ cy.get("button")
+ .console("info")
+ .then(($button) => {
+ // subject is still $button
+ });
+ });
+});
+
+context("Cypress.Cookies", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/cypress-api");
+ });
+
+ // https://on.cypress.io/cookies
+ it(".debug() - enable or disable debugging", () => {
+ Cypress.Cookies.debug(true);
+
+ // Cypress will now log in the console when
+ // cookies are set or cleared
+ cy.setCookie("fakeCookie", "123ABC");
+ cy.clearCookie("fakeCookie");
+ cy.setCookie("fakeCookie", "123ABC");
+ cy.clearCookie("fakeCookie");
+ cy.setCookie("fakeCookie", "123ABC");
+ });
+});
+
+context("Cypress.arch", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/cypress-api");
+ });
+
+ it("Get CPU architecture name of underlying OS", () => {
+ // https://on.cypress.io/arch
+ expect(Cypress.arch).to.exist;
+ });
+});
+
+context("Cypress.config()", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/cypress-api");
+ });
+
+ it("Get and set configuration options", () => {
+ // https://on.cypress.io/config
+ let myConfig = Cypress.config();
+
+ expect(myConfig).to.have.property("animationDistanceThreshold", 5);
+ expect(myConfig).to.have.property("baseUrl", null);
+ expect(myConfig).to.have.property("defaultCommandTimeout", 4000);
+ expect(myConfig).to.have.property("requestTimeout", 5000);
+ expect(myConfig).to.have.property("responseTimeout", 30000);
+ expect(myConfig).to.have.property("viewportHeight", 660);
+ expect(myConfig).to.have.property("viewportWidth", 1000);
+ expect(myConfig).to.have.property("pageLoadTimeout", 60000);
+ expect(myConfig).to.have.property("waitForAnimations", true);
+
+ expect(Cypress.config("pageLoadTimeout")).to.eq(60000);
+
+ // this will change the config for the rest of your tests!
+ Cypress.config("pageLoadTimeout", 20000);
+
+ expect(Cypress.config("pageLoadTimeout")).to.eq(20000);
+
+ Cypress.config("pageLoadTimeout", 60000);
+ });
+});
+
+context("Cypress.dom", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/cypress-api");
+ });
+
+ // https://on.cypress.io/dom
+ it(".isHidden() - determine if a DOM element is hidden", () => {
+ let hiddenP = Cypress.$(".dom-p p.hidden").get(0);
+ let visibleP = Cypress.$(".dom-p p.visible").get(0);
+
+ // our first paragraph has css class 'hidden'
+ expect(Cypress.dom.isHidden(hiddenP)).to.be.true;
+ expect(Cypress.dom.isHidden(visibleP)).to.be.false;
+ });
+});
+
+context("Cypress.env()", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/cypress-api");
+ });
+
+ // We can set environment variables for highly dynamic values
+
+ // https://on.cypress.io/environment-variables
+ it("Get environment variables", () => {
+ // https://on.cypress.io/env
+ // set multiple environment variables
+ Cypress.env({
+ host: "veronica.dev.local",
+ api_server: "http://localhost:8888/v1/",
+ });
+
+ // get environment variable
+ expect(Cypress.env("host")).to.eq("veronica.dev.local");
+
+ // set environment variable
+ Cypress.env("api_server", "http://localhost:8888/v2/");
+ expect(Cypress.env("api_server")).to.eq("http://localhost:8888/v2/");
+
+ // get all environment variable
+ expect(Cypress.env()).to.have.property("host", "veronica.dev.local");
+ expect(Cypress.env()).to.have.property(
+ "api_server",
+ "http://localhost:8888/v2/"
+ );
+ });
+});
+
+context("Cypress.log", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/cypress-api");
+ });
+
+ it("Control what is printed to the Command Log", () => {
+ // https://on.cypress.io/cypress-log
+ });
+});
+
+context("Cypress.platform", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/cypress-api");
+ });
+
+ it("Get underlying OS name", () => {
+ // https://on.cypress.io/platform
+ expect(Cypress.platform).to.be.exist;
+ });
+});
+
+context("Cypress.version", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/cypress-api");
+ });
+
+ it("Get current version of Cypress being run", () => {
+ // https://on.cypress.io/version
+ expect(Cypress.version).to.be.exist;
+ });
+});
+
+context("Cypress.spec", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/cypress-api");
+ });
+
+ it("Get current spec information", () => {
+ // https://on.cypress.io/spec
+ // wrap the object so we can inspect it easily by clicking in the command log
+ cy.wrap(Cypress.spec).should("include.keys", [
+ "name",
+ "relative",
+ "absolute",
+ ]);
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/files.cy.js b/cypress/e2e/2-advanced-examples/files.cy.js
new file mode 100644
index 00000000..8119295f
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/files.cy.js
@@ -0,0 +1,90 @@
+/* eslint-disable no-unused-expressions */
+///
+
+/// JSON fixture file can be loaded directly using
+// the built-in JavaScript bundler
+const requiredExample = require("../../fixtures/example");
+
+context("Files", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/files");
+ });
+
+ beforeEach(() => {
+ // load example.json fixture file and store
+ // in the test context object
+ cy.fixture("example.json").as("example");
+ });
+
+ it("cy.fixture() - load a fixture", () => {
+ // https://on.cypress.io/fixture
+
+ // Instead of writing a response inline you can
+ // use a fixture file's content.
+
+ // when application makes an Ajax request matching "GET **/comments/*"
+ // Cypress will intercept it and reply with the object in `example.json` fixture
+ cy.intercept("GET", "**/comments/*", { fixture: "example.json" }).as(
+ "getComment"
+ );
+
+ // we have code that gets a comment when
+ // the button is clicked in scripts.js
+ cy.get(".fixture-btn").click();
+
+ cy.wait("@getComment")
+ .its("response.body")
+ .should("have.property", "name")
+ .and("include", "Using fixtures to represent data");
+ });
+
+ it("cy.fixture() or require - load a fixture", function () {
+ // we are inside the "function () { ... }"
+ // callback and can use test context object "this"
+ // "this.example" was loaded in "beforeEach" function callback
+ expect(this.example, "fixture in the test context").to.deep.equal(
+ requiredExample
+ );
+
+ // or use "cy.wrap" and "should('deep.equal', ...)" assertion
+ cy.wrap(this.example).should("deep.equal", requiredExample);
+ });
+
+ it("cy.readFile() - read file contents", () => {
+ // https://on.cypress.io/readfile
+
+ // You can read a file and yield its contents
+ // The filePath is relative to your project's root.
+ cy.readFile(Cypress.config("configFile")).then((config) => {
+ expect(config).to.be.an("string");
+ });
+ });
+
+ it("cy.writeFile() - write to a file", () => {
+ // https://on.cypress.io/writefile
+
+ // You can write to a file
+
+ // Use a response from a request to automatically
+ // generate a fixture file for use later
+ cy.request("https://jsonplaceholder.cypress.io/users").then((response) => {
+ cy.writeFile("cypress/fixtures/users.json", response.body);
+ });
+
+ cy.fixture("users").should((users) => {
+ expect(users[0].name).to.exist;
+ });
+
+ // JavaScript arrays and objects are stringified
+ // and formatted into text.
+ cy.writeFile("cypress/fixtures/profile.json", {
+ id: 8739,
+ name: "Jane",
+ email: "jane@example.com",
+ });
+
+ cy.fixture("profile").should((profile) => {
+ expect(profile.name).to.eq("Jane");
+ });
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/location.cy.js b/cypress/e2e/2-advanced-examples/location.cy.js
new file mode 100644
index 00000000..5f7b686a
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/location.cy.js
@@ -0,0 +1,35 @@
+/* eslint-disable no-unused-expressions */
+///
+
+context("Location", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/location");
+ });
+
+ it("cy.hash() - get the current URL hash", () => {
+ // https://on.cypress.io/hash
+ cy.hash().should("be.empty");
+ });
+
+ it("cy.location() - get window.location", () => {
+ // https://on.cypress.io/location
+ cy.location().should((location) => {
+ expect(location.hash).to.be.empty;
+ expect(location.href).to.eq(
+ "https://example.cypress.io/commands/location"
+ );
+ expect(location.host).to.eq("example.cypress.io");
+ expect(location.hostname).to.eq("example.cypress.io");
+ expect(location.origin).to.eq("https://example.cypress.io");
+ expect(location.pathname).to.eq("/commands/location");
+ expect(location.port).to.eq("");
+ expect(location.protocol).to.eq("https:");
+ expect(location.search).to.be.empty;
+ });
+ });
+
+ it("cy.url() - get the current URL", () => {
+ // https://on.cypress.io/url
+ cy.url().should("eq", "https://example.cypress.io/commands/location");
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/misc.cy.js b/cypress/e2e/2-advanced-examples/misc.cy.js
new file mode 100644
index 00000000..fc6df9aa
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/misc.cy.js
@@ -0,0 +1,106 @@
+///
+
+context("Misc", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/misc");
+ });
+
+ it(".end() - end the command chain", () => {
+ // https://on.cypress.io/end
+
+ // cy.end is useful when you want to end a chain of commands
+ // and force Cypress to re-query from the root element
+ cy.get(".misc-table").within(() => {
+ // ends the current chain and yields null
+ cy.contains("Cheryl").click().end();
+
+ // queries the entire table again
+ cy.contains("Charles").click();
+ });
+ });
+
+ it("cy.exec() - execute a system command", () => {
+ // execute a system command.
+ // so you can take actions necessary for
+ // your test outside the scope of Cypress.
+ // https://on.cypress.io/exec
+
+ // we can use Cypress.platform string to
+ // select appropriate command
+ // https://on.cypress/io/platform
+ cy.log(`Platform ${Cypress.platform} architecture ${Cypress.arch}`);
+
+ // on CircleCI Windows build machines we have a failure to run bash shell
+ // https://github.com/cypress-io/cypress/issues/5169
+ // so skip some of the tests by passing flag "--env circle=true"
+ const isCircleOnWindows =
+ Cypress.platform === "win32" && Cypress.env("circle");
+
+ if (isCircleOnWindows) {
+ cy.log("Skipping test on CircleCI");
+
+ return;
+ }
+
+ // cy.exec problem on Shippable CI
+ // https://github.com/cypress-io/cypress/issues/6718
+ const isShippable =
+ Cypress.platform === "linux" && Cypress.env("shippable");
+
+ if (isShippable) {
+ cy.log("Skipping test on ShippableCI");
+
+ return;
+ }
+
+ cy.exec("echo Jane Lane").its("stdout").should("contain", "Jane Lane");
+
+ if (Cypress.platform === "win32") {
+ cy.exec(`print ${Cypress.config("configFile")}`)
+ .its("stderr")
+ .should("be.empty");
+ } else {
+ cy.exec(`cat ${Cypress.config("configFile")}`)
+ .its("stderr")
+ .should("be.empty");
+
+ cy.exec("pwd").its("code").should("eq", 0);
+ }
+ });
+
+ it("cy.focused() - get the DOM element that has focus", () => {
+ // https://on.cypress.io/focused
+ cy.get(".misc-form").find("#name").click();
+ cy.focused().should("have.id", "name");
+
+ cy.get(".misc-form").find("#description").click();
+ cy.focused().should("have.id", "description");
+ });
+
+ context("Cypress.Screenshot", function () {
+ it("cy.screenshot() - take a screenshot", () => {
+ // https://on.cypress.io/screenshot
+ cy.screenshot("my-image");
+ });
+
+ it("Cypress.Screenshot.defaults() - change default config of screenshots", function () {
+ Cypress.Screenshot.defaults({
+ blackout: [".foo"],
+ capture: "viewport",
+ clip: { x: 0, y: 0, width: 200, height: 200 },
+ scale: false,
+ disableTimersAndAnimations: true,
+ screenshotOnRunFailure: true,
+ onBeforeScreenshot() {},
+ onAfterScreenshot() {},
+ });
+ });
+ });
+
+ it("cy.wrap() - wrap an object", () => {
+ // https://on.cypress.io/wrap
+ cy.wrap({ foo: "bar" })
+ .should("have.property", "foo")
+ .and("include", "bar");
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/navigation.cy.js b/cypress/e2e/2-advanced-examples/navigation.cy.js
new file mode 100644
index 00000000..6b0f4678
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/navigation.cy.js
@@ -0,0 +1,57 @@
+/* eslint-disable no-unused-expressions */
+///
+
+context("Navigation", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io");
+ cy.get(".navbar-nav").contains("Commands").click();
+ cy.get(".dropdown-menu").contains("Navigation").click();
+ });
+
+ it("cy.go() - go back or forward in the browser's history", () => {
+ // https://on.cypress.io/go
+
+ cy.location("pathname").should("include", "navigation");
+
+ cy.go("back");
+ cy.location("pathname").should("not.include", "navigation");
+
+ cy.go("forward");
+ cy.location("pathname").should("include", "navigation");
+
+ // clicking back
+ cy.go(-1);
+ cy.location("pathname").should("not.include", "navigation");
+
+ // clicking forward
+ cy.go(1);
+ cy.location("pathname").should("include", "navigation");
+ });
+
+ it("cy.reload() - reload the page", () => {
+ // https://on.cypress.io/reload
+ cy.reload();
+
+ // reload the page without using the cache
+ cy.reload(true);
+ });
+
+ it("cy.visit() - visit a remote url", () => {
+ // https://on.cypress.io/visit
+
+ // Visit any sub-domain of your current domain
+
+ // Pass options to the visit
+ cy.visit("https://example.cypress.io/commands/navigation", {
+ timeout: 50000, // increase total time for the visit to resolve
+ onBeforeLoad(contentWindow) {
+ // contentWindow is the remote page's window object
+ expect(typeof contentWindow === "object").to.be.true;
+ },
+ onLoad(contentWindow) {
+ // contentWindow is the remote page's window object
+ expect(typeof contentWindow === "object").to.be.true;
+ },
+ });
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/network_requests.cy.js b/cypress/e2e/2-advanced-examples/network_requests.cy.js
new file mode 100644
index 00000000..6ac8c1d2
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/network_requests.cy.js
@@ -0,0 +1,184 @@
+///
+
+context("Network Requests", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/network-requests");
+ });
+
+ // Manage HTTP requests in your app
+
+ it("cy.request() - make an XHR request", () => {
+ // https://on.cypress.io/request
+ cy.request("https://jsonplaceholder.cypress.io/comments").should(
+ (response) => {
+ expect(response.status).to.eq(200);
+ // the server sometimes gets an extra comment posted from another machine
+ // which gets returned as 1 extra object
+ expect(response.body)
+ .to.have.property("length")
+ .and.be.oneOf([500, 501]);
+ expect(response).to.have.property("headers");
+ expect(response).to.have.property("duration");
+ }
+ );
+ });
+
+ it("cy.request() - verify response using BDD syntax", () => {
+ cy.request("https://jsonplaceholder.cypress.io/comments").then(
+ (response) => {
+ // https://on.cypress.io/assertions
+ expect(response).property("status").to.equal(200);
+ expect(response)
+ .property("body")
+ .to.have.property("length")
+ .and.be.oneOf([500, 501]);
+ expect(response).to.include.keys("headers", "duration");
+ }
+ );
+ });
+
+ it("cy.request() with query parameters", () => {
+ // will execute request
+ // https://jsonplaceholder.cypress.io/comments?postId=1&id=3
+ cy.request({
+ url: "https://jsonplaceholder.cypress.io/comments",
+ qs: {
+ postId: 1,
+ id: 3,
+ },
+ })
+ .its("body")
+ .should("be.an", "array")
+ .and("have.length", 1)
+ .its("0") // yields first element of the array
+ .should("contain", {
+ postId: 1,
+ id: 3,
+ });
+ });
+
+ it("cy.request() - pass result to the second request", () => {
+ // first, let's find out the userId of the first user we have
+ cy.request("https://jsonplaceholder.cypress.io/users?_limit=1")
+ .its("body") // yields the response object
+ .its("0") // yields the first element of the returned list
+ // the above two commands its('body').its('0')
+ // can be written as its('body.0')
+ // if you do not care about TypeScript checks
+ .then((user) => {
+ expect(user).property("id").to.be.a("number");
+ // make a new post on behalf of the user
+ cy.request("POST", "https://jsonplaceholder.cypress.io/posts", {
+ userId: user.id,
+ title: "Cypress Test Runner",
+ body: "Fast, easy and reliable testing for anything that runs in a browser.",
+ });
+ })
+ // note that the value here is the returned value of the 2nd request
+ // which is the new post object
+ .then((response) => {
+ expect(response).property("status").to.equal(201); // new entity created
+ expect(response).property("body").to.contain({
+ title: "Cypress Test Runner",
+ });
+
+ // we don't know the exact post id - only that it will be > 100
+ // since JSONPlaceholder has built-in 100 posts
+ expect(response.body)
+ .property("id")
+ .to.be.a("number")
+ .and.to.be.gt(100);
+
+ // we don't know the user id here - since it was in above closure
+ // so in this test just confirm that the property is there
+ expect(response.body).property("userId").to.be.a("number");
+ });
+ });
+
+ it("cy.request() - save response in the shared test context", () => {
+ // https://on.cypress.io/variables-and-aliases
+ cy.request("https://jsonplaceholder.cypress.io/users?_limit=1")
+ .its("body")
+ .its("0") // yields the first element of the returned list
+ .as("user") // saves the object in the test context
+ .then(function () {
+ // NOTE đŸ‘€
+ // By the time this callback runs the "as('user')" command
+ // has saved the user object in the test context.
+ // To access the test context we need to use
+ // the "function () { ... }" callback form,
+ // otherwise "this" points at a wrong or undefined object!
+ cy.request("POST", "https://jsonplaceholder.cypress.io/posts", {
+ userId: this.user.id,
+ title: "Cypress Test Runner",
+ body: "Fast, easy and reliable testing for anything that runs in a browser.",
+ })
+ .its("body")
+ .as("post"); // save the new post from the response
+ })
+ .then(function () {
+ // When this callback runs, both "cy.request" API commands have finished
+ // and the test context has "user" and "post" objects set.
+ // Let's verify them.
+ expect(this.post, "post has the right user id")
+ .property("userId")
+ .to.equal(this.user.id);
+ });
+ });
+
+ it("cy.intercept() - route responses to matching requests", () => {
+ // https://on.cypress.io/intercept
+
+ let message = "whoa, this comment does not exist";
+
+ // Listen to GET to comments/1
+ cy.intercept("GET", "**/comments/*").as("getComment");
+
+ // we have code that gets a comment when
+ // the button is clicked in scripts.js
+ cy.get(".network-btn").click();
+
+ // https://on.cypress.io/wait
+ cy.wait("@getComment")
+ .its("response.statusCode")
+ .should("be.oneOf", [200, 304]);
+
+ // Listen to POST to comments
+ cy.intercept("POST", "**/comments").as("postComment");
+
+ // we have code that posts a comment when
+ // the button is clicked in scripts.js
+ cy.get(".network-post").click();
+ cy.wait("@postComment").should(({ request, response }) => {
+ expect(request.body).to.include("email");
+ expect(request.headers).to.have.property("content-type");
+ expect(response && response.body).to.have.property(
+ "name",
+ "Using POST in cy.intercept()"
+ );
+ });
+
+ // Stub a response to PUT comments/ ****
+ cy.intercept(
+ {
+ method: "PUT",
+ url: "**/comments/*",
+ },
+ {
+ statusCode: 404,
+ body: { error: message },
+ headers: { "access-control-allow-origin": "*" },
+ delayMs: 500,
+ }
+ ).as("putComment");
+
+ // we have code that puts a comment when
+ // the button is clicked in scripts.js
+ cy.get(".network-put").click();
+
+ cy.wait("@putComment");
+
+ // our 404 statusCode logic in scripts.js executed
+ cy.get(".network-put-comment").should("contain", message);
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/querying.cy.js b/cypress/e2e/2-advanced-examples/querying.cy.js
new file mode 100644
index 00000000..3bdef3e8
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/querying.cy.js
@@ -0,0 +1,106 @@
+///
+
+context("Querying", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/querying");
+ });
+
+ // The most commonly used query is 'cy.get()', you can
+ // think of this like the '$' in jQuery
+
+ it("cy.get() - query DOM elements", () => {
+ // https://on.cypress.io/get
+
+ cy.get("#query-btn").should("contain", "Button");
+
+ cy.get(".query-btn").should("contain", "Button");
+
+ cy.get("#querying .well>button:first").should("contain", "Button");
+ // ↲
+ // Use CSS selectors just like jQuery
+
+ cy.get('[data-test-id="test-example"]').should("have.class", "example");
+
+ // 'cy.get()' yields jQuery object, you can get its attribute
+ // by invoking `.attr()` method
+ cy.get('[data-test-id="test-example"]')
+ .invoke("attr", "data-test-id")
+ .should("equal", "test-example");
+
+ // or you can get element's CSS property
+ cy.get('[data-test-id="test-example"]')
+ .invoke("css", "position")
+ .should("equal", "static");
+
+ // or use assertions directly during 'cy.get()'
+ // https://on.cypress.io/assertions
+ cy.get('[data-test-id="test-example"]')
+ .should("have.attr", "data-test-id", "test-example")
+ .and("have.css", "position", "static");
+ });
+
+ it("cy.contains() - query DOM elements with matching content", () => {
+ // https://on.cypress.io/contains
+ cy.get(".query-list").contains("bananas").should("have.class", "third");
+
+ // we can pass a regexp to `.contains()`
+ cy.get(".query-list").contains(/^b\w+/).should("have.class", "third");
+
+ cy.get(".query-list").contains("apples").should("have.class", "first");
+
+ // passing a selector to contains will
+ // yield the selector containing the text
+ cy.get("#querying")
+ .contains("ul", "oranges")
+ .should("have.class", "query-list");
+
+ cy.get(".query-button").contains("Save Form").should("have.class", "btn");
+ });
+
+ it(".within() - query DOM elements within a specific element", () => {
+ // https://on.cypress.io/within
+ cy.get(".query-form").within(() => {
+ cy.get("input:first").should("have.attr", "placeholder", "Email");
+ cy.get("input:last").should("have.attr", "placeholder", "Password");
+ });
+ });
+
+ it("cy.root() - query the root DOM element", () => {
+ // https://on.cypress.io/root
+
+ // By default, root is the document
+ cy.root().should("match", "html");
+
+ cy.get(".query-ul").within(() => {
+ // In this within, the root is now the ul DOM element
+ cy.root().should("have.class", "query-ul");
+ });
+ });
+
+ it("best practices - selecting elements", () => {
+ // https://on.cypress.io/best-practices#Selecting-Elements
+ cy.get("[data-cy=best-practices-selecting-elements]").within(() => {
+ // Worst - too generic, no context
+ cy.get("button").click();
+
+ // Bad. Coupled to styling. Highly subject to change.
+ cy.get(".btn.btn-large").click();
+
+ // Average. Coupled to the `name` attribute which has HTML semantics.
+ cy.get("[name=submission]").click();
+
+ // Better. But still coupled to styling or JS event listeners.
+ cy.get("#main").click();
+
+ // Slightly better. Uses an ID but also ensures the element
+ // has an ARIA role attribute
+ cy.get("#main[role=button]").click();
+
+ // Much better. But still coupled to text content that may change.
+ cy.contains("Submit").click();
+
+ // Best. Insulated from all changes.
+ cy.get("[data-cy=submit]").click();
+ });
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js b/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js
new file mode 100644
index 00000000..1248ed91
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js
@@ -0,0 +1,216 @@
+/* eslint-disable no-unused-expressions */
+///
+// remove no check once Cypress.sinon is typed
+// https://github.com/cypress-io/cypress/issues/6720
+
+context("Spies, Stubs, and Clock", () => {
+ it("cy.spy() - wrap a method in a spy", () => {
+ // https://on.cypress.io/spy
+ cy.visit("https://example.cypress.io/commands/spies-stubs-clocks");
+
+ const obj = {
+ foo() {},
+ };
+
+ const spy = cy.spy(obj, "foo").as("anyArgs");
+
+ obj.foo();
+
+ expect(spy).to.be.called;
+ });
+
+ it("cy.spy() retries until assertions pass", () => {
+ cy.visit("https://example.cypress.io/commands/spies-stubs-clocks");
+
+ const obj = {
+ /**
+ * Prints the argument passed
+ * @param x {any}
+ */
+ foo(x) {
+ console.log("obj.foo called with", x);
+ },
+ };
+
+ cy.spy(obj, "foo").as("foo");
+
+ setTimeout(() => {
+ obj.foo("first");
+ }, 500);
+
+ setTimeout(() => {
+ obj.foo("second");
+ }, 2500);
+
+ cy.get("@foo").should("have.been.calledTwice");
+ });
+
+ it("cy.stub() - create a stub and/or replace a function with stub", () => {
+ // https://on.cypress.io/stub
+ cy.visit("https://example.cypress.io/commands/spies-stubs-clocks");
+
+ const obj = {
+ /**
+ * prints both arguments to the console
+ * @param a {string}
+ * @param b {string}
+ */
+ foo(a, b) {
+ console.log("a", a, "b", b);
+ },
+ };
+
+ const stub = cy.stub(obj, "foo").as("foo");
+
+ obj.foo("foo", "bar");
+
+ expect(stub).to.be.called;
+ });
+
+ it("cy.clock() - control time in the browser", () => {
+ // https://on.cypress.io/clock
+
+ // create the date in UTC so its always the same
+ // no matter what local timezone the browser is running in
+ const now = new Date(Date.UTC(2017, 2, 14)).getTime();
+
+ cy.clock(now);
+ cy.visit("https://example.cypress.io/commands/spies-stubs-clocks");
+ cy.get("#clock-div").click().should("have.text", "1489449600");
+ });
+
+ it("cy.tick() - move time in the browser", () => {
+ // https://on.cypress.io/tick
+
+ // create the date in UTC so its always the same
+ // no matter what local timezone the browser is running in
+ const now = new Date(Date.UTC(2017, 2, 14)).getTime();
+
+ cy.clock(now);
+ cy.visit("https://example.cypress.io/commands/spies-stubs-clocks");
+ cy.get("#tick-div").click().should("have.text", "1489449600");
+
+ cy.tick(10000); // 10 seconds passed
+ cy.get("#tick-div").click().should("have.text", "1489449610");
+ });
+
+ it("cy.stub() matches depending on arguments", () => {
+ // see all possible matchers at
+ // https://sinonjs.org/releases/latest/matchers/
+ const greeter = {
+ /**
+ * Greets a person
+ * @param {string} name
+ */
+ greet(name) {
+ return `Hello, ${name}!`;
+ },
+ };
+
+ cy.stub(greeter, "greet")
+ .callThrough() // if you want non-matched calls to call the real method
+ .withArgs(Cypress.sinon.match.string)
+ .returns("Hi")
+ .withArgs(Cypress.sinon.match.number)
+ .throws(new Error("Invalid name"));
+
+ expect(greeter.greet("World")).to.equal("Hi");
+ expect(() => greeter.greet(42)).to.throw("Invalid name");
+ expect(greeter.greet).to.have.been.calledTwice;
+
+ // non-matched calls goes the actual method
+ expect(greeter.greet()).to.equal("Hello, undefined!");
+ });
+
+ it("matches call arguments using Sinon matchers", () => {
+ // see all possible matchers at
+ // https://sinonjs.org/releases/latest/matchers/
+ const calculator = {
+ /**
+ * returns the sum of two arguments
+ * @param a {number}
+ * @param b {number}
+ */
+ add(a, b) {
+ return a + b;
+ },
+ };
+
+ const spy = cy.spy(calculator, "add").as("add");
+
+ expect(calculator.add(2, 3)).to.equal(5);
+
+ // if we want to assert the exact values used during the call
+ expect(spy).to.be.calledWith(2, 3);
+
+ // let's confirm "add" method was called with two numbers
+ expect(spy).to.be.calledWith(
+ Cypress.sinon.match.number,
+ Cypress.sinon.match.number
+ );
+
+ // alternatively, provide the value to match
+ expect(spy).to.be.calledWith(
+ Cypress.sinon.match(2),
+ Cypress.sinon.match(3)
+ );
+
+ // match any value
+ expect(spy).to.be.calledWith(Cypress.sinon.match.any, 3);
+
+ // match any value from a list
+ expect(spy).to.be.calledWith(Cypress.sinon.match.in([1, 2, 3]), 3);
+
+ /**
+ * Returns true if the given number is even
+ * @param {number} x
+ */
+ const isEven = (x) => x % 2 === 0;
+
+ // expect the value to pass a custom predicate function
+ // the second argument to "sinon.match(predicate, message)" is
+ // shown if the predicate does not pass and assertion fails
+ expect(spy).to.be.calledWith(Cypress.sinon.match(isEven, "isEven"), 3);
+
+ /**
+ * Returns a function that checks if a given number is larger than the limit
+ * @param {number} limit
+ * @returns {(x: number) => boolean}
+ */
+ const isGreaterThan = (limit) => (x) => x > limit;
+
+ /**
+ * Returns a function that checks if a given number is less than the limit
+ * @param {number} limit
+ * @returns {(x: number) => boolean}
+ */
+ const isLessThan = (limit) => (x) => x < limit;
+
+ // you can combine several matchers using "and", "or"
+ expect(spy).to.be.calledWith(
+ Cypress.sinon.match.number,
+ Cypress.sinon
+ .match(isGreaterThan(2), "> 2")
+ .and(Cypress.sinon.match(isLessThan(4), "< 4"))
+ );
+
+ expect(spy).to.be.calledWith(
+ Cypress.sinon.match.number,
+ Cypress.sinon
+ .match(isGreaterThan(200), "> 200")
+ .or(Cypress.sinon.match(3))
+ );
+
+ // matchers can be used from BDD assertions
+ cy.get("@add").should(
+ "have.been.calledWith",
+ Cypress.sinon.match.number,
+ Cypress.sinon.match(3)
+ );
+
+ // you can alias matchers for shorter test code
+ const { match: M } = Cypress.sinon;
+
+ cy.get("@add").should("have.been.calledWith", M.number, M(3));
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/storage.cy.js b/cypress/e2e/2-advanced-examples/storage.cy.js
new file mode 100644
index 00000000..cc359c3a
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/storage.cy.js
@@ -0,0 +1,117 @@
+/* eslint-disable no-unused-expressions */
+///
+
+context("Local Storage / Session Storage", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/storage");
+ });
+ // Although localStorage is automatically cleared
+ // in between tests to maintain a clean state
+ // sometimes we need to clear localStorage manually
+
+ it("cy.clearLocalStorage() - clear all data in localStorage for the current origin", () => {
+ // https://on.cypress.io/clearlocalstorage
+ cy.get(".ls-btn")
+ .click()
+ .should(() => {
+ expect(localStorage.getItem("prop1")).to.eq("red");
+ expect(localStorage.getItem("prop2")).to.eq("blue");
+ expect(localStorage.getItem("prop3")).to.eq("magenta");
+ });
+
+ // clearLocalStorage() yields the localStorage object
+ cy.clearLocalStorage().should((ls) => {
+ expect(ls.getItem("prop1")).to.be.null;
+ expect(ls.getItem("prop2")).to.be.null;
+ expect(ls.getItem("prop3")).to.be.null;
+ });
+
+ cy.get(".ls-btn")
+ .click()
+ .should(() => {
+ expect(localStorage.getItem("prop1")).to.eq("red");
+ expect(localStorage.getItem("prop2")).to.eq("blue");
+ expect(localStorage.getItem("prop3")).to.eq("magenta");
+ });
+
+ // Clear key matching string in localStorage
+ cy.clearLocalStorage("prop1").should((ls) => {
+ expect(ls.getItem("prop1")).to.be.null;
+ expect(ls.getItem("prop2")).to.eq("blue");
+ expect(ls.getItem("prop3")).to.eq("magenta");
+ });
+
+ cy.get(".ls-btn")
+ .click()
+ .should(() => {
+ expect(localStorage.getItem("prop1")).to.eq("red");
+ expect(localStorage.getItem("prop2")).to.eq("blue");
+ expect(localStorage.getItem("prop3")).to.eq("magenta");
+ });
+
+ // Clear keys matching regex in localStorage
+ cy.clearLocalStorage(/prop1|2/).should((ls) => {
+ expect(ls.getItem("prop1")).to.be.null;
+ expect(ls.getItem("prop2")).to.be.null;
+ expect(ls.getItem("prop3")).to.eq("magenta");
+ });
+ });
+
+ it("cy.getAllLocalStorage() - get all data in localStorage for all origins", () => {
+ // https://on.cypress.io/getalllocalstorage
+ cy.get(".ls-btn").click();
+
+ // getAllLocalStorage() yields a map of origins to localStorage values
+ cy.getAllLocalStorage().should((storageMap) => {
+ expect(storageMap).to.deep.equal({
+ // other origins will also be present if localStorage is set on them
+ "https://example.cypress.io": {
+ prop1: "red",
+ prop2: "blue",
+ prop3: "magenta",
+ },
+ });
+ });
+ });
+
+ it("cy.clearAllLocalStorage() - clear all data in localStorage for all origins", () => {
+ // https://on.cypress.io/clearalllocalstorage
+ cy.get(".ls-btn").click();
+
+ // clearAllLocalStorage() yields null
+ cy.clearAllLocalStorage().should(() => {
+ expect(sessionStorage.getItem("prop1")).to.be.null;
+ expect(sessionStorage.getItem("prop2")).to.be.null;
+ expect(sessionStorage.getItem("prop3")).to.be.null;
+ });
+ });
+
+ it("cy.getAllSessionStorage() - get all data in sessionStorage for all origins", () => {
+ // https://on.cypress.io/getallsessionstorage
+ cy.get(".ls-btn").click();
+
+ // getAllSessionStorage() yields a map of origins to sessionStorage values
+ cy.getAllSessionStorage().should((storageMap) => {
+ expect(storageMap).to.deep.equal({
+ // other origins will also be present if sessionStorage is set on them
+ "https://example.cypress.io": {
+ prop4: "cyan",
+ prop5: "yellow",
+ prop6: "black",
+ },
+ });
+ });
+ });
+
+ it("cy.clearAllSessionStorage() - clear all data in sessionStorage for all origins", () => {
+ // https://on.cypress.io/clearallsessionstorage
+ cy.get(".ls-btn").click();
+
+ // clearAllSessionStorage() yields null
+ cy.clearAllSessionStorage().should(() => {
+ expect(sessionStorage.getItem("prop4")).to.be.null;
+ expect(sessionStorage.getItem("prop5")).to.be.null;
+ expect(sessionStorage.getItem("prop6")).to.be.null;
+ });
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/traversal.cy.js b/cypress/e2e/2-advanced-examples/traversal.cy.js
new file mode 100644
index 00000000..2ee4b9bf
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/traversal.cy.js
@@ -0,0 +1,116 @@
+///
+
+context("Traversal", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/traversal");
+ });
+
+ it(".children() - get child DOM elements", () => {
+ // https://on.cypress.io/children
+ cy.get(".traversal-breadcrumb")
+ .children(".active")
+ .should("contain", "Data");
+ });
+
+ it(".closest() - get closest ancestor DOM element", () => {
+ // https://on.cypress.io/closest
+ cy.get(".traversal-badge").closest("ul").should("have.class", "list-group");
+ });
+
+ it(".eq() - get a DOM element at a specific index", () => {
+ // https://on.cypress.io/eq
+ cy.get(".traversal-list>li").eq(1).should("contain", "siamese");
+ });
+
+ it(".filter() - get DOM elements that match the selector", () => {
+ // https://on.cypress.io/filter
+ cy.get(".traversal-nav>li").filter(".active").should("contain", "About");
+ });
+
+ it(".find() - get descendant DOM elements of the selector", () => {
+ // https://on.cypress.io/find
+ cy.get(".traversal-pagination")
+ .find("li")
+ .find("a")
+ .should("have.length", 7);
+ });
+
+ it(".first() - get first DOM element", () => {
+ // https://on.cypress.io/first
+ cy.get(".traversal-table td").first().should("contain", "1");
+ });
+
+ it(".last() - get last DOM element", () => {
+ // https://on.cypress.io/last
+ cy.get(".traversal-buttons .btn").last().should("contain", "Submit");
+ });
+
+ it(".next() - get next sibling DOM element", () => {
+ // https://on.cypress.io/next
+ cy.get(".traversal-ul")
+ .contains("apples")
+ .next()
+ .should("contain", "oranges");
+ });
+
+ it(".nextAll() - get all next sibling DOM elements", () => {
+ // https://on.cypress.io/nextall
+ cy.get(".traversal-next-all")
+ .contains("oranges")
+ .nextAll()
+ .should("have.length", 3);
+ });
+
+ it(".nextUntil() - get next sibling DOM elements until next el", () => {
+ // https://on.cypress.io/nextuntil
+ cy.get("#veggies").nextUntil("#nuts").should("have.length", 3);
+ });
+
+ it(".not() - remove DOM elements from set of DOM elements", () => {
+ // https://on.cypress.io/not
+ cy.get(".traversal-disabled .btn")
+ .not("[disabled]")
+ .should("not.contain", "Disabled");
+ });
+
+ it(".parent() - get parent DOM element from DOM elements", () => {
+ // https://on.cypress.io/parent
+ cy.get(".traversal-mark").parent().should("contain", "Morbi leo risus");
+ });
+
+ it(".parents() - get parent DOM elements from DOM elements", () => {
+ // https://on.cypress.io/parents
+ cy.get(".traversal-cite").parents().should("match", "blockquote");
+ });
+
+ it(".parentsUntil() - get parent DOM elements from DOM elements until el", () => {
+ // https://on.cypress.io/parentsuntil
+ cy.get(".clothes-nav")
+ .find(".active")
+ .parentsUntil(".clothes-nav")
+ .should("have.length", 2);
+ });
+
+ it(".prev() - get previous sibling DOM element", () => {
+ // https://on.cypress.io/prev
+ cy.get(".birds").find(".active").prev().should("contain", "Lorikeets");
+ });
+
+ it(".prevAll() - get all previous sibling DOM elements", () => {
+ // https://on.cypress.io/prevall
+ cy.get(".fruits-list").find(".third").prevAll().should("have.length", 2);
+ });
+
+ it(".prevUntil() - get all previous sibling DOM elements until el", () => {
+ // https://on.cypress.io/prevuntil
+ cy.get(".foods-list")
+ .find("#nuts")
+ .prevUntil("#veggies")
+ .should("have.length", 3);
+ });
+
+ it(".siblings() - get all sibling DOM elements", () => {
+ // https://on.cypress.io/siblings
+ cy.get(".traversal-pills .active").siblings().should("have.length", 2);
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/utilities.cy.js b/cypress/e2e/2-advanced-examples/utilities.cy.js
new file mode 100644
index 00000000..4eb4501a
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/utilities.cy.js
@@ -0,0 +1,111 @@
+/* eslint-disable no-unused-vars */
+/* eslint-disable no-unused-expressions */
+///
+
+context("Utilities", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/utilities");
+ });
+
+ it("Cypress._ - call a lodash method", () => {
+ // https://on.cypress.io/_
+ cy.request("https://jsonplaceholder.cypress.io/users").then((response) => {
+ let ids = Cypress._.chain(response.body).map("id").take(3).value();
+
+ expect(ids).to.deep.eq([1, 2, 3]);
+ });
+ });
+
+ it("Cypress.$ - call a jQuery method", () => {
+ // https://on.cypress.io/$
+ let $li = Cypress.$(".utility-jquery li:first");
+
+ cy.wrap($li)
+ .should("not.have.class", "active")
+ .click()
+ .should("have.class", "active");
+ });
+
+ it("Cypress.Blob - blob utilities and base64 string conversion", () => {
+ // https://on.cypress.io/blob
+ cy.get(".utility-blob").then(($div) => {
+ // https://github.com/nolanlawson/blob-util#imgSrcToDataURL
+ // get the dataUrl string for the javascript-logo
+ return Cypress.Blob.imgSrcToDataURL(
+ "https://example.cypress.io/assets/img/javascript-logo.png",
+ undefined,
+ "anonymous"
+ ).then((dataUrl) => {
+ // create an element and set its src to the dataUrl
+ let img = Cypress.$(" ", { src: dataUrl });
+
+ // need to explicitly return cy here since we are initially returning
+ // the Cypress.Blob.imgSrcToDataURL promise to our test
+ // append the image
+ $div.append(img);
+
+ cy.get(".utility-blob img").click().should("have.attr", "src", dataUrl);
+ });
+ });
+ });
+
+ it("Cypress.minimatch - test out glob patterns against strings", () => {
+ // https://on.cypress.io/minimatch
+ let matching = Cypress.minimatch("/users/1/comments", "/users/*/comments", {
+ matchBase: true,
+ });
+
+ expect(matching, "matching wildcard").to.be.true;
+
+ matching = Cypress.minimatch("/users/1/comments/2", "/users/*/comments", {
+ matchBase: true,
+ });
+
+ expect(matching, "comments").to.be.false;
+
+ // ** matches against all downstream path segments
+ matching = Cypress.minimatch("/foo/bar/baz/123/quux?a=b&c=2", "/foo/**", {
+ matchBase: true,
+ });
+
+ expect(matching, "comments").to.be.true;
+
+ // whereas * matches only the next path segment
+
+ matching = Cypress.minimatch("/foo/bar/baz/123/quux?a=b&c=2", "/foo/*", {
+ matchBase: false,
+ });
+
+ expect(matching, "comments").to.be.false;
+ });
+
+ it("Cypress.Promise - instantiate a bluebird promise", () => {
+ // https://on.cypress.io/promise
+ let waited = false;
+
+ /**
+ * @return Bluebird
+ */
+ function waitOneSecond() {
+ // return a promise that resolves after 1 second
+ return new Cypress.Promise((resolve, reject) => {
+ setTimeout(() => {
+ // set waited to true
+ waited = true;
+
+ // resolve with 'foo' string
+ resolve("foo");
+ }, 1000);
+ });
+ }
+
+ cy.then(() => {
+ // return a promise to cy.then() that
+ // is awaited until it resolves
+ return waitOneSecond().then((str) => {
+ expect(str).to.eq("foo");
+ expect(waited).to.be.true;
+ });
+ });
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/viewport.cy.js b/cypress/e2e/2-advanced-examples/viewport.cy.js
new file mode 100644
index 00000000..b14c7dd0
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/viewport.cy.js
@@ -0,0 +1,60 @@
+/* eslint-disable cypress/no-unnecessary-waiting */
+///
+
+context("Viewport", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/viewport");
+ });
+
+ it("cy.viewport() - set the viewport size and dimension", () => {
+ // https://on.cypress.io/viewport
+
+ cy.get("#navbar").should("be.visible");
+ cy.viewport(320, 480);
+
+ // the navbar should have collapse since our screen is smaller
+ cy.get("#navbar").should("not.be.visible");
+ cy.get(".navbar-toggle").should("be.visible").click();
+ cy.get(".nav").find("a").should("be.visible");
+
+ // lets see what our app looks like on a super large screen
+ cy.viewport(2999, 2999);
+
+ // cy.viewport() accepts a set of preset sizes
+ // to easily set the screen to a device's width and height
+
+ // We added a cy.wait() between each viewport change so you can see
+ // the change otherwise it is a little too fast to see :)
+
+ cy.viewport("macbook-15");
+ cy.wait(200);
+ cy.viewport("macbook-13");
+ cy.wait(200);
+ cy.viewport("macbook-11");
+ cy.wait(200);
+ cy.viewport("ipad-2");
+ cy.wait(200);
+ cy.viewport("ipad-mini");
+ cy.wait(200);
+ cy.viewport("iphone-6+");
+ cy.wait(200);
+ cy.viewport("iphone-6");
+ cy.wait(200);
+ cy.viewport("iphone-5");
+ cy.wait(200);
+ cy.viewport("iphone-4");
+ cy.wait(200);
+ cy.viewport("iphone-3");
+ cy.wait(200);
+
+ // cy.viewport() accepts an orientation for all presets
+ // the default orientation is 'portrait'
+ cy.viewport("ipad-2", "portrait");
+ cy.wait(200);
+ cy.viewport("iphone-4", "landscape");
+ cy.wait(200);
+
+ // The viewport will be reset back to the default dimensions
+ // in between tests (the default can be set in cypress.config.{js|ts})
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/waiting.cy.js b/cypress/e2e/2-advanced-examples/waiting.cy.js
new file mode 100644
index 00000000..56e04f9a
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/waiting.cy.js
@@ -0,0 +1,34 @@
+/* eslint-disable cypress/no-unnecessary-waiting */
+///
+
+context("Waiting", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/waiting");
+ });
+ // BE CAREFUL of adding unnecessary wait times.
+ // https://on.cypress.io/best-practices#Unnecessary-Waiting
+
+ // https://on.cypress.io/wait
+ it("cy.wait() - wait for a specific amount of time", () => {
+ cy.get(".wait-input1").type("Wait 1000ms after typing");
+ cy.wait(1000);
+ cy.get(".wait-input2").type("Wait 1000ms after typing");
+ cy.wait(1000);
+ cy.get(".wait-input3").type("Wait 1000ms after typing");
+ cy.wait(1000);
+ });
+
+ it("cy.wait() - wait for a specific route", () => {
+ // Listen to GET to comments/1
+ cy.intercept("GET", "**/comments/*").as("getComment");
+
+ // we have code that gets a comment when
+ // the button is clicked in scripts.js
+ cy.get(".network-btn").click();
+
+ // wait for GET comments/1
+ cy.wait("@getComment")
+ .its("response.statusCode")
+ .should("be.oneOf", [200, 304]);
+ });
+});
diff --git a/cypress/e2e/2-advanced-examples/window.cy.js b/cypress/e2e/2-advanced-examples/window.cy.js
new file mode 100644
index 00000000..9740ba04
--- /dev/null
+++ b/cypress/e2e/2-advanced-examples/window.cy.js
@@ -0,0 +1,22 @@
+///
+
+context("Window", () => {
+ beforeEach(() => {
+ cy.visit("https://example.cypress.io/commands/window");
+ });
+
+ it("cy.window() - get the global window object", () => {
+ // https://on.cypress.io/window
+ cy.window().should("have.property", "top");
+ });
+
+ it("cy.document() - get the document object", () => {
+ // https://on.cypress.io/document
+ cy.document().should("have.property", "charset").and("eq", "UTF-8");
+ });
+
+ it("cy.title() - get the title", () => {
+ // https://on.cypress.io/title
+ cy.title().should("include", "Kitchen Sink");
+ });
+});
diff --git a/cypress/e2e/boilerplate-e2e/boilerplate.cy.js b/cypress/e2e/boilerplate-e2e/boilerplate.cy.js
new file mode 100644
index 00000000..1586cf14
--- /dev/null
+++ b/cypress/e2e/boilerplate-e2e/boilerplate.cy.js
@@ -0,0 +1,112 @@
+import "@4tw/cypress-drag-drop";
+
+describe("Create a new boilerplate", () => {
+ it("Logs into the application", () => {
+ cy.viewport(2560, 1600);
+ cy.visit("http://localhost:3001");
+ cy.intercept("POST", "/api/sessions").as("createSession");
+ cy.get("a:contains('Log In')").click();
+ cy.get("input[type=email]").type("abarnes@thecypresstree.org");
+ cy.get("input[type=password]").type("password");
+ cy.get("button[type=submit]").click();
+
+ // Open cypress test organization dashboard
+ cy.wait("@createSession");
+ cy.get('[data-testid="The Cypress Tree"]').click();
+ cy.get('[data-testid="Boilerplates"]').click();
+
+ // Create boilerplate
+ cy.intercept("POST", "/api/organizations/**").as("createFirstBoilerplate");
+ cy.get("tr").then(() => {
+ cy.get("a:contains('Add New Boilerplate')").click();
+ cy.get("form").within(() => {
+ cy.get("[data-testid='boilerplate-dropdown']").click();
+ cy.get(".mantine-Select-item").first().click();
+ cy.get('[data-testid="Title"]').type("New Unique Boilerplate");
+ cy.get(".ql-editor").type(`This is some new boilerplate text!`);
+ cy.get("button[type=submit]").click();
+ });
+
+ // Check boilerplate index for the new boilerplate
+ cy.wait("@createFirstBoilerplate");
+ cy.intercept("GET", "/api/organizations/**").as("getBoilerplates");
+ cy.get("a:contains('Back to All Boilerplates')").click();
+ cy.wait("@getBoilerplates");
+ cy.get("tr")
+ .last()
+ .within(() => {
+ cy.get("td").should("have.length", 5);
+ });
+ cy.get("td:contains('New Unique Boilerplate')")
+ .first()
+ .within(() => {
+ cy.get("a").click();
+ });
+
+ // Edit boilerplate
+ cy.get("button:contains('Edit')").click();
+ cy.get("form").within(() => {
+ cy.get('[data-testid="Title"]').should(
+ "have.attr",
+ "value",
+ "New Unique Boilerplate"
+ );
+ });
+ cy.get("form").within(() => {
+ cy.get("[data-testid='boilerplate-dropdown']").click();
+ cy.get(".mantine-Select-item:contains('Gender Equality')")
+ .first()
+ .click();
+ cy.get('[data-testid="Title"]').clear();
+ cy.get('[data-testid="Title"]').type(
+ "Test Updated New Unique Boilerplate"
+ );
+ cy.get(".ql-editor").clear();
+ cy.get(".ql-editor").type(
+ `This is some newly edited boilerplate text!`
+ );
+ cy.intercept("PATCH", "/api/organizations/**").as("updateBoilerplate");
+ cy.get("button[type=submit]").click();
+ });
+
+ // Check boilerplate index for the new boilerplate
+ cy.wait("@updateBoilerplate");
+ cy.intercept("GET", "/api/organizations/**").as("getBoilerplates");
+ cy.get("a:contains('Back to All Boilerplates')").click();
+ cy.wait("@getBoilerplates");
+ cy.get("tr")
+ .last()
+ .within(() => {
+ cy.get("td").should("have.length", 5);
+ });
+ cy.get("td:contains('Test Updated New Unique Boilerplate')")
+ .first()
+ .within(() => {
+ cy.get("a").click();
+ });
+
+ // Cancel edit
+ cy.get("button:contains('Edit')").click();
+ cy.intercept("GET", "/api/organizations/**").as("getBoilerplates");
+ cy.get("form").within(() => {
+ cy.get("button:contains('Cancel')").click();
+ });
+ cy.get("a:contains('Back to All Boilerplates')").click();
+
+ // Archive boilerplate
+ cy.wait("@getBoilerplates");
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Archive"]').last().click();
+
+ // Check archived
+ cy.get("button:contains('Archived')").click();
+ cy.get("tr")
+ .last()
+ .within(() => {
+ cy.get("td")
+ .first()
+ .should("contain", "Test Updated New Unique Boilerplate");
+ });
+ });
+ });
+});
diff --git a/cypress/e2e/boilerplate-e2e/category.cy.js b/cypress/e2e/boilerplate-e2e/category.cy.js
new file mode 100644
index 00000000..dd894993
--- /dev/null
+++ b/cypress/e2e/boilerplate-e2e/category.cy.js
@@ -0,0 +1,113 @@
+import "@4tw/cypress-drag-drop";
+
+describe("Create a new category", () => {
+ it("Logs into the application", () => {
+ cy.viewport(2560, 1600);
+ cy.visit("http://localhost:3001");
+ cy.get("a:contains('Log In')").click();
+ cy.get("input[type=email]").type("abarnes@thecypresstree.org");
+ cy.get("input[type=password]").type("password");
+ cy.get("button[type=submit]").click();
+
+ cy.intercept("GET", "/api/organizations/**/categories").as("getCategory");
+ cy.intercept("POST", "/api/organizations/**/categories").as(
+ "createCategory"
+ );
+ cy.intercept("PATCH", "/api/organizations/**/categories/**").as(
+ "editCategory"
+ );
+
+ // Open cypress test organization dashboard
+ cy.get('[data-testid="The Cypress Tree"]').click();
+ cy.get('[data-testid="Categories"]').click();
+
+ // Check that search bar input is there
+ cy.get('[data-testid="Search Categories by Title"]');
+ // Check that search finds a category that exists
+ cy.get('[data-testid="Search Categories by Title"]').type("Legal Aid");
+ cy.get("tr")
+ .last()
+ .within(() => {
+ cy.get("td").first().should("contain", "Legal Aid");
+ cy.get("td").should("have.length", 3);
+ });
+ cy.get('[data-testid="Search Categories by Title"]').clear();
+
+ // Check that search does not find a category that does not exist
+ cy.get('[data-testid="Search Categories by Title"]').type(
+ "Save the Whales"
+ );
+ cy.get("p:contains('There are no categories to display in this tab')");
+ cy.get('[data-testid="Search Categories by Title"]').clear();
+
+ // Create category
+ cy.get("button:contains('Add New Category')").click();
+ cy.get("form").within(() => {
+ cy.get("button").first().click();
+ });
+ cy.get("button:contains('Add New Category')").click();
+ cy.get("form").within(() => {
+ cy.get("input").first().type("New Unique Category First");
+ cy.get("button").last().click();
+ });
+ cy.wait("@createCategory");
+ cy.wait("@getCategory");
+ cy.get("tr")
+ .last()
+ .within(() => {
+ cy.get("td").should("have.length", 3);
+ });
+ cy.get("tr").last().should("contain", "New Unique Category First");
+
+ // Edit category
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Edit"]').last().click();
+ cy.get("form").within(() => {
+ cy.get("input:first").should(
+ "have.attr",
+ "value",
+ "New Unique Category First"
+ );
+ });
+ cy.get("form").within(() => {
+ cy.get("input").first().clear();
+ cy.get("input").first().type(`Test Updated New Unique Category First`);
+ cy.get("button[type=submit]").click();
+ });
+ cy.wait("@editCategory");
+ cy.wait("@getCategory");
+ cy.get("tr")
+ .last()
+ .should("contain", "Test Updated New Unique Category First");
+
+ // Cancel edit
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Edit"]').last().click();
+ cy.get("form").within(() => {
+ cy.get("button:contains('Cancel')").click();
+ });
+ cy.get("dialog").should("not.exist");
+
+ // Add new row to send to archive
+ cy.get("button:contains('All')").click();
+ cy.get("button:contains('Add New Category')").click();
+ cy.get("form").within(() => {
+ cy.get("input").first().type("New Unique Category Second");
+ cy.get("button").last().click();
+ });
+ cy.wait("@createCategory");
+ cy.wait("@getCategory");
+ cy.get("tr")
+ .last()
+ .within(() => {
+ cy.get("td").first().should("contain", "New Unique Category Second");
+ });
+
+ // Send new row to archive from row dropdown menu and check archived
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Archive"]').last().click({ force: true });
+ cy.wait("@editCategory");
+ cy.get("button:contains('Archived')").click();
+ cy.get("tr").last().should("contain", "New Unique Category Second");
+ });
+});
diff --git a/cypress/e2e/boilerplate-e2e/fundingOrg.cy.js b/cypress/e2e/boilerplate-e2e/fundingOrg.cy.js
new file mode 100644
index 00000000..c36aad4f
--- /dev/null
+++ b/cypress/e2e/boilerplate-e2e/fundingOrg.cy.js
@@ -0,0 +1,113 @@
+import "@4tw/cypress-drag-drop";
+
+describe("Create a new funding org", () => {
+ it("Logs into the application", () => {
+ cy.viewport(2560, 1600);
+ cy.visit("http://localhost:3001");
+ cy.get("a:contains('Log In')").click();
+ cy.get("input[type=email]").type("abarnes@thecypresstree.org");
+ cy.get("input[type=password]").type("password");
+ cy.get("button[type=submit]").click();
+ cy.intercept("GET", "/api/organizations/**/funding_orgs/").as(
+ "getFundingOrg"
+ );
+ cy.intercept("POST", "/api/organizations/**/funding_orgs/").as(
+ "createFundingOrg"
+ );
+ // Open cypress test organization dashboard
+ cy.get('[data-testid="The Cypress Tree"]').click();
+ cy.get('[data-testid="Funding Organizations"]').click();
+
+ // Check that search finds a funding org that exists
+ cy.get('[data-testid="Search Funding Organizations by Title"]').type(
+ "The Hinoki Foundation"
+ );
+ cy.get("tr")
+ .last()
+ .within(() => {
+ cy.get("td").first().should("contain", "The Hinoki Foundation");
+ });
+ cy.get('[data-testid="Search Funding Organizations by Title"]').clear();
+
+ // Check that search does not find a funding org that does not exist
+ cy.get('[data-testid="Search Funding Organizations by Title"]').type(
+ "Save the Whales Foundation"
+ );
+ cy.get(
+ "p:contains('There are no funding organizations to display in this tab')"
+ );
+ cy.get('[data-testid="Search Funding Organizations by Title"]').clear();
+
+ // Create funding org
+ cy.get("button:contains('Add New Funding Org')").click();
+ cy.get("form").within(() => {
+ cy.get("button").first().click();
+ });
+ cy.get("button:contains('Add New Funding Org')").click();
+ cy.get("form").within(() => {
+ cy.get("input").first().type("Unique Funding Org Name");
+ cy.get("input").last().type("uniquefundingorgwebsite.org");
+ cy.get("button").last().click();
+ });
+ cy.wait("@createFundingOrg");
+ cy.wait("@getFundingOrg");
+ cy.reload();
+ cy.get('[data-testid="drop-down-mini"]').should("have.length", 4);
+ cy.get("td").should("contain", "Unique Funding Org Name");
+
+ // Edit funding org
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Edit"]').last().click();
+ cy.get("form").within(() => {
+ cy.get("input:first").should(
+ "have.attr",
+ "value",
+ "Unique Funding Org Name"
+ );
+ cy.get("input:last").should(
+ "have.attr",
+ "value",
+ "uniquefundingorgwebsite.org"
+ );
+ });
+ cy.intercept("PATCH", "api/organizations/**").as("editFundingOrg");
+ cy.get("form").within(() => {
+ cy.get("input").first().clear();
+ cy.get("input").first().type(`Test Updated Funding Org`);
+ cy.get("input").last().clear();
+ cy.get("input").last().type("testnewfundingorgwebsiteupdated.org");
+ cy.get("button[type=submit]").click();
+ });
+ cy.wait("@editFundingOrg");
+ cy.wait("@getFundingOrg");
+ // cy.get("td").should("have.length", 12);
+ cy.get("td").should("contain", "Test Updated Funding Org");
+
+ // Cancel edit
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Edit"]').last().click();
+ cy.get("form").within(() => {
+ cy.get("button:contains('Cancel')").click();
+ });
+ cy.get("dialog").should("not.exist");
+
+ // Add new row to send to archive
+ cy.get("button:contains('All')").click();
+ cy.get("button:contains('Add New Funding Org')").click();
+ cy.get("form").within(() => {
+ cy.get("input").first().type("Going To Archived");
+ cy.get("input").last().type("goingtoarchived.org");
+ cy.get("button").last().click();
+ });
+ cy.wait("@createFundingOrg");
+ cy.wait("@getFundingOrg");
+ cy.get('td:contains("Going To Archived")').should("have.length", 1);
+
+ // Send new row to archive from row dropdown menu and check archived
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Archive"]').last().click();
+ cy.get("button:contains('Archived')").click();
+ cy.wait("@editFundingOrg");
+ cy.get('td:contains("Going To Archived")').should("have.length", 1);
+ });
+});
diff --git a/cypress/e2e/boilerplate-e2e/grant.cy.js b/cypress/e2e/boilerplate-e2e/grant.cy.js
new file mode 100644
index 00000000..0fa9d9fe
--- /dev/null
+++ b/cypress/e2e/boilerplate-e2e/grant.cy.js
@@ -0,0 +1,158 @@
+import "@4tw/cypress-drag-drop";
+
+describe("Create a new grant from Grants index", () => {
+ it("Logs into the application", () => {
+ cy.viewport(2560, 1600);
+ cy.visit("http://localhost:3001");
+ cy.intercept("POST", "/api/sessions").as("createSession");
+ cy.get("a:contains('Log In')").click();
+ cy.get("input[type=email]").type("abarnes@thecypresstree.org");
+ cy.get("input[type=password]").type("password");
+ cy.get("button[type=submit]").click();
+
+ // Open cypress test organization dashboard
+ cy.wait("@createSession");
+ cy.get('[data-testid="The Cypress Tree"]').click();
+ cy.get('[data-testid="Grants"]').click();
+
+ cy.intercept("GET", "/api/organizations/**/grants").as("getGrant");
+ cy.intercept("POST", "/api/organizations/**").as("createGrant");
+ cy.intercept("PATCH", "/api/organizations/**").as("updateGrant");
+
+ cy.get("tr").then((res) => {
+ const grantCount = res.length;
+ // Create a grant
+ cy.get("a:contains('Add New Grant')").click();
+ cy.get('[placeholder="Select a Funding Organization"]').click();
+ cy.contains("The Arles Fund").click();
+ cy.contains("Title")
+ .next()
+ .type(`Test New Grant Name ${grantCount + 1}`);
+ cy.contains("RFP URL").next().type("https://www.testgrant.com");
+ cy.contains("Deadline").next().type("2023-01-01T12:00:00");
+ cy.contains("Purpose").next().type("testing purposes");
+ cy.get("button[type=submit]").click();
+
+ // Check for newly created grant in 'All'
+ cy.wait("@createGrant");
+ cy.get('[data-testid="Grants"]').click();
+ cy.get("tr").then(() => {
+ cy.get("tr")
+ .last()
+ .should("contain", `Test New Grant Name ${grantCount + 1}`);
+ });
+
+ // Search for a grant
+ cy.get('[data-testid="Search Grants by Title"]').type(
+ "Cypress Tree Neighborhood Grant"
+ );
+ cy.get("tr")
+ .last()
+ .within(() => {
+ cy.get("td").should("contain", "Cypress Tree Neighborhood Grant");
+ });
+ cy.get('[data-testid="Search Grants by Title"]').clear();
+
+ // Check that search does not find a grant that does not exist
+ cy.get('[data-testid="Search Grants by Title"]').type(
+ "Cypress Tree Restorative Justice Initiative Grant"
+ );
+ cy.get("p:contains('There are no grants to display in this tab')");
+ cy.get('[data-testid="Search Grants by Title"]').clear();
+
+ // Check Drafts for new grant
+ cy.get('[data-testid="drafts-button"]').click();
+ cy.get("tr")
+ .last()
+ .should("contain", `Test New Grant Name ${grantCount + 1}`);
+
+ // Mark grant as submitted and check submitted
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Mark as Submitted"]').last().click();
+
+ // Check that grant is in Submitted
+ cy.wait("@updateGrant");
+ cy.get('[data-testid="submitted-button"]').click();
+ cy.get("tr")
+ .last()
+ .should("contain", `Test New Grant Name ${grantCount + 1}`);
+
+ // Check that grant is still in All
+ cy.get('[data-testid="all-button"]').click();
+ cy.get("tr")
+ .last()
+ .should("contain", `Test New Grant Name ${grantCount + 1}`);
+
+ // Check that grant is not in Drafts
+ cy.get('[data-testid="drafts-button"]').click();
+ cy.get("td").should(
+ "not.contain",
+ `Test New Grant Name ${grantCount + 1}`
+ );
+
+ // Mark grant as Successful
+ cy.get('[data-testid="all-button"]').click();
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Mark as Successful"]').last().click();
+
+ // Check that grant is in Successful
+ cy.wait("@updateGrant");
+ cy.get('[data-testid="successful-button"]').click();
+ cy.get("td").should("contain", `Test New Grant Name ${grantCount + 1}`);
+
+ // Remove from Successful
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Remove from Successful"]').last().click();
+
+ // Check that grant is not in Successful
+ cy.wait("@updateGrant");
+ cy.get('[data-testid="successful-button"]').click();
+ cy.get("td").should(
+ "not.contain",
+ `Test New Grant Name ${grantCount + 1}`
+ );
+
+ // Remove from submitted
+ cy.get('[data-testid="submitted-button"]').click();
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Remove from Submitted"]').last().click();
+
+ // // Check that grant is in Drafts
+ cy.wait("@updateGrant");
+ cy.get('[data-testid="drafts-button"]').click();
+ cy.get("td").should("contain", `Test New Grant Name ${grantCount + 1}`);
+
+ // Create a copy of the last grant
+ cy.get("tr")
+ .last()
+ .should("contain", `Test New Grant Name ${grantCount + 1}`)
+ .then(() => {
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Make a Copy"]').last().click();
+ cy.get("button:contains('Save')").click();
+ });
+ cy.get("h1:contains('copy')");
+ cy.wait("@getGrant");
+ // Go to All and send the new copy to Archived
+ cy.get("a:contains('Back to All Grants')").click();
+
+ cy.reload(); // TODO: See about removing this reload
+ cy.get("h1:contains('All Grants')");
+ cy.get("tr").should("have.length.greaterThan", grantCount + 1);
+ cy.get("tr")
+ .last()
+ .should("contain", `Test New Grant Name ${grantCount + 1} copy`);
+ cy.get("tr")
+ .last()
+ .should("contain", `Test New Grant Name ${grantCount + 1} copy`)
+ .then(() => {
+ cy.get('[data-testid="drop-down-mini"]').last().click();
+ cy.get('[data-testid="Archive"]').last().click();
+ cy.get('[data-testid="archived-button"]').click();
+ cy.get("tr")
+ .last()
+ .should("contain", `Test New Grant Name ${grantCount + 1} copy`);
+ });
+ });
+ });
+});
diff --git a/cypress/e2e/boilerplate-e2e/grantShow.cy.js b/cypress/e2e/boilerplate-e2e/grantShow.cy.js
new file mode 100644
index 00000000..59fc5b6a
--- /dev/null
+++ b/cypress/e2e/boilerplate-e2e/grantShow.cy.js
@@ -0,0 +1,181 @@
+describe("View a Grant on the Grants Show page", () => {
+ it("Logs into the application", () => {
+ cy.viewport(2560, 1600);
+ cy.visit("http://localhost:3001");
+ cy.intercept("POST", "/api/sessions").as("createSession");
+ cy.get("a:contains('Log In')").click();
+ cy.get("input[type=email]").type("abarnes@thecypresstree.org");
+ cy.get("input[type=password]").type("password");
+ cy.get("button[type=submit]").click();
+
+ // Navigate to the grants index
+ cy.wait("@createSession");
+ cy.get('[data-testid="The Cypress Tree"]').click();
+ cy.get('[data-testid="Grants"]').click();
+
+ cy.intercept("GET", "/api/organizations/**/grants").as("getGrant");
+ cy.intercept("POST", "/api/organizations/**/grants/**").as("createGrant");
+ cy.intercept("PATCH", "/api/organizations/**/grants/**").as("editGrant");
+ cy.intercept("POST", "/api/organizations/**/grants/**/sections").as(
+ "createSection"
+ );
+ cy.intercept("PATCH", "/api/organizations/**/grants/**/sections").as(
+ "editSection"
+ );
+ cy.intercept("GET", "/api/organizations/**/boilerplates").as(
+ "getBoilerplate"
+ );
+ cy.intercept("DELETE", "/api/organizations/**/boilerplates/**").as(
+ "deleteBoilerplate"
+ );
+
+ // Select grant to view
+ cy.get("td:contains('Cypress Tree Neighborhood Grant')").first().click();
+ // Find grant fields on show page
+ cy.get("a:contains('Back to All Grants')");
+ cy.get("h1:contains('Cypress Tree Neighborhood Grant')");
+ cy.get("dt").should("contain", "Funding Organization");
+ cy.get("dd").should("contain", "The Hinoki Foundation");
+ cy.get("dt").should("contain", "RFP Website");
+ cy.get("dd").should(
+ "contain",
+ "https://thehinokifoundation.org/neighborhood_seed_grants"
+ );
+ cy.get("dt").should("contain", "Purpose");
+ cy.get("dd").should("contain", "general funding");
+ cy.get("a[type=button]:contains('Copy')");
+ cy.get("a[type=button]:contains('Edit')");
+ cy.get("a[type=button]:contains('Overview')");
+ cy.get("dt").should("contain", "DEADLINE");
+ cy.get("dd").should("contain", "2024");
+ cy.get("b").should("contain", "TOTAL WORD COUNT");
+
+ // Copy
+ cy.get("a[type=button]:contains('Copy')").click();
+ cy.get("h1:contains('Copy Grant')");
+ cy.contains("Purpose").next().find("input").clear();
+ cy.contains("Purpose").next().type("To test the copy process");
+ cy.get("button:contains('Save')").click();
+
+ cy.wait("@createGrant");
+ cy.reload();
+ cy.get("h1:contains('Cypress Tree Neighborhood Grant copy')");
+
+ // Edit grant
+ cy.get("a[type=button]:contains('Edit')").click();
+ cy.get("h1:contains('Edit Grant')");
+ cy.get('[placeholder="Select a Funding Organization"]').click();
+ cy.contains("The Arles Fund").click();
+ cy.contains("Title").next().type("Cypress Tree Neighborhood Grant Edit");
+ cy.contains("RFP URL").next().find("input").clear();
+ cy.contains("RFP URL").next().type("http://www.dndkitedit.com");
+ cy.contains("Deadline").next().type("2023-06-01T12:00:00");
+ cy.contains("Purpose").next().find("input").clear();
+ cy.contains("Purpose").next().type("To test the edit process");
+ cy.get("button[type=submit]").click();
+
+ cy.wait("@editGrant");
+
+ // Add section
+ cy.get('[data-testid="Grants"]').click();
+ cy.get("td:contains('Cypress Tree Neighborhood Grant')")
+ .first()
+ .find("a")
+ .click();
+ cy.get("dd").first().should("contain", "The Arles Fund");
+ cy.get("button:contains('Add Section')").first().click();
+ cy.get("form").within(() => {
+ cy.get("input").first().type("New Section Title");
+ cy.get(".ql-editor").type(`This is a new section!`);
+ cy.get("button[type=submit]").click();
+ });
+ cy.wait("@createSection");
+ cy.wait("@getGrant");
+ cy.reload();
+
+ // Edit the newly created section
+ cy.get("h2:contains('New Section Title')");
+ cy.get(".section__edit-icon").first().click();
+ cy.get("form");
+ cy.get("input").first().type(" edited");
+ cy.get(".ql-editor").clear();
+ cy.get(".ql-editor").type(`This is the edited section.`);
+ cy.get("button[type=submit]").click();
+ cy.wait("@editGrant");
+ //Paste boilerplate into section
+ cy.get("h2:contains('New Section Title')");
+ cy.get(".section__edit-icon").first().click();
+ cy.get("form").within(() => {
+ // Press Paste Boilerplate Content
+ cy.get("button:contains('Paste Boilerplate Content')").click();
+ });
+ cy.get("h2").should("contain", "Paste Boilerplate Content");
+
+ // Search for a boilerplate in the Paste Boilerplate Content panel
+ cy.get('[data-testid="Search"]').type(`Ask Us More`);
+ cy.get(".accordion-table").within(() => {
+ cy.get("li.accordion-item").should("have.length", 1);
+ });
+ cy.get('[data-testid="Search"]').clear();
+
+ //Select Boilerplate and Paste Boilerplate
+ cy.get("button.dropdown__input").click();
+ cy.get(".dropdown__menu")
+ .last()
+ .within(() => {
+ cy.get("button:contains('Family Services')").click();
+ });
+ cy.get(".accordion-item").should("have.length", 2);
+ cy.get('[data-testid="Max Word Count"]').type("15");
+ cy.get(".accordion-item").should("have.length", 1);
+ cy.get("h6.accordion-item__header").click();
+ cy.get("button:contains('Paste Boilerplate')").first().click();
+ // Confirm that checkmark appears
+ cy.get(".paste-boilerplate-text-panel__bottom")
+ .children()
+ .should("have.length", 2);
+ // Then check for the pasted boilerplate inside the form
+ cy.get(".ql-editor").should(
+ "contain",
+ "Ekram Hanna, MIRA Community Engagement Manager, Certified Mental Health First Aid Trainer"
+ );
+ cy.get(".paste-boilerplate-content-popout__close-button").click();
+
+ // Store section as boilerplate
+ cy.get("button:contains('Store Section as Boilerplate')").click();
+ cy.get("h1:contains('Store Section as Boilerplate')");
+ cy.get("form")
+ .eq(1)
+ .within(() => {
+ cy.get("input").first().clear();
+ cy.get("input").first().type("Section To Boilerplate Test");
+ cy.get('[data-testid="category-dropdown"]').click();
+ cy.get('[data-testid="General Purpose"]').first().click();
+ cy.get(".ql-editor").clear();
+ cy.get(".ql-editor").type(
+ `This is the newly created boilerplate text.`
+ );
+ cy.get("button[type=submit]").click();
+ });
+
+ // Delete the section that was saved as a boilerplate
+ cy.get('[data-testid="Boilerplates"]').click();
+ cy.get("a:contains('Section To Boilerplate Test')").first().click();
+ cy.get("button:contains('Edit')").click();
+ cy.get("button:contains('Delete')").click();
+ cy.wait("@deleteBoilerplate");
+ cy.reload();
+ cy.get("tr").last().should("not.contain", "Section To Boilerplate Test");
+
+ // Delete the newly added section
+ cy.get("a:contains('Grants')").click();
+ cy.wait("@getGrant");
+ cy.get("td:contains('Cypress Tree Neighborhood Grant')")
+ .first()
+ .find("a")
+ .click();
+ cy.get("h2:contains('New Section Title')");
+ cy.get(".section__edit-icon").first().click();
+ cy.get("button:contains('Delete Section')").click();
+ });
+});
diff --git a/cypress/e2e/boilerplate-e2e/grantShowOverview.cy.js b/cypress/e2e/boilerplate-e2e/grantShowOverview.cy.js
new file mode 100644
index 00000000..43994175
--- /dev/null
+++ b/cypress/e2e/boilerplate-e2e/grantShowOverview.cy.js
@@ -0,0 +1,139 @@
+import "@4tw/cypress-drag-drop";
+
+describe("Grant overview DnD", () => {
+ it("Logs into the application", () => {
+ cy.viewport(2560, 1600);
+ cy.visit("http://localhost:3001");
+ cy.get("a:contains('Log In')").click();
+ cy.get("input[type=email]").type("abarnes@thecypresstree.org");
+ cy.get("input[type=password]").type("password");
+ cy.get("button[type=submit]").click();
+ cy.get('[data-testid="The Cypress Tree"]').click();
+ cy.get('[data-testid="Grants"]').click();
+ cy.get(
+ '[data-testid="Cypress Tree Overview Drag and Drop Test Grant"]'
+ ).click();
+ cy.get("a:contains('Overview')").click();
+
+ cy.intercept("PATCH", "/api/organizations/**").as("editGrant");
+
+ // Check that the preview panel is visible and has the same number of items
+ cy.get(".grants-show-overview__preview-container").within(() => {
+ cy.get(".grants-show-overview__preview-text")
+ .children()
+ .then((res) => {
+ cy.get(".grants-show-overview__preview-text")
+ .children()
+ .should("have.length", res.length);
+ // Show Section Title
+ cy.get(".checkbox__input").click({ force: true });
+ cy.get(".grants-show-overview__preview-title").should(
+ "have.length",
+ res.length
+ );
+ });
+ });
+
+ // Drag and drop one section and check that Save and Undo are enabled
+ cy.get('[data-testid="Section 1"]').move({
+ deltaY: 500,
+ force: true,
+ });
+ cy.get(".checkbox__input").click({ force: true });
+ cy.get(".grants-show-overview__preview-title").should("have.length", 6);
+ cy.get(".grants-show-overview__preview-title")
+ .last()
+ .should("contain", "Section 1");
+ cy.get(".sortable-item").should("have.length", 6);
+ cy.get(".sortable-item").last().should("contain", "Section 1");
+ cy.get("button:contains('Save')").should("not.have.attr", "data-disabled");
+ cy.get("button:contains('Undo')").should(
+ "not.have.attr",
+ "data-disabled",
+ "true"
+ );
+ cy.get("button:contains('Redo')").should(
+ "have.attr",
+ "data-disabled",
+ "true"
+ );
+
+ // Save and check that all buttons are disabled
+ cy.get("button:contains('Save')").click();
+ cy.wait("@editGrant");
+ cy.reload();
+ cy.get(".sortable-item").should("have.length", 6);
+ cy.get(".sortable-item").last().should("contain", "Section 1");
+ cy.get("button:contains('Save')").should(
+ "have.attr",
+ "data-disabled",
+ "true"
+ );
+ cy.get("button:contains('Undo')").should(
+ "have.attr",
+ "data-disabled",
+ "true"
+ );
+ cy.get("button:contains('Redo')").should(
+ "have.attr",
+ "data-disabled",
+ "true"
+ );
+
+ // Drag another section, click on Undo and check that Save and Undo are disabled and Redo is enabled
+ cy.get('[data-testid="Section 2"]').move({
+ deltaY: 400,
+ force: true,
+ });
+ cy.get("button:contains('Undo')").click();
+ cy.get("button:contains('Save')").should(
+ "have.attr",
+ "data-disabled",
+ "true"
+ );
+ cy.get("button:contains('Undo')").should(
+ "have.attr",
+ "data-disabled",
+ "true"
+ );
+ cy.get("button:contains('Redo')").should(
+ "not.have.attr",
+ "data-disabled",
+ "true"
+ );
+
+ // Click on Redo and check that Save and Undo are not disabled and Redo is disabled
+ cy.get("button:contains('Redo')").click();
+ cy.get("button:contains('Save')").should(
+ "not.have.attr",
+ "data-disabled",
+ "true"
+ );
+ cy.get("button:contains('Undo')").should(
+ "not.have.attr",
+ "data-disabled",
+ "true"
+ );
+ cy.get("button:contains('Redo')").should(
+ "have.attr",
+ "data-disabled",
+ "true"
+ );
+
+ /* Drag remaining sections so that the original order is
+ restored */
+ cy.get('[data-testid="Section 2"]').move({
+ deltaY: -500,
+ force: true,
+ });
+ cy.get('[data-testid="Section 1"]').move({
+ deltaY: -500,
+ force: true,
+ });
+ cy.get(".sortable-item").last().should("contain", "Section 6");
+ cy.get(".sortable-item").first().should("contain", "Section 1");
+ cy.get("button:contains('Save')").click();
+ cy.get(".sortable-item").last().should("contain", "Section 6");
+ cy.get(".sortable-item").first().should("contain", "Section 1");
+ });
+});
diff --git a/cypress/e2e/test-drafts/dnd.cy.js b/cypress/e2e/test-drafts/dnd.cy.js
new file mode 100644
index 00000000..ef0beecd
--- /dev/null
+++ b/cypress/e2e/test-drafts/dnd.cy.js
@@ -0,0 +1,573 @@
+import "@4tw/cypress-drag-drop";
+
+describe("Grant overview DnD", () => {
+ it("Logs into the application", () => {
+ // #1 --------------------------------------------------------------------------
+ cy.viewport(2560, 1600);
+ cy.visit("http://localhost:3001");
+ cy.get('[data-testid="log-in-button"]').click();
+ cy.get("input[type=email]").type(
+ "abarnes@thecypresstree.org" /* {
+ delay: 100,
+ } */
+ );
+ cy.get("input[type=password]").type("password");
+ cy.get("button[type=submit]").click();
+ cy.get('[data-testid="The Cypress Tree"]').click();
+ cy.get('[data-testid="Grants"]').click();
+ cy.get('[data-testid="Good Place Neighborhood Grant"]').click();
+ cy.get('[data-testid="overview"]').click();
+ // drag and drop test
+ // the value corresponding to the 100% of the slider
+ // const maxValue = 20;
+
+ // drag-and-drop target value in percentage
+ // const targetValue = 0.4; // 40%
+
+ // #6 ----------------------------------------------
+ cy.get('[data-testid="Organization Overview"]').move({ deltaY: 300 });
+ // cy.get('[data-testid="Organization Overview"]').drag(
+ // '[data-testid="Programs"]',
+ // {
+ // source: { x: 100, y: 100 }, // applies to the element being dragged
+ // target: { position: "left" }, // applies to the drop target
+ // force: true,
+ // }
+ // );
+ // cy.get('[data-testid="Organization Overview"]').trigger("dragstart");
+
+ // cy.get('[data-testid="Programs"]')
+ // .trigger("dragenter", { force: true })
+ // .trigger("dragover", { force: true })
+ // .trigger("drop", { force: true })
+ // .wait(50)
+ // .trigger("dragend", { force: true });
+
+ // cy.get('[data-testid="Programs"]')
+ // .then((res) => {
+ // return res[0].getBoundingClientRect();
+ // })
+ // .then((res) => {
+ // console.log("res", res);
+ // cy.get('[data-testid="Organization Overview"]')
+ // .wait(500)
+ // .trigger("mousedown", { which: 1, force: true });
+
+ // cy.get('[data-testid="Organization Overview"]')
+ // .wait(500)
+ // .trigger("mousemove", {
+ // // .wait(500)
+ // // .trigger("mousemove", { clientX: res.x, clientY: res.y, force: true })
+ // // clientX: res.x,
+ // // clientY: res.y,
+ // force: true,
+
+ // which: 1,
+ // clientX: 839,
+ // clientY: 720, // res.y + 300, // 1300
+ // });
+
+ // cy.get('[data-testid="Organization Overview"]')
+ // .wait(500)
+ // .trigger("mouseup", { force: true });
+ // });
+
+ cy
+ // retrieving the slider HTML element
+ .get(".sortable-item")
+ .first()
+ .then((slider) => {
+ console.log(slider);
+ // defining the CSS selector for the slider handle HTML element
+ // const sliderBoundingBox = slider.get(0).getBoundingClientRect();
+ // console.log(slider.get(0).getBoundingClientRect());
+ // console.log(slider.get(0));
+ // const targetSelector = cy.get('[data-testid="Programs"]').getBoundingClientRect());
+ let targetBoundingBox = {};
+ cy.get('[data-testid="Programs"]').then((target) => {
+ targetBoundingBox = target.get(0).getBoundingClientRect();
+ console.log(targetBoundingBox);
+ slider
+ .trigger("mousedown")
+ .trigger("mousemove", {
+ pageX: targetBoundingBox.x,
+ pageY: targetBoundingBox.y,
+ })
+ .trigger("mouseup");
+ });
+ // console.log(targetBoundingBox);
+
+ // console.log(sliderSelector);
+
+ // getting the slider bounding box size
+ // const sliderBoundingBox = sliderSelector[0].getBoundingClientRect();
+
+ // performing the drag-and-drop interaction
+ // by simulating the mouse interaction
+ // slider
+ // .trigger("mousedown")
+ // .trigger("mousemove", {
+ // pageX:
+ // sliderBoundingBox.x +
+ // (sliderBoundingBox.width - sliderBoundingBox.x) * targetValue,
+ // pageY: 33,
+ // })
+ // .trigger("mouseup");
+
+ // cy
+ // // retrieving the input HTML element
+ // .get(".ant-input-number-input")
+ // .first()
+ // // getting the "value" HTML attribute
+ // .invoke("attr", "value")
+ // .then((value) => {
+ // // calculating the expected value
+ // const expectedValue = `${maxValue * targetValue}`;
+
+ // cy.wrap(value).should("be.eq", expectedValue);
+ // });
+ });
+ });
+});
+// const dataTransfer = new DataTransfer();
+// cy.get('[data-testid="Organization Overview"]').trigger("dragstart", {
+// dataTransfer,
+// });
+// cy.get('[data-testid="Programs"]').trigger("drop", { dataTransfer });
+// #2 --------------------------------------------------------------------------
+// cy.get('[data-testid="overview"]').should("exist");
+// cy.get('[data-testid="Programs"]').should("exist");
+// // Cypress.Commands.add("set_typeCarName", () => {
+// // return cy.wrap(webnewsite.set_typeCarName()); //return the wrap and use in chain
+// // });
+// // function set_typeCarName() {
+// // let carName = "CAR 1";
+// // cy.get("#newSiteCityInput").type(carName);
+// // cy.log("log1 = " + carName);
+// // return carName;
+// // }
+// function set_draggable() {
+// cy.get('[data-testid="Organizations Overview"]');
+// }
+// function set_droppable() {
+// cy.get('[data-testid="Programs"]');
+// }
+// Cypress.Commands.add("set_draggable", () => {
+// return cy.wrap(set_draggable()); //return the wrap and use in chain
+// });
+// Cypress.Commands.add("set_droppable", () => {
+// return cy.wrap(set_droppable()); //return the wrap and use in chain
+// });
+// // const droppable = cy.get('[data-testid="Programs"]')[0]; // Drop over this
+// // const draggable = cy.get('[data-testid="overview"]'); // Pick up this
+// // const droppable = cy.get('[data-testid="Programs"]')[0]; // Drop over this
+// // cy.set_droppable().getBoundingClientRect();
+// cy.set_draggable().dispatchEvent(new MouseEvent("mousedown"));
+// cy.set_draggable().dispatchEvent(
+// new MouseEvent("mousemove", { clientX: 10, clientY: 0 })
+// );
+// cy.set_draggable().dispatchEvent(
+// new MouseEvent("mousemove", {
+// // I had to add (as any here --> maybe this can help solve the issue??)
+// clientX: coords.left + 10,
+// clientY: coords.top + 10, // A few extra pixels to get the ordering right
+// })
+// );
+// cy.set_draggable().dispatchEvent(new MouseEvent("mouseup"));
+// cy.get('[data-testid="Programs"]');
+// #3 --------------------------------------------------
+// Cypress.Commands.add(
+// "loginGoToOverview",
+// {
+// prevSubject: false,
+// },
+// (email, pass) => {
+// cy.viewport(2560, 1600);
+// cy.visit("http://localhost:3001");
+// cy.get('[data-testid="log-in-button"]').click();
+// cy.get("input[type=email]").type(
+// email /* {
+// delay: 100,
+// } */
+// );
+// cy.get("input[type=password]").type(pass);
+// cy.get("button[type=submit]").click();
+// cy.get('[data-testid="The Good Place"]').click();
+// cy.get('[data-testid="Grants"]').click();
+// cy.get('[data-testid="Good Place Neighborhood Grant"]').click();
+// cy.get('[data-testid="overview"]').click();
+// }
+// );
+// Cypress.Commands.add("dragAndDrop", (subject, target) => {
+// Cypress.log({
+// name: "DRAGNDROP",
+// message: `Dragging element ${subject} to ${target}`,
+// consoleProps: () => {
+// return {
+// subject: subject,
+// target: target,
+// };
+// },
+// });
+// const BUTTON_INDEX = 0;
+// const SLOPPY_CLICK_THRESHOLD = 10;
+// cy.get(target)
+// .first()
+// .then(($target) => {
+// let coordsDrop = $target[0].getBoundingClientRect();
+// cy.get(subject)
+// .first()
+// .then((subject) => {
+// const coordsDrag = subject[0].getBoundingClientRect();
+// cy.wrap(subject)
+// .trigger("mousedown", {
+// button: BUTTON_INDEX,
+// clientX: coordsDrag.x,
+// clientY: coordsDrag.y,
+// force: true,
+// })
+// .trigger("mousemove", {
+// button: BUTTON_INDEX,
+// clientX: coordsDrag.x + SLOPPY_CLICK_THRESHOLD,
+// clientY: coordsDrag.y,
+// force: true,
+// });
+// cy.get("body")
+// .trigger("mousemove", {
+// button: BUTTON_INDEX,
+// clientX: coordsDrop.x,
+// clientY: coordsDrop.y,
+// force: true,
+// })
+// .trigger("mouseup");
+// });
+// });
+// });
+// cy.loginGoToOverview("michael@thegoodplace.com", "password");
+// cy.dragAndDrop(
+// '[data-testid="Organization Overview"]',
+// '[data-testid="Programs"]'
+// );
+//--------------------------------------------------
+// #4----------------------------------------------------
+// const dataTransfer = new DataTransfer();
+// cy.viewport(2560, 1600);
+// cy.visit("http://localhost:3001");
+// cy.get('[data-testid="log-in-button"]').click();
+// cy.get("input[type=email]").type(
+// "michael@thegoodplace.com" /* {
+// delay: 100,
+// } */
+// );
+// cy.get("input[type=password]").type("password");
+// cy.get("button[type=submit]").click();
+// cy.get('[data-testid="The Good Place"]').click();
+// cy.get('[data-testid="Grants"]').click();
+// cy.get('[data-testid="Good Place Neighborhood Grant"]').click();
+// cy.get('[data-testid="overview"]').click();
+// let coordsDrop = { x: null, y: null };
+// cy.get('[data-testid="Organization Overview"]').trigger("dragstart", {
+// dataTransfer,
+// });
+// cy.get('[data-testid="Programs"]')
+// .then(($target) => {
+// coordsDrop = $target[0].getBoundingClientRect();
+// })
+// .trigger("dragenter", {
+// // button: BUTTON_INDEX,
+// clientX: coordsDrop.x,
+// clientY: coordsDrop.y,
+// force: true,
+// dataTransfer,
+// })
+// .trigger("dragover", {
+// // button: BUTTON_INDEX,
+// clientX: coordsDrop.x,
+// clientY: coordsDrop.y,
+// force: true,
+// dataTransfer,
+// })
+// .trigger("drop", {
+// // button: BUTTON_INDEX,
+// clientX: coordsDrop.x,
+// clientY: coordsDrop.y,
+// force: true,
+// dataTransfer,
+// })
+// .wait(50)
+// .trigger("dragend", { force: true });
+// ------------------------------------------------------
+// #5 --------------------------------------------------
+// const dataTransfer = new DataTransfer();
+// Cypress.Commands.add(
+// "loginGoToOverview",
+// {
+// prevSubject: false,
+// },
+// (email, pass) => {
+// cy.viewport(2560, 1600);
+// cy.visit("http://localhost:3001");
+// cy.get('[data-testid="log-in-button"]').click();
+// cy.get("input[type=email]").type(
+// email /* {
+// delay: 100,
+// } */
+// );
+// cy.get("input[type=password]").type(pass);
+// cy.get("button[type=submit]").click();
+// cy.get('[data-testid="The Good Place"]').click();
+// cy.get('[data-testid="Grants"]').click();
+// cy.get('[data-testid="Good Place Neighborhood Grant"]').click();
+// cy.get('[data-testid="overview"]').click();
+// }
+// );
+// Cypress.Commands.add("dragAndDrop", (subject, target) => {
+// Cypress.log({
+// name: "DRAGNDROP",
+// message: `Dragging element ${subject} to ${target}`,
+// consoleProps: () => {
+// return {
+// subject: subject,
+// target: target,
+// };
+// },
+// });
+// const BUTTON_INDEX = 0;
+// const SLOPPY_CLICK_THRESHOLD = 10;
+// cy.get(target)
+// .first()
+// .then(($target) => {
+// let coordsDrop = $target[0].getBoundingClientRect();
+// cy.get(subject)
+// .first()
+// .then((subject) => {
+// const coordsDrag = subject[0].getBoundingClientRect();
+// cy.wrap(subject)
+// .trigger("dragstart", {
+// button: BUTTON_INDEX,
+// clientX: coordsDrag.x,
+// clientY: coordsDrag.y,
+// force: true,
+// dataTransfer,
+// })
+// .trigger("dragenter", {
+// button: BUTTON_INDEX,
+// clientX: coordsDrop.x + SLOPPY_CLICK_THRESHOLD,
+// clientY: coordsDrop.y,
+// force: true,
+// dataTransfer,
+// })
+// .trigger("dragover", {
+// button: BUTTON_INDEX,
+// clientX: coordsDrop.x + SLOPPY_CLICK_THRESHOLD,
+// clientY: coordsDrop.y,
+// force: true,
+// dataTransfer,
+// });
+// cy.get("body")
+// .trigger("drop", {
+// button: BUTTON_INDEX,
+// clientX: coordsDrop.x,
+// clientY: coordsDrop.y,
+// force: true,
+// dataTransfer,
+// })
+// .trigger("dragend");
+// });
+// });
+// });
+// cy.loginGoToOverview("michael@thegoodplace.com", "password");
+// cy.dragAndDrop(
+// '[data-testid="Organization Overview"]',
+// '[data-testid="Programs"]'
+// );
+//--------------------------------------------------
+// // #6 ----------------------------------------------
+// cy.get('[data-testid="Programs"]')
+// .then((res) => {
+// return res[0].getBoundingClientRect();
+// })
+// .then((res) => {
+// console.log("res", res);
+// cy.get('[data-testid="Organization Overview"]')
+// .trigger("mousedown", { force: true })
+// // .wait(2000)
+// // .trigger("mousemove", { clientX: res.x, clientY: res.y, force: true })
+// .trigger("mousemove", {
+// clientX: res.x,
+// clientY: res.y,
+// force: true,
+// })
+// // .wait(2000)
+// .trigger("mouseup", { force: true });
+// });
+
+// cy.get('[data-testid="Programs"]').drag(
+// '[data-testid="Organization Overview"]',
+// {
+// source: { x: 100, y: 400 }, // applies to the element being dragged
+// target: { position: "center" }, // applies to the drop target
+// force: true, // applied to both the source and target element
+// }
+// );
+
+// cy.get('[data-testid="Organization Overview"]').move({
+// deltaX: 100,
+// deltaY: 500,
+// });
+
+// cy
+// // retrieving the slider HTML element
+// .get(".sortable-item")
+// .first()
+// .then((slider) => {
+// console.log(slider);
+// // defining the CSS selector for the slider handle HTML element
+// const sliderSelector = cy.get('[data-testid="Organization Overview"]');
+// // .first();
+// // console.log(sliderSelector);
+// const sliderHandle = cy.get(sliderSelector).firstChild;
+// console.log(cy.get(sliderSelector).first());
+
+// // getting the slider bounding box size
+// const sliderBoundingBox = slider.get(0).getBoundingClientRect();
+// console.log("sliderBoundingBox", sliderBoundingBox);
+// // performing the drag-and-drop interaction
+// // with the cypress-drag-drop drag function
+// sliderHandle.drag(sliderSelector, {
+// force: true,
+// target: {
+// // moving the slider to the target value in %
+// x: sliderBoundingBox.width,
+// y: 1000,
+// },
+// });
+// // slider.move({
+// // deltaX: 100,
+// // deltaY: 500,
+// // });
+
+// // cy
+// // // retrieving the input HTML element
+// // .get(".ant-input-number-input")
+// // .first()
+// // // getting the "value" HTML attribute
+// // .invoke("attr", "value")
+// // .then((value) => {
+// // // calculating the expected value
+// // const expectedValue = `${maxValue * targetValue}`;
+
+// // cy.wrap(value).should("be.eq", expectedValue);
+// // });
+// });
+// // #6 ----------------------------------------------
+// // // cy.viewport(2560, 1600);
+// // // cy.visit("http://localhost:3001");
+// // // cy.get('[data-testid="log-in-button"]').click();
+// // // cy.get("input[type=email]").type(
+// // // "michael@thegoodplace.com" /* {
+// // // delay: 100,
+// // // } */
+// // // );
+// // // cy.get("input[type=password]").type("password");
+// // // cy.get("button[type=submit]").click();
+// // // cy.get('[data-testid="The Good Place"]').click();
+// // // cy.get('[data-testid="Grants"]').click();
+// // // cy.get('[data-testid="Good Place Neighborhood Grant"]').click();
+// // // cy.get('[data-testid="overview"]').click();
+// // // cy.get('[data-testid="Programs"]');
+// // // cy.get(target)
+// // // .then($target => {
+// // // let coords = $target[0].getBoundingClientRect();
+// // // });
+// // Cypress.Commands.add(
+// // "mouseMoveBy",
+// // {
+// // prevSubject: false,
+// // },
+// // (subject, x, y, delay) => {
+// // cy.wrap(subject, { log: false })
+// // .then((subject) => {
+// // console.log("subject", subject);
+// // const initialRect = subject.get(0).getBoundingClientRect();
+// // // const windowScroll = getDocumentScroll();
+// // return [subject, initialRect /* , windowScroll */];
+// // })
+// // .then(([subject, initialRect]) => {
+// // cy.wrap(subject, { log: true })
+// // .trigger("mousedown", { force: true })
+// // .wait(delay || 0, { log: Boolean(delay) })
+// // .trigger("mousemove", {
+// // force: true,
+// // clientX: Math.floor(
+// // initialRect.left + initialRect.width / 2 + x / 2
+// // ),
+// // clientY: Math.floor(
+// // initialRect.top + initialRect.height / 2 + y / 2
+// // ),
+// // })
+// // .trigger("mousemove", {
+// // force: true,
+// // clientX: Math.floor(
+// // initialRect.left + initialRect.width / 2 + x
+// // ),
+// // clientY: Math.floor(
+// // initialRect.top + initialRect.height / 2 + y
+// // ),
+// // })
+// // .wait(100)
+// // .trigger("mouseup", { force: true })
+// // .wait(250)
+// // .then((subject) => {
+// // const finalRect = subject.get(0).getBoundingClientRect();
+// // // const windowScroll = getDocumentScroll();
+// // // const windowScrollDelta = {
+// // // x: windowScroll.x - initialWindowScroll.x,
+// // // y: windowScroll.y - initialWindowScroll.y,
+// // // };
+// // // const delta = {
+// // // x: Math.round(
+// // // finalRect.left - initialRect.left - windowScrollDelta.x
+// // // ),
+// // // y: Math.round(
+// // // finalRect.top - initialRect.top - windowScrollDelta.y
+// // // ),
+// // // };
+// // return { subject, initialRect, finalRect };
+// // });
+// // });
+// // }
+// // );
+// // Cypress.Commands.addAll({
+// // loginGoToOverview(e, p) {},
+// // mouseMoveBy(a) {},
+// // });
+// // cy.loginGoToOverview("michael@thegoodplace.com", "password");
+// // cy.mouseMoveBy(`[data-testid="Programs"]`);
+// // cy.get('[data-testid="Programs"]')
+// // .then((res) => {
+// // return res[0].getBoundingClientRect();
+// // })
+// // .then((res) => {
+// // console.log("res", res);
+// // cy.get('[data-testid="Organization Overview"]')
+// // .trigger("mousedown", { force: true })
+// // // .wait(2000)
+// // // .trigger("mousemove", { clientX: res.x, clientY: res.y, force: true })
+// // .trigger("mousemove", {
+// // clientX: res.x,
+// // clientY: res.y,
+// // force: true,
+// // })
+// // // .wait(2000)
+// // .trigger("mouseup", { force: true });
+// // });
+// // cy.get('[data-testid="Organization Overview"]')
+// // .trigger("mousedown", "topLeft")
+// // // .wait(2000)
+// // .trigger("mousemove", {
+// // // force: true,
+// // clientX: coords[0],
+// // clientY: coords[1],
+// // });
+// });
diff --git a/cypress/e2e/test-drafts/dndV2.cy.js b/cypress/e2e/test-drafts/dndV2.cy.js
new file mode 100644
index 00000000..489fc4de
--- /dev/null
+++ b/cypress/e2e/test-drafts/dndV2.cy.js
@@ -0,0 +1,147 @@
+import "@4tw/cypress-drag-drop";
+
+describe("Grant overview DnD", () => {
+ it("Logs into the application", () => {
+ cy.viewport(2560, 1600);
+ cy.visit("http://localhost:3001");
+ cy.get('[data-testid="log-in-button"]').click();
+ cy.get("input[type=email]").type(
+ "michael@thegoodplace.com" /* {
+ delay: 100,
+ } */
+ );
+ cy.get("input[type=password]").type("password");
+ cy.get("button[type=submit]").click();
+ cy.get('[data-testid="The Cypress Tree"]').click();
+ cy.get('[data-testid="Grants"]').click();
+ cy.get('[data-testid="Good Place Neighborhood Grant"]').click();
+ cy.get('[data-testid="overview"]').click();
+
+ // #1 -------------------------------------------
+ // https://github.com/clauderic/dnd-kit/issues/208
+ cy.get('[data-testid="Organization Overview"]').move({
+ deltaY: 600,
+ force: true,
+ });
+ // cy.get(".sortable-item")
+ // .first()
+ // .then((res) => {
+ // console.log(res);
+ // // defining the CSS selector for the res handle HTML element
+ // // const resBoundingBox = res.get(0).getBoundingClientRect();
+ // // console.log(res.get(0).getBoundingClientRect());
+ // // console.log(res.get(0));
+ // // const targetSelector = cy.get('[data-testid="Programs"]').getBoundingClientRect());
+ // let targetBoundingBox = {};
+ // cy.get('[data-testid="Programs"]').then((target) => {
+ // targetBoundingBox = target.get(0).getBoundingClientRect();
+ // console.log(targetBoundingBox);
+ // res
+ // .trigger("mousedown")
+ // .trigger("mousemove", {
+ // clientX: targetBoundingBox.x,
+ // clientY: targetBoundingBox.y,
+ // })
+ // .trigger("mouseup");
+ // });
+ // });
+
+ // #2 ----------------------------------------------
+ // const dataTransfer = new DataTransfer();
+ // let coordsDrop = { x: null, y: null };
+ // cy.get('[data-testid="Organization Overview"]').trigger("dragstart", {
+ // dataTransfer,
+ // });
+ // cy.get('[data-testid="Programs"]')
+ // .then(($target) => {
+ // coordsDrop = $target[0].getBoundingClientRect();
+ // })
+ // .trigger("dragenter", {
+ // clientX: coordsDrop.x,
+ // clientY: coordsDrop.y,
+ // force: true,
+ // dataTransfer,
+ // })
+ // .trigger("dragover", {
+ // clientX: coordsDrop.x,
+ // clientY: coordsDrop.y,
+ // force: true,
+ // dataTransfer,
+ // })
+ // .trigger("drop", {
+ // clientX: coordsDrop.x,
+ // clientY: coordsDrop.y,
+ // force: true,
+ // dataTransfer,
+ // })
+ // // .wait(50)
+ // .trigger("dragend", { force: true });
+
+ // #3 ---------------------------------------
+ // https://github.com/cypress-io/cypress-example-recipes/blob/master/examples/testing-dom__drag-drop/cypress/e2e/drag_n_drop_spec.cy.js
+ // https://javascript.plainenglish.io/working-with-mouse-actions-in-cypress-e7ef22aa4b89
+ // We couldn't figure out how to keep the element selected from mousedown to mousemove -
+ // it would 're-select' whatever was in the new location without dragging
+ // This function sets the coordinates for a test move of a dragged draggable object. This is the original:
+ // function movePiece(dataId, x, y) {
+ // cy.get(`[data-testid=${dataId}]`)
+ // .trigger("mousedown", { which: 1 })
+ // .trigger("mousemove", { clientX: x, clientY: y })
+ // .trigger("mouseup", { force: true });
+ // }
+ // We are updating it to work for our draggable sections:
+ // function moveSection(testId, xArg, yArg) {
+ // cy.get(`[data-testid=${testId}]`)
+ // .trigger("mousedown", { which: 0 })
+ // .trigger("mousemove", { clientX: xArg, clientY: yArg })
+ // .trigger("mouseup", { force: true });
+ // }
+ // const location = response.get(0).getBoundingClientRect();
+ // cy.get(`[data-testid="Organization Overview"]`)
+ // .trigger("mousedown", "center", {
+ // button: 1,
+ // })
+ // .then((res) => {
+ // res.trigger("mousemove", {
+ // which: 1,
+ // clientX: 90,
+ // clientY: 600,
+ // })
+ // .trigger("mouseup", { force: true });
+ // cy.get(".925b9be2-fed8-4d89-a8d9-5204e32866ab")
+ // .trigger("mousedown", { which: 1 })
+ // .trigger("mousemove", {
+ // which: 1,
+ // clientX: 90,
+ // clientY: 600,
+ // })
+ // .trigger("mouseup", { force: true });
+ // const location = response.get(0).getBoundingClientRect();
+ // const xArg = location.x + 200;
+ // const yArg = location.y + 100;
+
+ // #4 ---------------------------------------
+ // https://vinayaktitti.medium.com/handling-drag-and-drop-feature-in-cypress-67522f28b7d4
+ // const dataTransfer = new DataTransfer();
+
+ // // cy.get(`[data-testid="Organization Overview"]`).trigger("dragstart", {
+ // // dataTransfer,
+ // // });
+ // //select the element we want to drag and define it as the thing we want to drag
+ // //get the location where we want to drag it to and define it as the place we want to drag to/drop
+ // //drag
+ // //drop
+ // cy.get(`[data-testid="Organization Overview"]`).trigger("dragstart", {
+ // dataTransfer,
+ // });
+ // cy.get(`[data-testid="Programs"]`).trigger("drop", { dataTransfer });
+ // cy.get(`[data-testid="Programs"]`).trigger("dragend");
+ // // cy.get(draglocator).first().trigger("dragend");
+
+ // #5 ---------------------------------------
+ // https://github.com/4teamwork/cypress-drag-drop/blob/master/index.js move()
+ // cy.get(`[data-testid="Organization Overview"]`).trigger("dragstart", {
+ // dataTransfer,
+ // });
+ });
+});
diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json
new file mode 100644
index 00000000..02e42543
--- /dev/null
+++ b/cypress/fixtures/example.json
@@ -0,0 +1,5 @@
+{
+ "name": "Using fixtures to represent data",
+ "email": "hello@cypress.io",
+ "body": "Fixtures are a great way to mock data for responses to routes"
+}
diff --git a/cypress/support/commands.js b/cypress/support/commands.js
new file mode 100644
index 00000000..119ab03f
--- /dev/null
+++ b/cypress/support/commands.js
@@ -0,0 +1,25 @@
+// ***********************************************
+// This example commands.js shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add('login', (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This will overwrite an existing command --
+// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
diff --git a/cypress/support/component-index.html b/cypress/support/component-index.html
new file mode 100644
index 00000000..ac6e79fd
--- /dev/null
+++ b/cypress/support/component-index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ Components App
+
+
+
+
+
\ No newline at end of file
diff --git a/cypress/support/component.js b/cypress/support/component.js
new file mode 100644
index 00000000..807f8a77
--- /dev/null
+++ b/cypress/support/component.js
@@ -0,0 +1,28 @@
+/* eslint-disable prettier/prettier */
+// ***********************************************************
+// This example support/component.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import "./commands";
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
+
+import { mount } from "cypress/react";
+
+Cypress.Commands.add("mount", mount);
+
+// Example use:
+// cy.mount( )
diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js
new file mode 100644
index 00000000..5b1de002
--- /dev/null
+++ b/cypress/support/e2e.js
@@ -0,0 +1,21 @@
+/* eslint-disable prettier/prettier */
+// ***********************************************************
+// This example support/e2e.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import "./commands";
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
diff --git a/package-lock.json b/package-lock.json
index d3531ee8..c7568eff 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -35,6 +35,7 @@
"seedrandom": "^3.0.5"
},
"devDependencies": {
+ "@4tw/cypress-drag-drop": "^2.2.3",
"@storybook/addon-a11y": "^6.5.9",
"@storybook/addon-actions": "^6.5.9",
"@storybook/addon-essentials": "^7.0.9",
@@ -46,9 +47,11 @@
"@testing-library/user-event": "^13.5.0",
"@vitejs/plugin-react": "^2.0.0",
"@vitest/ui": "^0.18.1",
+ "cypress": "^12.4.1",
"eslint": "^8.19.0",
"eslint-config-prettier": "^8.3.0",
"eslint-config-react-app": "^7.0.1",
+ "eslint-plugin-cypress": "^2.12.1",
"eslint-plugin-prettier": "^3.4.0",
"jsdom": "^20.0.0",
"prettier": "^2.3.1",
@@ -61,6 +64,15 @@
"node": ">=16"
}
},
+ "node_modules/@4tw/cypress-drag-drop": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@4tw/cypress-drag-drop/-/cypress-drag-drop-2.2.5.tgz",
+ "integrity": "sha512-3ghTmzhOmUqeN6U3QmUnKRUxI7OMLbJA4hHUY/eS/FhWJgxbiGgcaELbolWnBAOpajPXcsNQGYEj9brd59WH6A==",
+ "dev": true,
+ "peerDependencies": {
+ "cypress": "2 - 13"
+ }
+ },
"node_modules/@ampproject/remapping": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
@@ -2003,6 +2015,88 @@
"integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==",
"dev": true
},
+ "node_modules/@colors/colors": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
+ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/@cypress/request": {
+ "version": "2.88.12",
+ "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz",
+ "integrity": "sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==",
+ "dev": true,
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "http-signature": "~1.3.6",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "performance-now": "^2.1.0",
+ "qs": "~6.10.3",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "^4.1.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@cypress/request/node_modules/qs": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz",
+ "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/@cypress/request/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true,
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@cypress/xvfb": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
+ "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.1.0",
+ "lodash.once": "^4.1.1"
+ }
+ },
+ "node_modules/@cypress/xvfb/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
"node_modules/@dnd-kit/accessibility": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.0.0.tgz",
@@ -2186,54 +2280,6 @@
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz",
"integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww=="
},
- "node_modules/@esbuild/android-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz",
- "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz",
- "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz",
- "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/@esbuild/darwin-arm64": {
"version": "0.17.18",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz",
@@ -2250,411 +2296,123 @@
"node": ">=12"
}
},
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz",
- "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+ "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
"dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.3.2",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
"engines": {
- "node": ">=12"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz",
- "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@eslint/eslintrc/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "13.16.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz",
+ "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==",
"dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz",
- "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/@esbuild/linux-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz",
- "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
+ "node_modules/@floating-ui/core": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.6.tgz",
+ "integrity": "sha512-EvYTiXet5XqweYGClEmpu3BoxmsQ4hkj3QaYA6qEnigCWffTP3vNRwBReTdrwDwo7OoJ3wM8Uoe9Uk4n+d4hfg=="
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.8.tgz",
+ "integrity": "sha512-XLwhYV90MxiHDq6S0rzFZj00fnDM+A1R9jhSioZoMsa7G0Q0i+Q4x40ajR8FHSdYDE1bgjG45mIWe6jtv9UPmg==",
+ "dependencies": {
+ "@floating-ui/core": "^1.2.6"
}
},
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz",
- "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
+ "node_modules/@floating-ui/react": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.19.2.tgz",
+ "integrity": "sha512-JyNk4A0Ezirq8FlXECvRtQOX/iBe5Ize0W/pLkrZjfHW9GUV7Xnq6zm6fyZuQzaHHqEnVizmvlA96e1/CkZv+w==",
+ "dependencies": {
+ "@floating-ui/react-dom": "^1.3.0",
+ "aria-hidden": "^1.1.3",
+ "tabbable": "^6.0.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
}
},
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz",
- "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
+ "node_modules/@floating-ui/react-dom": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-1.3.0.tgz",
+ "integrity": "sha512-htwHm67Ji5E/pROEAr7f8IKFShuiCKHwUC/UY4vC3I5jiSvGFAYnSYiZO5MlGmads+QqvUkR9ANHEguGrDv72g==",
+ "dependencies": {
+ "@floating-ui/dom": "^1.2.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
}
},
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz",
- "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
+ "node_modules/@formatjs/ecma402-abstract": {
+ "version": "1.11.2",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.2.tgz",
+ "integrity": "sha512-qDgOL0vtfJ51cc0pRbFB/oXc4qDbamG22Z6h/QWy6FBxaQgppiy8JF0iYbmNO35cC8r88bQGsgfd/eM6/eTEQQ==",
+ "dependencies": {
+ "@formatjs/intl-localematcher": "0.2.23",
+ "tslib": "^2.1.0"
}
},
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz",
- "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
+ "node_modules/@formatjs/fast-memoize": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz",
+ "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==",
+ "dependencies": {
+ "tslib": "^2.1.0"
}
},
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz",
- "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz",
- "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz",
- "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz",
- "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz",
- "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz",
- "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz",
- "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz",
- "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz",
- "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz",
- "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
- "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.3.2",
- "globals": "^13.15.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.16.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz",
- "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/@floating-ui/core": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.6.tgz",
- "integrity": "sha512-EvYTiXet5XqweYGClEmpu3BoxmsQ4hkj3QaYA6qEnigCWffTP3vNRwBReTdrwDwo7OoJ3wM8Uoe9Uk4n+d4hfg=="
- },
- "node_modules/@floating-ui/dom": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.8.tgz",
- "integrity": "sha512-XLwhYV90MxiHDq6S0rzFZj00fnDM+A1R9jhSioZoMsa7G0Q0i+Q4x40ajR8FHSdYDE1bgjG45mIWe6jtv9UPmg==",
- "dependencies": {
- "@floating-ui/core": "^1.2.6"
- }
- },
- "node_modules/@floating-ui/react": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.19.2.tgz",
- "integrity": "sha512-JyNk4A0Ezirq8FlXECvRtQOX/iBe5Ize0W/pLkrZjfHW9GUV7Xnq6zm6fyZuQzaHHqEnVizmvlA96e1/CkZv+w==",
- "dependencies": {
- "@floating-ui/react-dom": "^1.3.0",
- "aria-hidden": "^1.1.3",
- "tabbable": "^6.0.1"
- },
- "peerDependencies": {
- "react": ">=16.8.0",
- "react-dom": ">=16.8.0"
- }
- },
- "node_modules/@floating-ui/react-dom": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-1.3.0.tgz",
- "integrity": "sha512-htwHm67Ji5E/pROEAr7f8IKFShuiCKHwUC/UY4vC3I5jiSvGFAYnSYiZO5MlGmads+QqvUkR9ANHEguGrDv72g==",
- "dependencies": {
- "@floating-ui/dom": "^1.2.1"
- },
- "peerDependencies": {
- "react": ">=16.8.0",
- "react-dom": ">=16.8.0"
- }
- },
- "node_modules/@formatjs/ecma402-abstract": {
- "version": "1.11.2",
- "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.2.tgz",
- "integrity": "sha512-qDgOL0vtfJ51cc0pRbFB/oXc4qDbamG22Z6h/QWy6FBxaQgppiy8JF0iYbmNO35cC8r88bQGsgfd/eM6/eTEQQ==",
- "dependencies": {
- "@formatjs/intl-localematcher": "0.2.23",
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@formatjs/fast-memoize": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz",
- "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@formatjs/icu-messageformat-parser": {
- "version": "2.0.17",
- "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.17.tgz",
- "integrity": "sha512-GO4DzmyiDUyT4p9UxSlOcdnRL1CCt43oHBBGe21s5043UjP6dwMbOotugKs1bRiN+FrNrRUSW+TLdT3+4CBI5A==",
- "dependencies": {
- "@formatjs/ecma402-abstract": "1.11.2",
- "@formatjs/icu-skeleton-parser": "1.3.4",
- "tslib": "^2.1.0"
+ "node_modules/@formatjs/icu-messageformat-parser": {
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.17.tgz",
+ "integrity": "sha512-GO4DzmyiDUyT4p9UxSlOcdnRL1CCt43oHBBGe21s5043UjP6dwMbOotugKs1bRiN+FrNrRUSW+TLdT3+4CBI5A==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.11.2",
+ "@formatjs/icu-skeleton-parser": "1.3.4",
+ "tslib": "^2.1.0"
}
},
"node_modules/@formatjs/icu-skeleton-parser": {
@@ -7785,9 +7543,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "16.6.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.1.tgz",
- "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==",
+ "version": "16.18.86",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.86.tgz",
+ "integrity": "sha512-QMvdZf+ZTSiv7gspwhqbfB7Y5DmbYgCsUnakS8Ul9uRbJQehDKaM7SL+GbcDS003Lh7VK4YlelHsRm9HCv26eA==",
"dev": true
},
"node_modules/@types/npmlog": {
@@ -7888,6 +7646,18 @@
"@types/node": "*"
}
},
+ "node_modules/@types/sinonjs__fake-timers": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
+ "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==",
+ "dev": true
+ },
+ "node_modules/@types/sizzle": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz",
+ "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==",
+ "dev": true
+ },
"node_modules/@types/testing-library__jest-dom": {
"version": "5.14.5",
"resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz",
@@ -7924,6 +7694,16 @@
"integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
"dev": true
},
+ "node_modules/@types/yauzl": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "5.30.5",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz",
@@ -8397,6 +8177,19 @@
"node": ">= 6.0.0"
}
},
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -8413,24 +8206,60 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
- "node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
"dependencies": {
- "color-convert": "^1.9.0"
+ "type-fest": "^0.21.3"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/anymatch": {
@@ -8458,6 +8287,26 @@
"integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
"dev": true
},
+ "node_modules/arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/are-we-there-yet": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
@@ -8570,6 +8419,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
"node_modules/assert": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz",
@@ -8582,6 +8440,15 @@
"util": "^0.12.0"
}
},
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
@@ -8609,12 +8476,36 @@
"integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
"dev": true
},
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
+ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
+ "dev": true
+ },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
"node_modules/atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -8639,6 +8530,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
+ "dev": true
+ },
"node_modules/axe-core": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz",
@@ -8775,12 +8681,41 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/batch-processor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz",
"integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=",
"dev": true
},
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dev": true,
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
"node_modules/big-integer": {
"version": "1.6.51",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
@@ -8798,6 +8733,18 @@
"node": ">=8"
}
},
+ "node_modules/blob-util": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
+ "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
+ "dev": true
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
"node_modules/blueimp-md5": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz",
@@ -8952,6 +8899,39 @@
"node-int64": "^0.4.0"
}
},
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -8969,6 +8949,15 @@
"node": ">=8"
}
},
+ "node_modules/cachedir": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz",
+ "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -9021,6 +9010,12 @@
}
]
},
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "dev": true
+ },
"node_modules/chai": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
@@ -9091,6 +9086,15 @@
"node": "*"
}
},
+ "node_modules/check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@@ -9133,6 +9137,58 @@
"node": ">=8"
}
},
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-table3": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
+ "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": "10.* || >= 12.*"
+ },
+ "optionalDependencies": {
+ "@colors/colors": "1.5.0"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "dependencies": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/clone": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
@@ -9171,6 +9227,12 @@
"color-support": "bin.js"
}
},
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -9193,6 +9255,24 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -9360,6 +9440,12 @@
"url": "https://opencollective.com/core-js"
}
},
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
+ "dev": true
+ },
"node_modules/cosmiconfig": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
@@ -9455,72 +9541,257 @@
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
},
- "node_modules/damerau-levenshtein": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
- "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
- "dev": true
- },
- "node_modules/data-urls": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
- "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
+ "node_modules/cypress": {
+ "version": "12.17.4",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.17.4.tgz",
+ "integrity": "sha512-gAN8Pmns9MA5eCDFSDJXWKUpaL3IDd89N9TtIupjYnzLSmlpVr+ZR+vb4U/qaMp+lB6tBvAmt7504c3Z4RU5KQ==",
"dev": true,
+ "hasInstallScript": true,
"dependencies": {
- "abab": "^2.0.6",
- "whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^11.0.0"
+ "@cypress/request": "2.88.12",
+ "@cypress/xvfb": "^1.2.4",
+ "@types/node": "^16.18.39",
+ "@types/sinonjs__fake-timers": "8.1.1",
+ "@types/sizzle": "^2.3.2",
+ "arch": "^2.2.0",
+ "blob-util": "^2.0.2",
+ "bluebird": "^3.7.2",
+ "buffer": "^5.6.0",
+ "cachedir": "^2.3.0",
+ "chalk": "^4.1.0",
+ "check-more-types": "^2.24.0",
+ "cli-cursor": "^3.1.0",
+ "cli-table3": "~0.6.1",
+ "commander": "^6.2.1",
+ "common-tags": "^1.8.0",
+ "dayjs": "^1.10.4",
+ "debug": "^4.3.4",
+ "enquirer": "^2.3.6",
+ "eventemitter2": "6.4.7",
+ "execa": "4.1.0",
+ "executable": "^4.1.1",
+ "extract-zip": "2.0.1",
+ "figures": "^3.2.0",
+ "fs-extra": "^9.1.0",
+ "getos": "^3.2.1",
+ "is-ci": "^3.0.0",
+ "is-installed-globally": "~0.4.0",
+ "lazy-ass": "^1.6.0",
+ "listr2": "^3.8.3",
+ "lodash": "^4.17.21",
+ "log-symbols": "^4.0.0",
+ "minimist": "^1.2.8",
+ "ospath": "^1.2.2",
+ "pretty-bytes": "^5.6.0",
+ "process": "^0.11.10",
+ "proxy-from-env": "1.0.0",
+ "request-progress": "^3.0.0",
+ "semver": "^7.5.3",
+ "supports-color": "^8.1.1",
+ "tmp": "~0.2.1",
+ "untildify": "^4.0.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "cypress": "bin/cypress"
},
"engines": {
- "node": ">=12"
+ "node": "^14.0.0 || ^16.0.0 || >=18.0.0"
}
},
- "node_modules/date-fns": {
- "version": "2.30.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
- "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+ "node_modules/cypress/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"dependencies": {
- "@babel/runtime": "^7.21.0"
+ "color-convert": "^2.0.1"
},
"engines": {
- "node": ">=0.11"
+ "node": ">=8"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/date-fns"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/date-time": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz",
- "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==",
+ "node_modules/cypress/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
- "time-zone": "^1.0.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/dayjs": {
- "version": "1.11.9",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
- "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "node_modules/cypress/node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
- "ms": "2.1.2"
+ "has-flag": "^4.0.0"
},
"engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
+ "node": ">=8"
+ }
+ },
+ "node_modules/cypress/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/cypress/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/cypress/node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cypress/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cypress/node_modules/semver": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cypress/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/data-urls": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
+ "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
+ "dev": true,
+ "dependencies": {
+ "abab": "^2.0.6",
+ "whatwg-mimetype": "^3.0.0",
+ "whatwg-url": "^11.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/date-fns": {
+ "version": "2.30.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
+ "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=0.11"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ }
+ },
+ "node_modules/date-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz",
+ "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==",
+ "dev": true,
+ "dependencies": {
+ "time-zone": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.9",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
+ "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
@@ -9724,6 +9995,16 @@
"node": ">=12"
}
},
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "dev": true,
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -9760,6 +10041,28 @@
"node": ">= 0.8"
}
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/enquirer": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
+ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^4.1.1",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@@ -9809,451 +10112,115 @@
"string.prototype.trimend": "^1.0.5",
"string.prototype.trimstart": "^1.0.5",
"unbox-primitive": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-module-lexer": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
- "dev": true
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
- "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
- "dev": true,
- "dependencies": {
- "has": "^1.0.3"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es6-object-assign": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
- "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==",
- "dev": true
- },
- "node_modules/esbuild": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
- "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
- "dev": true,
- "hasInstallScript": true,
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "@esbuild/android-arm": "0.15.18",
- "@esbuild/linux-loong64": "0.15.18",
- "esbuild-android-64": "0.15.18",
- "esbuild-android-arm64": "0.15.18",
- "esbuild-darwin-64": "0.15.18",
- "esbuild-darwin-arm64": "0.15.18",
- "esbuild-freebsd-64": "0.15.18",
- "esbuild-freebsd-arm64": "0.15.18",
- "esbuild-linux-32": "0.15.18",
- "esbuild-linux-64": "0.15.18",
- "esbuild-linux-arm": "0.15.18",
- "esbuild-linux-arm64": "0.15.18",
- "esbuild-linux-mips64le": "0.15.18",
- "esbuild-linux-ppc64le": "0.15.18",
- "esbuild-linux-riscv64": "0.15.18",
- "esbuild-linux-s390x": "0.15.18",
- "esbuild-netbsd-64": "0.15.18",
- "esbuild-openbsd-64": "0.15.18",
- "esbuild-sunos-64": "0.15.18",
- "esbuild-windows-32": "0.15.18",
- "esbuild-windows-64": "0.15.18",
- "esbuild-windows-arm64": "0.15.18"
- }
- },
- "node_modules/esbuild-android-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
- "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-android-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
- "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-darwin-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
- "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-darwin-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
- "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-freebsd-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
- "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-freebsd-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
- "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-32": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
- "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
- "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-arm": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
- "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
- "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-mips64le": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
- "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-ppc64le": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
- "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-riscv64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
- "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-s390x": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
- "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-netbsd-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
- "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-openbsd-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
- "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "openbsd"
- ],
+ },
"engines": {
- "node": ">=12"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/esbuild-register": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.4.2.tgz",
- "integrity": "sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==",
+ "node_modules/es-module-lexer": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
+ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
+ "dev": true
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
"dev": true,
"dependencies": {
- "debug": "^4.3.4"
- },
- "peerDependencies": {
- "esbuild": ">=0.12 <1"
+ "has": "^1.0.3"
}
},
- "node_modules/esbuild-sunos-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
- "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
- "cpu": [
- "x64"
- ],
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"dev": true,
- "optional": true,
- "os": [
- "sunos"
- ],
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
"engines": {
- "node": ">=12"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/esbuild-windows-32": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
- "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
+ "node_modules/es6-object-assign": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
+ "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==",
+ "dev": true
},
- "node_modules/esbuild-windows-64": {
+ "node_modules/esbuild": {
"version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
- "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
- "cpu": [
- "x64"
- ],
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
+ "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
"dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
"engines": {
"node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.15.18",
+ "@esbuild/linux-loong64": "0.15.18",
+ "esbuild-android-64": "0.15.18",
+ "esbuild-android-arm64": "0.15.18",
+ "esbuild-darwin-64": "0.15.18",
+ "esbuild-darwin-arm64": "0.15.18",
+ "esbuild-freebsd-64": "0.15.18",
+ "esbuild-freebsd-arm64": "0.15.18",
+ "esbuild-linux-32": "0.15.18",
+ "esbuild-linux-64": "0.15.18",
+ "esbuild-linux-arm": "0.15.18",
+ "esbuild-linux-arm64": "0.15.18",
+ "esbuild-linux-mips64le": "0.15.18",
+ "esbuild-linux-ppc64le": "0.15.18",
+ "esbuild-linux-riscv64": "0.15.18",
+ "esbuild-linux-s390x": "0.15.18",
+ "esbuild-netbsd-64": "0.15.18",
+ "esbuild-openbsd-64": "0.15.18",
+ "esbuild-sunos-64": "0.15.18",
+ "esbuild-windows-32": "0.15.18",
+ "esbuild-windows-64": "0.15.18",
+ "esbuild-windows-arm64": "0.15.18"
}
},
- "node_modules/esbuild-windows-arm64": {
+ "node_modules/esbuild-darwin-arm64": {
"version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
- "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
+ "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild/node_modules/@esbuild/android-arm": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
- "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
+ "darwin"
],
"engines": {
"node": ">=12"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-loong64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
- "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
- "cpu": [
- "loong64"
- ],
+ "node_modules/esbuild-register": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.4.2.tgz",
+ "integrity": "sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==",
"dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
+ "dependencies": {
+ "debug": "^4.3.4"
+ },
+ "peerDependencies": {
+ "esbuild": ">=0.12 <1"
}
},
"node_modules/escalade": {
@@ -10552,6 +10519,33 @@
"node": ">=4"
}
},
+ "node_modules/eslint-plugin-cypress": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz",
+ "integrity": "sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==",
+ "dev": true,
+ "dependencies": {
+ "globals": "^13.20.0"
+ },
+ "peerDependencies": {
+ "eslint": ">= 3.2.1"
+ }
+ },
+ "node_modules/eslint-plugin-cypress/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/eslint-plugin-flowtype": {
"version": "8.0.3",
"resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz",
@@ -11072,11 +11066,52 @@
"node": ">= 0.6"
}
},
+ "node_modules/eventemitter2": {
+ "version": "6.4.7",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz",
+ "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==",
+ "dev": true
+ },
"node_modules/eventemitter3": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
"integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
},
+ "node_modules/execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/express": {
"version": "4.18.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
@@ -11180,6 +11215,35 @@
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ]
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -11249,6 +11313,30 @@
"bser": "2.1.1"
}
},
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -11384,6 +11472,29 @@
"is-callable": "^1.1.3"
}
},
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
"node_modules/format": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
@@ -11549,6 +11660,21 @@
"node": ">=8.0.0"
}
},
+ "node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/get-symbol-description": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
@@ -11565,6 +11691,24 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/getos": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
+ "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==",
+ "dev": true,
+ "dependencies": {
+ "async": "^3.2.0"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
"node_modules/github-slugger": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz",
@@ -11612,6 +11756,21 @@
"process": "^0.11.10"
}
},
+ "node_modules/global-dirs": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
+ "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
+ "dev": true,
+ "dependencies": {
+ "ini": "2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -11861,6 +12020,20 @@
"node": ">= 6"
}
},
+ "node_modules/http-signature": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz",
+ "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^2.0.2",
+ "sshpk": "^1.14.1"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
@@ -11871,7 +12044,16 @@
"debug": "4"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 6"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.12.0"
}
},
"node_modules/iconv-lite": {
@@ -11886,6 +12068,26 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/ignore": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
@@ -11942,6 +12144,15 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
+ "node_modules/ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
+ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/internal-slot": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
@@ -12089,6 +12300,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-ci": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
+ "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==",
+ "dev": true,
+ "dependencies": {
+ "ci-info": "^3.2.0"
+ },
+ "bin": {
+ "is-ci": "bin.js"
+ }
+ },
"node_modules/is-core-module": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
@@ -12195,6 +12418,22 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/is-installed-globally": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
+ "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
+ "dev": true,
+ "dependencies": {
+ "global-dirs": "^3.0.0",
+ "is-path-inside": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-nan": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
@@ -12256,6 +12495,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
@@ -12298,6 +12546,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-string": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
@@ -12347,6 +12607,24 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "dev": true
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-weakref": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
@@ -12376,6 +12654,12 @@
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+ "dev": true
+ },
"node_modules/istanbul-lib-coverage": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
@@ -12838,6 +13122,12 @@
"js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "dev": true
+ },
"node_modules/jsdom": {
"version": "20.0.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz",
@@ -12939,6 +13229,12 @@
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
},
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "dev": true
+ },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -12951,6 +13247,12 @@
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
"dev": true
},
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "dev": true
+ },
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -12981,6 +13283,21 @@
"graceful-fs": "^4.1.6"
}
},
+ "node_modules/jsprim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
+ "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
"node_modules/jsx-ast-utils": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz",
@@ -13017,6 +13334,15 @@
"language-subtag-registry": "~0.3.2"
}
},
+ "node_modules/lazy-ass": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+ "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==",
+ "dev": true,
+ "engines": {
+ "node": "> 0.8"
+ }
+ },
"node_modules/lazy-universal-dotenv": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz",
@@ -13049,6 +13375,33 @@
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
},
+ "node_modules/listr2": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
+ "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
+ "dev": true,
+ "dependencies": {
+ "cli-truncate": "^2.1.0",
+ "colorette": "^2.0.16",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rfdc": "^1.3.0",
+ "rxjs": "^7.5.1",
+ "through": "^2.3.8",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "enquirer": ">= 2.3.0 < 3"
+ },
+ "peerDependenciesMeta": {
+ "enquirer": {
+ "optional": true
+ }
+ }
+ },
"node_modules/local-pkg": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz",
@@ -13103,11 +13456,185 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "dev": true
+ },
"node_modules/lodash.snakecase": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
"integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40="
},
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/log-symbols/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/log-symbols/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/log-symbols/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/log-symbols/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-symbols/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/log-update/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/log-update/node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -13345,6 +13872,15 @@
"node": ">= 0.6"
}
},
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/min-document": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
@@ -13388,12 +13924,15 @@
"node": "*"
}
},
- "node_modules/minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
- "dev": true
- },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/mlly": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.3.0.tgz",
@@ -13501,6 +14040,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/npmlog": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
@@ -13663,6 +14214,21 @@
"wrappy": "1"
}
},
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -13680,6 +14246,12 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/ospath": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
+ "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==",
+ "dev": true
+ },
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -13710,6 +14282,21 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -13841,6 +14428,18 @@
"node": "*"
}
},
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
+ "dev": true
+ },
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -13859,6 +14458,15 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/pirates": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
@@ -13964,6 +14572,18 @@
"node": ">=6.0.0"
}
},
+ "node_modules/pretty-bytes": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
+ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/pretty-format": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
@@ -14059,12 +14679,28 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+ "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
+ "dev": true
+ },
"node_modules/psl": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
"integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
"dev": true
},
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"node_modules/punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -14737,6 +15373,15 @@
"resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz",
"integrity": "sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U="
},
+ "node_modules/request-progress": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
+ "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==",
+ "dev": true,
+ "dependencies": {
+ "throttleit": "^1.0.0"
+ }
+ },
"node_modules/requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@@ -14772,6 +15417,19 @@
"resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
"integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
},
+ "node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -14782,6 +15440,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/rfdc": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz",
+ "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==",
+ "dev": true
+ },
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -14834,6 +15498,15 @@
"queue-microtask": "^1.2.2"
}
},
+ "node_modules/rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -15028,6 +15701,53 @@
"node": ">=8"
}
},
+ "node_modules/slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -15080,6 +15800,31 @@
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"dev": true
},
+ "node_modules/sshpk": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
+ "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
+ "dev": true,
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/stackback": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
@@ -15215,6 +15960,15 @@
"node": ">=8"
}
},
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/strip-indent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
@@ -15409,6 +16163,21 @@
"node": ">=10"
}
},
+ "node_modules/throttleit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz",
+ "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
"node_modules/time-zone": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz",
@@ -15452,6 +16221,15 @@
"node": ">=14.0.0"
}
},
+ "node_modules/tmp": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+ "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -15600,6 +16378,24 @@
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
},
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
+ "dev": true
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -15824,6 +16620,15 @@
"node": ">=0.4.0"
}
},
+ "node_modules/untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/update-browserslist-db": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
@@ -16027,6 +16832,20 @@
"node": ">= 0.8"
}
},
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
"node_modules/vite": {
"version": "3.2.8",
"resolved": "https://registry.npmjs.org/vite/-/vite-3.2.8.tgz",
@@ -16467,6 +17286,56 @@
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
"dev": true
},
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -16544,6 +17413,16 @@
"node": ">= 6"
}
},
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dev": true,
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
@@ -16558,6 +17437,13 @@
}
},
"dependencies": {
+ "@4tw/cypress-drag-drop": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@4tw/cypress-drag-drop/-/cypress-drag-drop-2.2.5.tgz",
+ "integrity": "sha512-3ghTmzhOmUqeN6U3QmUnKRUxI7OMLbJA4hHUY/eS/FhWJgxbiGgcaELbolWnBAOpajPXcsNQGYEj9brd59WH6A==",
+ "dev": true,
+ "requires": {}
+ },
"@ampproject/remapping": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
@@ -17895,12 +18781,83 @@
"to-fast-properties": "^2.0.0"
}
},
- "@base2/pretty-print-object": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz",
- "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==",
- "dev": true
- },
+ "@base2/pretty-print-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz",
+ "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==",
+ "dev": true
+ },
+ "@colors/colors": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
+ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@cypress/request": {
+ "version": "2.88.12",
+ "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz",
+ "integrity": "sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "http-signature": "~1.3.6",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "performance-now": "^2.1.0",
+ "qs": "~6.10.3",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "^4.1.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^8.3.2"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz",
+ "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==",
+ "dev": true,
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true
+ }
+ }
+ },
+ "@cypress/xvfb": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
+ "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "lodash.once": "^4.1.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
"@dnd-kit/accessibility": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.0.0.tgz",
@@ -18050,27 +19007,6 @@
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz",
"integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww=="
},
- "@esbuild/android-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz",
- "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz",
- "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz",
- "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==",
- "dev": true,
- "optional": true
- },
"@esbuild/darwin-arm64": {
"version": "0.17.18",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz",
@@ -18078,132 +19014,6 @@
"dev": true,
"optional": true
},
- "@esbuild/darwin-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz",
- "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz",
- "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz",
- "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz",
- "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz",
- "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz",
- "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-loong64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz",
- "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-mips64el": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz",
- "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-ppc64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz",
- "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-riscv64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz",
- "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-s390x": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz",
- "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz",
- "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/netbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz",
- "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/openbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz",
- "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/sunos-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz",
- "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz",
- "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz",
- "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz",
- "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==",
- "dev": true,
- "optional": true
- },
"@eslint/eslintrc": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
@@ -22080,9 +22890,9 @@
"dev": true
},
"@types/node": {
- "version": "16.6.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.1.tgz",
- "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==",
+ "version": "16.18.86",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.86.tgz",
+ "integrity": "sha512-QMvdZf+ZTSiv7gspwhqbfB7Y5DmbYgCsUnakS8Ul9uRbJQehDKaM7SL+GbcDS003Lh7VK4YlelHsRm9HCv26eA==",
"dev": true
},
"@types/npmlog": {
@@ -22183,6 +22993,18 @@
"@types/node": "*"
}
},
+ "@types/sinonjs__fake-timers": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
+ "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==",
+ "dev": true
+ },
+ "@types/sizzle": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz",
+ "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==",
+ "dev": true
+ },
"@types/testing-library__jest-dom": {
"version": "5.14.5",
"resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz",
@@ -22219,6 +23041,16 @@
"integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
"dev": true
},
+ "@types/yauzl": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"@typescript-eslint/eslint-plugin": {
"version": "5.30.5",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz",
@@ -22531,6 +23363,16 @@
"debug": "4"
}
},
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -22543,6 +23385,29 @@
"uri-js": "^4.2.2"
}
},
+ "ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.21.3"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true
+ }
+ }
+ },
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -22579,6 +23444,12 @@
"integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
"dev": true
},
+ "arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true
+ },
"are-we-there-yet": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
@@ -22661,6 +23532,15 @@
"es-shim-unscopables": "^1.0.0"
}
},
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
"assert": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz",
@@ -22673,6 +23553,12 @@
"util": "^0.12.0"
}
},
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true
+ },
"assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
@@ -22694,12 +23580,30 @@
"integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
"dev": true
},
+ "astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true
+ },
+ "async": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
+ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
+ "dev": true
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
+ "at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true
+ },
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -22712,6 +23616,18 @@
"integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
"dev": true
},
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
+ "dev": true
+ },
"axe-core": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz",
@@ -22829,12 +23745,27 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true
+ },
"batch-processor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz",
"integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=",
"dev": true
},
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
"big-integer": {
"version": "1.6.51",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
@@ -22846,6 +23777,18 @@
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
},
+ "blob-util": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
+ "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
"blueimp-md5": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz",
@@ -22970,6 +23913,22 @@
"node-int64": "^0.4.0"
}
},
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true
+ },
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -22984,6 +23943,12 @@
"integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
"dev": true
},
+ "cachedir": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz",
+ "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==",
+ "dev": true
+ },
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -23010,6 +23975,12 @@
"integrity": "sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg==",
"dev": true
},
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "dev": true
+ },
"chai": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
@@ -23059,6 +24030,12 @@
"integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
"dev": true
},
+ "check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
+ "dev": true
+ },
"chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@@ -23081,6 +24058,41 @@
"integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
"dev": true
},
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cli-table3": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
+ "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
+ "dev": true,
+ "requires": {
+ "@colors/colors": "1.5.0",
+ "string-width": "^4.2.0"
+ }
+ },
+ "cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ }
+ },
"clone": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
@@ -23110,6 +24122,12 @@
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
"dev": true
},
+ "colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -23125,6 +24143,18 @@
"integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
"dev": true
},
+ "commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true
+ },
+ "common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "dev": true
+ },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -23248,6 +24278,12 @@
"integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==",
"dev": true
},
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
+ "dev": true
+ },
"cosmiconfig": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
@@ -23332,17 +24368,160 @@
}
}
},
- "csstype": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
- },
+ "csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ },
+ "cypress": {
+ "version": "12.17.4",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.17.4.tgz",
+ "integrity": "sha512-gAN8Pmns9MA5eCDFSDJXWKUpaL3IDd89N9TtIupjYnzLSmlpVr+ZR+vb4U/qaMp+lB6tBvAmt7504c3Z4RU5KQ==",
+ "dev": true,
+ "requires": {
+ "@cypress/request": "2.88.12",
+ "@cypress/xvfb": "^1.2.4",
+ "@types/node": "^16.18.39",
+ "@types/sinonjs__fake-timers": "8.1.1",
+ "@types/sizzle": "^2.3.2",
+ "arch": "^2.2.0",
+ "blob-util": "^2.0.2",
+ "bluebird": "^3.7.2",
+ "buffer": "^5.6.0",
+ "cachedir": "^2.3.0",
+ "chalk": "^4.1.0",
+ "check-more-types": "^2.24.0",
+ "cli-cursor": "^3.1.0",
+ "cli-table3": "~0.6.1",
+ "commander": "^6.2.1",
+ "common-tags": "^1.8.0",
+ "dayjs": "^1.10.4",
+ "debug": "^4.3.4",
+ "enquirer": "^2.3.6",
+ "eventemitter2": "6.4.7",
+ "execa": "4.1.0",
+ "executable": "^4.1.1",
+ "extract-zip": "2.0.1",
+ "figures": "^3.2.0",
+ "fs-extra": "^9.1.0",
+ "getos": "^3.2.1",
+ "is-ci": "^3.0.0",
+ "is-installed-globally": "~0.4.0",
+ "lazy-ass": "^1.6.0",
+ "listr2": "^3.8.3",
+ "lodash": "^4.17.21",
+ "log-symbols": "^4.0.0",
+ "minimist": "^1.2.8",
+ "ospath": "^1.2.2",
+ "pretty-bytes": "^5.6.0",
+ "process": "^0.11.10",
+ "proxy-from-env": "1.0.0",
+ "request-progress": "^3.0.0",
+ "semver": "^7.5.3",
+ "supports-color": "^8.1.1",
+ "tmp": "~0.2.1",
+ "untildify": "^4.0.0",
+ "yauzl": "^2.10.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "semver": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
"damerau-levenshtein": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
"integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
"dev": true
},
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
"data-urls": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
@@ -23539,6 +24718,16 @@
"integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==",
"dev": true
},
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -23572,6 +24761,25 @@
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
"dev": true
},
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "enquirer": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
+ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^4.1.1",
+ "strip-ansi": "^6.0.1"
+ }
+ },
"entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@@ -23677,45 +24885,8 @@
"esbuild-windows-32": "0.15.18",
"esbuild-windows-64": "0.15.18",
"esbuild-windows-arm64": "0.15.18"
- },
- "dependencies": {
- "@esbuild/android-arm": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
- "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-loong64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
- "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
- "dev": true,
- "optional": true
- }
}
},
- "esbuild-android-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
- "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
- "dev": true,
- "optional": true
- },
- "esbuild-android-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
- "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
- "dev": true,
- "optional": true
- },
- "esbuild-darwin-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
- "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
- "dev": true,
- "optional": true
- },
"esbuild-darwin-arm64": {
"version": "0.15.18",
"resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
@@ -23723,90 +24894,6 @@
"dev": true,
"optional": true
},
- "esbuild-freebsd-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
- "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
- "dev": true,
- "optional": true
- },
- "esbuild-freebsd-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
- "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
- "dev": true,
- "optional": true
- },
- "esbuild-linux-32": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
- "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
- "dev": true,
- "optional": true
- },
- "esbuild-linux-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
- "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
- "dev": true,
- "optional": true
- },
- "esbuild-linux-arm": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
- "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
- "dev": true,
- "optional": true
- },
- "esbuild-linux-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
- "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
- "dev": true,
- "optional": true
- },
- "esbuild-linux-mips64le": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
- "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
- "dev": true,
- "optional": true
- },
- "esbuild-linux-ppc64le": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
- "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
- "dev": true,
- "optional": true
- },
- "esbuild-linux-riscv64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
- "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
- "dev": true,
- "optional": true
- },
- "esbuild-linux-s390x": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
- "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
- "dev": true,
- "optional": true
- },
- "esbuild-netbsd-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
- "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
- "dev": true,
- "optional": true
- },
- "esbuild-openbsd-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
- "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
- "dev": true,
- "optional": true
- },
"esbuild-register": {
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.4.2.tgz",
@@ -23816,34 +24903,6 @@
"debug": "^4.3.4"
}
},
- "esbuild-sunos-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
- "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
- "dev": true,
- "optional": true
- },
- "esbuild-windows-32": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
- "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
- "dev": true,
- "optional": true
- },
- "esbuild-windows-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
- "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
- "dev": true,
- "optional": true
- },
- "esbuild-windows-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
- "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
- "dev": true,
- "optional": true
- },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -24168,6 +25227,26 @@
}
}
},
+ "eslint-plugin-cypress": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz",
+ "integrity": "sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==",
+ "dev": true,
+ "requires": {
+ "globals": "^13.20.0"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ }
+ }
+ },
"eslint-plugin-flowtype": {
"version": "8.0.3",
"resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz",
@@ -24442,11 +25521,43 @@
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
"dev": true
},
+ "eventemitter2": {
+ "version": "6.4.7",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz",
+ "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==",
+ "dev": true
+ },
"eventemitter3": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
"integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
},
+ "execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "requires": {
+ "pify": "^2.2.0"
+ }
+ },
"express": {
"version": "4.18.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
@@ -24529,6 +25640,24 @@
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
+ "extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "requires": {
+ "@types/yauzl": "^2.9.1",
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "dev": true
+ },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -24591,6 +25720,24 @@
"bser": "2.1.1"
}
},
+ "fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
+ "figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
"file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -24696,6 +25843,23 @@
"is-callable": "^1.1.3"
}
},
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
"format": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
@@ -24815,6 +25979,15 @@
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true
},
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
"get-symbol-description": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
@@ -24825,6 +25998,24 @@
"get-intrinsic": "^1.1.1"
}
},
+ "getos": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
+ "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==",
+ "dev": true,
+ "requires": {
+ "async": "^3.2.0"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
"github-slugger": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz",
@@ -24863,6 +26054,15 @@
"process": "^0.11.10"
}
},
+ "global-dirs": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
+ "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
+ "dev": true,
+ "requires": {
+ "ini": "2.0.0"
+ }
+ },
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -25042,6 +26242,17 @@
"debug": "4"
}
},
+ "http-signature": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz",
+ "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^2.0.2",
+ "sshpk": "^1.14.1"
+ }
+ },
"https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
@@ -25052,6 +26263,12 @@
"debug": "4"
}
},
+ "human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "dev": true
+ },
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -25061,6 +26278,12 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true
+ },
"ignore": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
@@ -25102,6 +26325,12 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
+ "ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
+ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
+ "dev": true
+ },
"internal-slot": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
@@ -25208,6 +26437,15 @@
"integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
"dev": true
},
+ "is-ci": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
+ "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^3.2.0"
+ }
+ },
"is-core-module": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
@@ -25282,6 +26520,16 @@
"integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
"dev": true
},
+ "is-installed-globally": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
+ "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
+ "dev": true,
+ "requires": {
+ "global-dirs": "^3.0.0",
+ "is-path-inside": "^3.0.2"
+ }
+ },
"is-nan": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
@@ -25319,6 +26567,12 @@
"integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==",
"dev": true
},
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
"is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
@@ -25349,6 +26603,12 @@
"call-bind": "^1.0.2"
}
},
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true
+ },
"is-string": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
@@ -25380,6 +26640,18 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "dev": true
+ },
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true
+ },
"is-weakref": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
@@ -25406,6 +26678,12 @@
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+ "dev": true
+ },
"istanbul-lib-coverage": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
@@ -25755,6 +27033,12 @@
"esprima": "^4.0.0"
}
},
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "dev": true
+ },
"jsdom": {
"version": "20.0.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz",
@@ -25829,6 +27113,12 @@
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
},
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "dev": true
+ },
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -25841,6 +27131,12 @@
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
"dev": true
},
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "dev": true
+ },
"json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -25863,6 +27159,18 @@
"universalify": "^2.0.0"
}
},
+ "jsprim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
+ "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
"jsx-ast-utils": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz",
@@ -25893,6 +27201,12 @@
"language-subtag-registry": "~0.3.2"
}
},
+ "lazy-ass": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+ "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==",
+ "dev": true
+ },
"lazy-universal-dotenv": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz",
@@ -25919,6 +27233,22 @@
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
},
+ "listr2": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
+ "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
+ "dev": true,
+ "requires": {
+ "cli-truncate": "^2.1.0",
+ "colorette": "^2.0.16",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rfdc": "^1.3.0",
+ "rxjs": "^7.5.1",
+ "through": "^2.3.8",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
"local-pkg": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz",
@@ -25961,11 +27291,138 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
+ "lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "dev": true
+ },
"lodash.snakecase": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
"integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40="
},
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -26147,6 +27604,12 @@
"mime-db": "1.52.0"
}
},
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
"min-document": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
@@ -26180,9 +27643,9 @@
}
},
"minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true
},
"mlly": {
@@ -26267,6 +27730,15 @@
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
"npmlog": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
@@ -26387,6 +27859,15 @@
"wrappy": "1"
}
},
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
"optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -26401,6 +27882,12 @@
"word-wrap": "^1.2.3"
}
},
+ "ospath": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
+ "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==",
+ "dev": true
+ },
"p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -26419,6 +27906,15 @@
"p-limit": "^3.0.2"
}
},
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -26516,6 +28012,18 @@
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true
},
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
+ "dev": true
+ },
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -26528,6 +28036,12 @@
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
},
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true
+ },
"pirates": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
@@ -26595,6 +28109,12 @@
"fast-diff": "^1.1.2"
}
},
+ "pretty-bytes": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
+ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
+ "dev": true
+ },
"pretty-format": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
@@ -26667,12 +28187,28 @@
"ipaddr.js": "1.9.1"
}
},
+ "proxy-from-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+ "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
+ "dev": true
+ },
"psl": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
"integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
"dev": true
},
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -27163,6 +28699,15 @@
"resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz",
"integrity": "sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U="
},
+ "request-progress": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
+ "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==",
+ "dev": true,
+ "requires": {
+ "throttleit": "^1.0.0"
+ }
+ },
"requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@@ -27189,12 +28734,28 @@
"resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
"integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
},
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true
},
+ "rfdc": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz",
+ "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==",
+ "dev": true
+ },
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -27221,6 +28782,15 @@
"queue-microtask": "^1.2.2"
}
},
+ "rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -27392,6 +28962,43 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
+ "slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ }
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -27434,6 +29041,23 @@
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"dev": true
},
+ "sshpk": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
+ "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
"stackback": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
@@ -27539,6 +29163,12 @@
"ansi-regex": "^5.0.1"
}
},
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
"strip-indent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
@@ -27691,6 +29321,18 @@
"integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==",
"dev": true
},
+ "throttleit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz",
+ "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
"time-zone": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz",
@@ -27725,6 +29367,12 @@
"integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==",
"dev": true
},
+ "tmp": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+ "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
+ "dev": true
+ },
"tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -27843,6 +29491,21 @@
}
}
},
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
+ "dev": true
+ },
"type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -28002,6 +29665,12 @@
}
}
},
+ "untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true
+ },
"update-browserslist-db": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
@@ -28131,6 +29800,17 @@
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
"dev": true
},
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
"vite": {
"version": "3.2.8",
"resolved": "https://registry.npmjs.org/vite/-/vite-3.2.8.tgz",
@@ -28409,6 +30089,43 @@
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
"dev": true
},
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ }
+ }
+ },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -28460,6 +30177,16 @@
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
},
+ "yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
"yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index ed1cc1fb..bb457199 100644
--- a/package.json
+++ b/package.json
@@ -41,10 +41,12 @@
"coverage": "vitest run --coverage",
"lint": "eslint --ext=js,jsx .",
"storybook": "start-storybook -p 6006 --host 0.0.0.0",
- "build-storybook": "build-storybook -o public/storybook"
+ "build-storybook": "build-storybook -o public/storybook",
+ "cypress:open": "cypress open"
},
"proxy": "http://localhost:3000",
"devDependencies": {
+ "@4tw/cypress-drag-drop": "^2.2.3",
"@storybook/addon-a11y": "^6.5.9",
"@storybook/addon-actions": "^6.5.9",
"@storybook/addon-essentials": "^7.0.9",
@@ -56,9 +58,11 @@
"@testing-library/user-event": "^13.5.0",
"@vitejs/plugin-react": "^2.0.0",
"@vitest/ui": "^0.18.1",
+ "cypress": "^12.4.1",
"eslint": "^8.19.0",
"eslint-config-prettier": "^8.3.0",
"eslint-config-react-app": "^7.0.1",
+ "eslint-plugin-cypress": "^2.12.1",
"eslint-plugin-prettier": "^3.4.0",
"jsdom": "^20.0.0",
"prettier": "^2.3.1",
diff --git a/src/Components/Boilerplates/BoilerplateForm.jsx b/src/Components/Boilerplates/BoilerplateForm.jsx
index 7fbb1119..17cc0659 100644
--- a/src/Components/Boilerplates/BoilerplateForm.jsx
+++ b/src/Components/Boilerplates/BoilerplateForm.jsx
@@ -57,6 +57,7 @@ export default function BoilerplateForm(props) {
category.name)}
onChange={(categoryName) => {
diff --git a/src/Components/Boilerplates/BoilerplatesIndex.css b/src/Components/Boilerplates/BoilerplatesIndex.css
index b681fe79..262e49ff 100644
--- a/src/Components/Boilerplates/BoilerplatesIndex.css
+++ b/src/Components/Boilerplates/BoilerplatesIndex.css
@@ -55,3 +55,11 @@
transform: translateY(-50%);
}
+.boilerplates-index__see-more .dropdown__menu {
+ right: calc(-0.4rem - 1vw);
+ transform: translateY(-28%);
+}
+
+.boilerplates-index__table .table__cell {
+ position: relative;
+}
diff --git a/src/Components/Boilerplates/BoilerplatesIndex.jsx b/src/Components/Boilerplates/BoilerplatesIndex.jsx
index 4a7c3b4a..21733d80 100644
--- a/src/Components/Boilerplates/BoilerplatesIndex.jsx
+++ b/src/Components/Boilerplates/BoilerplatesIndex.jsx
@@ -44,16 +44,27 @@ export default function BoilerplatesIndex() {
}
);
- const handleDropdownMiniAction = ({ option, boilerplate }) => {
- switch (option.value) {
- case "REMOVE_FROM_ARCHIVED":
- updateBoilerplate({ id: boilerplate.id, archived: false });
- break;
- case "MARK_AS_ARCHIVED":
- updateBoilerplate({ id: boilerplate.id, archived: true });
- break;
- default:
- console.error(`Unexpected option given ${option.value}!`);
+ const handleDropdownMiniAction = async ({ option, boilerplate }) => {
+ console.log("handleDropdownMiniAction", option, boilerplate);
+ try {
+ switch (option.value) {
+ case "REMOVE_FROM_ARCHIVED":
+ updateBoilerplate({
+ id: boilerplate.id,
+ archived: false,
+ });
+ break;
+ case "MARK_AS_ARCHIVED":
+ updateBoilerplate({
+ ...boilerplate,
+ archived: true,
+ });
+ break;
+ default:
+ throw new Error(`Unexpected option given ${option.value}!`);
+ }
+ } catch (error) {
+ console.error(error);
}
};
@@ -75,10 +86,10 @@ export default function BoilerplatesIndex() {
{
Header: "Last Modified",
accessor: (boilerplate) => (
-
+
{formatDate(boilerplate.updatedAt)}
new Date(a.createdAt) - new Date(b.createdAt));
}, [boilerplates, searchFilters, tabSelect]);
if (isLoading) {
diff --git a/src/Components/Categories/CategoriesIndex.jsx b/src/Components/Categories/CategoriesIndex.jsx
index 98cdf990..e663e6e4 100644
--- a/src/Components/Categories/CategoriesIndex.jsx
+++ b/src/Components/Categories/CategoriesIndex.jsx
@@ -72,12 +72,6 @@ export default function CategoriesIndex() {
}
};
- const handleCloseCategoryModal = () => {
- setShowingCategoryNew(false);
- setShowingCategoryEdit(false);
- return categories;
- };
-
const columns = [
{ Header: "Name", accessor: "name" },
{
@@ -126,9 +120,17 @@ export default function CategoriesIndex() {
return category.archived;
}
return category;
- });
+ })
+ .sort((a, b) => new Date(a.updatedAt) - new Date(b.updatedAt));
}, [categories, searchFilters, tabSelect]);
+ const handleCloseCategoryModal = () => {
+ setShowingCategoryNew(false);
+ setShowingCategoryEdit(false);
+ refetchCategories();
+ // return categories;
+ };
+
if (isLoading) {
return Loading... ;
}
diff --git a/src/Components/Categories/CategoryForm.cy.jsx b/src/Components/Categories/CategoryForm.cy.jsx
new file mode 100644
index 00000000..312fd680
--- /dev/null
+++ b/src/Components/Categories/CategoryForm.cy.jsx
@@ -0,0 +1,23 @@
+import React from "react";
+import CategoryForm from "./CategoryForm";
+
+describe(" ", () => {
+ it("renders", () => {
+ cy.mount(
+ {
+ console.log("banana");
+ }}
+ />
+ );
+ cy.get("label").should("contains.text", "Name");
+ cy.get("button").should("contains.text", "Cancel");
+ cy.get("button").should("contains.text", "Save");
+ cy.get("form").submit();
+ cy.get('button[type="submit"]').click();
+ });
+});
diff --git a/src/Components/FundingOrgs/FundingOrgsIndex.jsx b/src/Components/FundingOrgs/FundingOrgsIndex.jsx
index 92a49850..5470b140 100644
--- a/src/Components/FundingOrgs/FundingOrgsIndex.jsx
+++ b/src/Components/FundingOrgs/FundingOrgsIndex.jsx
@@ -67,12 +67,6 @@ export default function FundingOrgsIndex() {
}
};
- const handleCloseFundingOrgModal = () => {
- setShowingFundingOrgNew(false);
- setShowingFundingOrgEdit(false);
- return fundingOrgs;
- };
-
const columns = [
{ Header: "Name", accessor: "name" },
{
@@ -131,9 +125,16 @@ export default function FundingOrgsIndex() {
return fundingOrgs.archived === true;
}
return fundingOrgs;
- });
+ })
+ .sort((a, b) => new Date(a.createdAt) - new Date(b.createdAt));
}, [fundingOrgs, searchFilters, tabSelect]);
+ const handleCloseFundingOrgModal = () => {
+ setShowingFundingOrgNew(false);
+ setShowingFundingOrgEdit(false);
+ refetchFundingOrgs();
+ };
+
return (
All Funding Orgs
@@ -178,7 +179,7 @@ export default function FundingOrgsIndex() {
{filteredFundingOrgs.length ? (
) : (
- There are no funding orgs for this category.
+ There are no funding organizations to display in this tab.
)}
{
const sectionsToReorder = [];
- props.sortableSections.forEach((newSection, index) => {
+ sortableSections.forEach((newSection, index) => {
const checkSection = grant.sections[index];
if (newSection.sortOrder !== checkSection.sortOrder) {
sectionsToReorder.push({
@@ -61,26 +79,52 @@ export default function GrantShowOverview(props) {
setReorderIndex,
]);
+ const updateState = (newState) => {
+ ref.current = newState;
+ setReorderIndex(newState);
+ };
+
+ function handleDragStart(event) {
+ const { active } = event;
+ console.log(event);
+ setActiveId(active.id);
+ console.log(activeId);
+ }
+
+ function handleDragEnd({ active, over }) {
+ if (active.id !== over.id) {
+ const newSectionOrder = (items) => {
+ const oldIndex = items.findIndex((item) => item.id === active.id);
+ const newIndex = items.findIndex((item) => item.id === over.id);
+ setReorderHistory([
+ ...reorderHistory,
+ arrayMove(items, oldIndex, newIndex),
+ ]);
+ return arrayMove(items, oldIndex, newIndex);
+ };
+ setSortableSections(newSectionOrder);
+ updateState(reorderIndex + 1);
+ setCanSaveReorder(true);
+ }
+ }
+
const onUndo = () => {
- if (props.reorderIndex > 0 && props.reorderIndex !== 1) {
- props.setSortableSections(props.reorderHistory[props.reorderIndex - 1]);
- props.updateState(props.reorderIndex - 1);
- props.setCanSaveReorder(true);
- } else if (props.reorderIndex === 1) {
- props.setSortableSections(props.reorderHistory[props.reorderIndex - 1]);
- props.updateState(props.reorderIndex - 1);
- props.setCanSaveReorder(false);
+ if (reorderIndex > 0 && reorderIndex !== 1) {
+ setSortableSections(reorderHistory[reorderIndex - 1]);
+ updateState(reorderIndex - 1);
+ setCanSaveReorder(true);
+ } else if (reorderIndex === 1) {
+ setSortableSections(reorderHistory[reorderIndex - 1]);
+ updateState(reorderIndex - 1);
+ setCanSaveReorder(false);
}
};
const onRedo = () => {
- if (
- props.reorderIndex + 1 < props.reorderHistory.length &&
- props.reorderHistory.length > 1
- ) {
- props.setSortableSections(props.reorderHistory[props.reorderIndex + 1]);
- props.updateState(props.reorderIndex + 1);
- props.setCanSaveReorder(true);
+ if (reorderIndex + 1 < reorderHistory.length && reorderHistory.length > 1) {
+ setSortableSections(reorderHistory[reorderIndex + 1]);
+ updateState(reorderIndex + 1);
+ setCanSaveReorder(true);
}
};
@@ -94,7 +138,7 @@ export default function GrantShowOverview(props) {
{
onSuccess: () => {
alert("Sections reordered!");
- props.setCanSaveReorder(false);
+ setCanSaveReorder(false);
},
}
);
@@ -136,56 +180,67 @@ export default function GrantShowOverview(props) {
heroButtons={heroButtons()}
/>
-
-
-
- {
- grantSectionsReorder();
- }}
- disabled={!props.canSaveReorder}
- >
- Save
-
- {
- onUndo();
- }}
- disabled={props.reorderIndex === 0}
- >
- Undo
-
- {
- onRedo();
- }}
- disabled={
- props.reorderIndex + 1 === props.reorderHistory.length ||
- props.reorderHistory.length <= 1
- }
- >
- Redo
-
-
-
-
- {props.sortableSections.map((item) => (
-
- ))}
-
-
- {props.activeId ? : null}
-
-
+
+
+ {
+ grantSectionsReorder();
+ }}
+ disabled={!canSaveReorder}
+ >
+ Save
+
+ {
+ onUndo();
+ }}
+ disabled={reorderIndex === 0}
+ >
+ Undo
+
+ {
+ onRedo();
+ }}
+ disabled={
+ reorderIndex + 1 === reorderHistory.length ||
+ reorderHistory.length <= 1
+ }
+ >
+ Redo
+
+
+
+
+ {sortableSections.map((item) => (
+
+ ))}
+
+
+ {activeId ? : null}
+
+
+
- {props.sortableSections.map((section) => {
+ {sortableSections.map((section) => {
return (
{!!checked && (
diff --git a/src/Components/Grants/GrantShowOverviewTest.jsx b/src/Components/Grants/GrantShowOverviewTest.jsx
new file mode 100644
index 00000000..1d172f58
--- /dev/null
+++ b/src/Components/Grants/GrantShowOverviewTest.jsx
@@ -0,0 +1,108 @@
+import React, { useState, useEffect } from "react";
+import { useQuery } from "react-query";
+import { useParams } from "react-router-dom";
+import Container from "../design/Container/Container";
+import { useCurrentOrganization } from "../../Contexts/currentOrganizationContext";
+import * as GrantsService from "../../Services/Organizations/GrantsService";
+import { SortableItem } from "./SortableItem";
+import { Item } from "./Item";
+import {
+ SortableContext,
+ verticalListSortingStrategy,
+} from "@dnd-kit/sortable";
+import { DragOverlay } from "@dnd-kit/core";
+import "./GrantShowOverview.css";
+
+import {
+ DndContext,
+ // PointerSensor,
+ MouseSensor,
+ useSensor,
+ useSensors,
+ closestCenter,
+} from "@dnd-kit/core";
+import { arrayMove } from "@dnd-kit/sortable";
+import {
+ restrictToFirstScrollableAncestor,
+ restrictToVerticalAxis,
+} from "@dnd-kit/modifiers";
+
+export default function GrantShowOverview() {
+ const sensors = useSensors(useSensor(MouseSensor));
+ const [sortableSections, setSortableSections] = useState([]);
+ const [activeId, setActiveId] = useState(null);
+ const { organizationClient } = useCurrentOrganization();
+ const { grantId } = useParams();
+
+ const {
+ data: grant,
+ isError,
+ isLoading,
+ error,
+ } = useQuery("getGrant", () =>
+ GrantsService.getGrant(organizationClient, grantId)
+ );
+
+ useEffect(() => {
+ setSortableSections(grant.sections);
+ }, [grantId, grant.sections, setSortableSections]);
+
+ if (isLoading) {
+ return Loading... ;
+ }
+
+ if (isError) {
+ return Error: {error.message} ;
+ }
+
+ function handleDragStart(event) {
+ const { active } = event;
+ console.log(event);
+ setActiveId(active.id);
+ console.log(activeId);
+ }
+
+ function handleDragEnd({ active, over }) {
+ if (active.id !== over.id) {
+ const newSectionOrder = (items) => {
+ const oldIndex = items.findIndex((item) => item.id === active.id);
+ const newIndex = items.findIndex((item) => item.id === over.id);
+ return arrayMove(items, oldIndex, newIndex);
+ };
+ setSortableSections(newSectionOrder);
+ }
+ }
+
+ return (
+
+
+
+
+
+
+ {sortableSections.map((item) => (
+
+ ))}
+
+
+ {activeId ? : null}
+
+
+
+
+
+
+ );
+}
diff --git a/src/Components/Grants/GrantsIndex.jsx b/src/Components/Grants/GrantsIndex.jsx
index bc0865d6..2a4b7939 100644
--- a/src/Components/Grants/GrantsIndex.jsx
+++ b/src/Components/Grants/GrantsIndex.jsx
@@ -91,7 +91,10 @@ export default function GrantsIndex() {
{
Header: "Title",
accessor: (grant) => (
-
+
{grant.title}
),
@@ -170,7 +173,8 @@ export default function GrantsIndex() {
return grant.submitted === true;
}
return grant;
- });
+ })
+ .sort((a, b) => new Date(a.updatedAt) - new Date(b.updatedAt));
}, [grants, searchFilters, tabSelect]);
return (
@@ -200,6 +204,7 @@ export default function GrantsIndex() {
tabSelect === "All" && "grants-index__table-tab-button--selected"
)}
variant="text"
+ data-testid="all-button"
>
All
@@ -210,6 +215,7 @@ export default function GrantsIndex() {
tabSelect === "Drafts" && "grants-index__table-tab-button--selected"
)}
variant="text"
+ data-testid="drafts-button"
>
Drafts
@@ -221,6 +227,7 @@ export default function GrantsIndex() {
"grants-index__table-tab-button--selected"
)}
variant="text"
+ data-testid="submitted-button"
>
Submitted
@@ -232,6 +239,7 @@ export default function GrantsIndex() {
"grants-index__table-tab-button--selected"
)}
variant="text"
+ data-testid="successful-button"
>
Successful
@@ -243,6 +251,7 @@ export default function GrantsIndex() {
"grants-index__table-tab-button--selected"
)}
variant="text"
+ data-testid="archived-button"
>
Archived
diff --git a/src/Components/Grants/SortableItem.jsx b/src/Components/Grants/SortableItem.jsx
index d04c1bf3..8ccab31b 100644
--- a/src/Components/Grants/SortableItem.jsx
+++ b/src/Components/Grants/SortableItem.jsx
@@ -24,7 +24,7 @@ export function SortableItem(props) {
item={props.item}
id={props.id}
>
-
+
{props.item.title}
diff --git a/src/Components/Organizations/OrganizationIndex.jsx b/src/Components/Organizations/OrganizationIndex.jsx
index 64c739e8..7bb2bf6f 100644
--- a/src/Components/Organizations/OrganizationIndex.jsx
+++ b/src/Components/Organizations/OrganizationIndex.jsx
@@ -36,7 +36,11 @@ function OrganizationIndex() {
{organizations.map((organization) => (
-
+
diff --git a/src/Components/PasteBoilerplateContentPopout/PasteBoilerplateContentPopout.css b/src/Components/PasteBoilerplateContentPopout/PasteBoilerplateContentPopout.css
index 3c05817d..a4eb6037 100644
--- a/src/Components/PasteBoilerplateContentPopout/PasteBoilerplateContentPopout.css
+++ b/src/Components/PasteBoilerplateContentPopout/PasteBoilerplateContentPopout.css
@@ -1,7 +1,7 @@
.paste-boilerplate-content-popout {
padding: 36px 24px;
border: 1px solid rgba(26, 56, 96, 0.1);
- height: 100%
+ height: 100%;
}
.paste-boilerplate-content-popout__header {
@@ -9,6 +9,11 @@
justify-content: space-between;
align-items: center;
}
+.paste-boilerplate-content-popout__close-button:hover {
+ background-color: var(--primary-20);
+ cursor: pointer;
+}
+
.paste-boilerplate-content-popout__secondary-search {
display: flex;
gap: 18px;
@@ -19,5 +24,5 @@
}
.paste-boilerplate-content-popout__max-word-count {
- width: 30%;
+ width: 30%;
}
diff --git a/src/Components/PasteBoilerplateContentPopout/PasteBoilerplateContentPopout.jsx b/src/Components/PasteBoilerplateContentPopout/PasteBoilerplateContentPopout.jsx
index f8f35166..456c87f3 100644
--- a/src/Components/PasteBoilerplateContentPopout/PasteBoilerplateContentPopout.jsx
+++ b/src/Components/PasteBoilerplateContentPopout/PasteBoilerplateContentPopout.jsx
@@ -67,6 +67,7 @@ export default function PasteBoilerplateContentPopout() {
onClick={() => {
setIsOpen(false);
}}
+ className="paste-boilerplate-content-popout__close-button"
/>
diff --git a/src/Components/Sections/SectionsShow.jsx b/src/Components/Sections/SectionsShow.jsx
index 421625ba..ffda2991 100644
--- a/src/Components/Sections/SectionsShow.jsx
+++ b/src/Components/Sections/SectionsShow.jsx
@@ -13,8 +13,11 @@ export default function SectionsShow(props) {
{section.title}
- onClickEdit(section.id)}>
-
+ onClickEdit(section.id)}
+ className="section__edit-icon"
+ >
+
WORD COUNT: {countSectionWords(section)}
diff --git a/src/Components/Sections/StoreSectionAsBoilerplate.jsx b/src/Components/Sections/StoreSectionAsBoilerplate.jsx
index 51a3991a..e836f428 100644
--- a/src/Components/Sections/StoreSectionAsBoilerplate.jsx
+++ b/src/Components/Sections/StoreSectionAsBoilerplate.jsx
@@ -78,6 +78,7 @@ export default function StoreSectionAsBoilerplate(props) {
label: category.name,
}))}
required
+ testid="category-dropdown"
/>
Text
diff --git a/src/Components/design/Dropdown/Dropdown.jsx b/src/Components/design/Dropdown/Dropdown.jsx
index 87ebc9fd..85f1b4d6 100644
--- a/src/Components/design/Dropdown/Dropdown.jsx
+++ b/src/Components/design/Dropdown/Dropdown.jsx
@@ -19,6 +19,7 @@ export default function Dropdown(props) {
labelText,
altLabel,
onClickAltLabel,
+ testId,
} = props;
const dropdownEl = useRef(null);
@@ -63,6 +64,7 @@ export default function Dropdown(props) {
setIsMenuOpen(false);
}
}}
+ data-testid={testId}
>
setIsMenuOpen(true)}>{labelText}
@@ -91,6 +93,7 @@ export default function Dropdown(props) {
setIsMenuOpen((isOpen) => !isOpen);
}
}}
+ data-testid={props.testid}
>
{selectedOption ? (
{selectedOption.label}
@@ -117,6 +120,7 @@ Dropdown.propTypes = {
placeholder: PropTypes.string,
required: PropTypes.bool,
value: PropTypes.string,
+ testId: PropTypes.string,
};
Dropdown.defaultProps = {
diff --git a/src/Components/design/Dropdown/DropdownMenu.jsx b/src/Components/design/Dropdown/DropdownMenu.jsx
index 17f47306..928c26e1 100644
--- a/src/Components/design/Dropdown/DropdownMenu.jsx
+++ b/src/Components/design/Dropdown/DropdownMenu.jsx
@@ -12,6 +12,7 @@ export default function DropdownMenu(props) {
{...restProps}
className={clsx(className, "dropdown__menu")}
role="listbox"
+ data-testid="drop-down-mini-menu"
>
{options?.map((option, index) => (
diff --git a/src/Components/design/Dropdown/DropdownMenuItem.jsx b/src/Components/design/Dropdown/DropdownMenuItem.jsx
index 7d533ebb..f10d40a2 100644
--- a/src/Components/design/Dropdown/DropdownMenuItem.jsx
+++ b/src/Components/design/Dropdown/DropdownMenuItem.jsx
@@ -52,6 +52,7 @@ export default function DropdownMenuItem(props) {
setFocusedOption(options[index + 1]);
}
}}
+ data-testid={option.label}
>
{option.label}
diff --git a/src/Components/design/DropdownMini/DropdownMini.jsx b/src/Components/design/DropdownMini/DropdownMini.jsx
index 5fc90ba3..2956ccfe 100644
--- a/src/Components/design/DropdownMini/DropdownMini.jsx
+++ b/src/Components/design/DropdownMini/DropdownMini.jsx
@@ -58,6 +58,7 @@ export default function DropdownMini(props) {
}}
>
{
diff --git a/src/Components/design/Sidebar/Sidebar.jsx b/src/Components/design/Sidebar/Sidebar.jsx
index 223fa6ef..12a72958 100644
--- a/src/Components/design/Sidebar/Sidebar.jsx
+++ b/src/Components/design/Sidebar/Sidebar.jsx
@@ -36,7 +36,7 @@ export default function Sidebar(props) {
{links.map(({ icon, title, path }) => (
-
+
) : (