From c993827aeed87b4fea91b63b829a09ad5563c61e Mon Sep 17 00:00:00 2001 From: Danilo Woznica Date: Fri, 30 Sep 2022 17:19:36 +0300 Subject: [PATCH] fix(e2e): migrate from cypress to playwright & fix sandpackStateFromProps (#593) --- .codesandbox/ci.json | 2 +- .eslintignore | 3 +- .eslintrc | 3 +- .github/workflows/checks.yml | 64 +-- .gitignore | 3 - cypress.json | 6 - cypress/fixtures/example.json | 5 - cypress/integration/CodeMirror.spec.js | 53 --- cypress/integration/CodeViewer.spec.js | 23 - cypress/integration/Issues.spec.js | 20 - cypress/integration/Sandpack.spec.js | 24 - cypress/integration/Templates.spec.js | 31 -- cypress/plugins/index.js | 22 - cypress/snapshots.js | 34 -- cypress/support/commands.js | 1 - cypress/support/index.js | 20 - package.json | 13 +- sandpack-react/.gitignore | 4 + sandpack-react/e2e/codeviewer.spec.ts | 29 ++ sandpack-react/e2e/console.spec.ts | 23 + sandpack-react/e2e/issues.spec.ts | 28 ++ sandpack-react/e2e/sandpack.spec.ts | 76 +++ sandpack-react/e2e/templates.spec.ts | 25 + sandpack-react/package.json | 7 +- sandpack-react/playwright.config.ts | 106 +++++ sandpack-react/src/Issues.stories.tsx | 6 +- .../src/components/FileTabs/FileTabs.test.tsx | 25 + .../src/contexts/sandpackContext.tsx | 4 + yarn.lock | 450 +++--------------- 29 files changed, 400 insertions(+), 710 deletions(-) delete mode 100644 cypress.json delete mode 100644 cypress/fixtures/example.json delete mode 100644 cypress/integration/CodeMirror.spec.js delete mode 100644 cypress/integration/CodeViewer.spec.js delete mode 100644 cypress/integration/Issues.spec.js delete mode 100644 cypress/integration/Sandpack.spec.js delete mode 100644 cypress/integration/Templates.spec.js delete mode 100644 cypress/plugins/index.js delete mode 100644 cypress/snapshots.js delete mode 100644 cypress/support/commands.js delete mode 100644 cypress/support/index.js create mode 100644 sandpack-react/e2e/codeviewer.spec.ts create mode 100644 sandpack-react/e2e/console.spec.ts create mode 100644 sandpack-react/e2e/issues.spec.ts create mode 100644 sandpack-react/e2e/sandpack.spec.ts create mode 100644 sandpack-react/e2e/templates.spec.ts create mode 100644 sandpack-react/playwright.config.ts diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json index 6610e457b..b24e32b2c 100644 --- a/.codesandbox/ci.json +++ b/.codesandbox/ci.json @@ -1,5 +1,5 @@ { "packages": ["sandpack-client", "sandpack-react"], - "sandboxes": ["sowx8r", "p9l5gn"], + "sandboxes": ["sowx8r"], "node": "14" } diff --git a/.eslintignore b/.eslintignore index 4bce95fdf..5971abb9a 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,5 +2,4 @@ dist/ esm/ sandpack/ file-resolver-protocol.ts -examples/ -cypress/ \ No newline at end of file +examples/ \ No newline at end of file diff --git a/.eslintrc b/.eslintrc index 0911add98..0a8eedaac 100644 --- a/.eslintrc +++ b/.eslintrc @@ -8,8 +8,7 @@ // TypeScript specific rules "plugin:@typescript-eslint/recommended", // Disable eslint rules that conflict with Prettier's formatting - "prettier", - "plugin:cypress/recommended" + "prettier" ], "parser": "@typescript-eslint/parser", "rules": { diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index b29847dba..7a61be1c6 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -92,57 +92,10 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - chromatic-deployment: - name: Chromatic deployment - runs-on: ubuntu-latest - timeout-minutes: 10 - needs: install - steps: - - name: Setup | Checkout - uses: actions/checkout@v1 - - - name: Setup | Node.js - uses: actions/setup-node@v2 - with: - node-version-file: .nvmrc - - - name: Setup | Cache node_modules - uses: actions/cache@v3 - with: - path: | - node_modules - packages/*/node_modules - key: modules-${{ hashFiles('yarn.lock') }} - - - name: Setup | Restore react build - uses: actions/download-artifact@v2 - with: - name: sandpack-react-${{ github.sha }} - path: sandpack-react/dist - - - name: Setup | Restore client build - uses: actions/download-artifact@v2 - with: - name: sandpack-client-${{ github.sha }} - path: sandpack-client/dist - - - name: Setup | Restore theme build - uses: actions/download-artifact@v2 - with: - name: sandpack-themes-${{ github.sha }} - path: sandpack-themes/dist - - - name: Publish to Chromatic - uses: chromaui/action@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - buildScriptName: "chromatic:react" - integration: name: Integration tests runs-on: ubuntu-latest - timeout-minutes: 10 + timeout-minutes: 20 needs: install steps: - name: Setup | Checkout @@ -179,11 +132,18 @@ jobs: name: sandpack-themes-${{ github.sha }} path: sandpack-themes/dist - - name: Cypress run - uses: cypress-io/github-action@v2 + - name: Install Playwright Browsers + run: npx playwright install --with-deps + + - name: Run Playwright tests + run: cd sandpack-react && npx playwright test + + - uses: actions/upload-artifact@v2 + if: always() with: - start: yarn dev:react - config: video=false + name: playwright-report + path: sandpack-react/playwright-report/ + retention-days: 30 test: name: Unit tests diff --git a/.gitignore b/.gitignore index b3564f6b6..2d5c7172b 100644 --- a/.gitignore +++ b/.gitignore @@ -106,6 +106,3 @@ dist # Mac .DS_Store - -cypress/videos -cypress/screenshots \ No newline at end of file diff --git a/cypress.json b/cypress.json deleted file mode 100644 index 8aa304947..000000000 --- a/cypress.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "baseUrl": "http://localhost:6006", - "snapshotFileName": "./cypress/snapshots.js", - "chromeWebSecurity": false, - "projectId": "n9y1sd" -} diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json deleted file mode 100644 index 02e425437..000000000 --- a/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "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/integration/CodeMirror.spec.js b/cypress/integration/CodeMirror.spec.js deleted file mode 100644 index a88085c5a..000000000 --- a/cypress/integration/CodeMirror.spec.js +++ /dev/null @@ -1,53 +0,0 @@ -import * as mocks from "../../sandpack-react/src/components/CodeEditor/languages-mocks"; - -describe("CodeMirror", () => { - Object.keys(mocks).forEach((lang, index) => { - it(`Should render a "${lang}" component with a proper syntax-highlight`, () => { - cy.viewport(600, 1000).visit( - `/iframe.html?id=components-codemirror--${lang}` - ); - cy.get(".cm-content") - .wait(index === 0 ? 400 : 0) // warm-up storybook - .invoke("attr", "style", "tab-size: 4;") - .snapshot(); - }); - }); - - it("should render a decoration component properly", () => { - cy.viewport(600, 1000).visit( - `/iframe.html?id=components-code-viewer--decorators` - ); - - cy.get(".cm-content").invoke("attr", "style", "tab-size: 4;").snapshot(); - }); - - it("should load the autocomplete CodeMirror extension", () => { - cy.viewport(600, 1000).visit( - `/iframe.html?id=components-code-editor--extension-autocomplete` - ); - - // Remove all content from element editable - cy.get(".cm-content").type("{selectall}").type("{backspace}"); - - // Trigger autocomplete keybinding - cy.get(".cm-content").type("{ctrl} "); - - // Wait for the autocomplete modal appears and select the first item - // eslint-disable-next-line cypress/no-unnecessary-waiting - cy.wait(200).focused().type("{enter}"); - - /** - * Take a snapshot of the current editor state, - * which should contains a snippet code: - * - * ``` - * class name { - * constructor(params) { - * - * } - * } - * ``` - */ - cy.get(".cm-content").snapshot(); - }); -}); diff --git a/cypress/integration/CodeViewer.spec.js b/cypress/integration/CodeViewer.spec.js deleted file mode 100644 index 41ff954bd..000000000 --- a/cypress/integration/CodeViewer.spec.js +++ /dev/null @@ -1,23 +0,0 @@ -import "cypress-real-events/support"; - -describe("CodeViewer", () => { - it("should not be editable", () => { - cy.viewport(600, 1000).visit( - `/iframe.html?id=components-code-viewer--component` - ); - - cy.get(".cm-content").should("have.attr", "contenteditable", "false"); - }); - - it("should not be able to cut the content", () => { - cy.viewport(600, 1000).visit( - `/iframe.html?id=components-code-viewer--component` - ); - - // Force select and Command+X: it should fail for non-ready-only component - cy.get(".cm-content").trigger("mousedown").realPress(["Meta", "x"]); - - // content should still be there - cy.get(".cm-content").snapshot(); - }); -}); diff --git a/cypress/integration/Issues.spec.js b/cypress/integration/Issues.spec.js deleted file mode 100644 index c4c90ad1f..000000000 --- a/cypress/integration/Issues.spec.js +++ /dev/null @@ -1,20 +0,0 @@ -describe("Issue", () => { - it("toggles read-only mode (#454)", () => { - cy.viewport(600, 1000).visit( - `/iframe.html?id=bug-reports-issues--issue-454` - ); - - // 1. it's editable - cy.get(".cm-content").should("have.attr", "contenteditable", "true"); - - // 2. click on button and set read-only as true - cy.get(".trigger").click(); - - // 3. it's not editable - cy.get(".cm-content").should("have.attr", "contenteditable", "false"); - - // 4. make sure the editor is mount - cy.get(".cm-editor").should("exist"); - cy.get(".pre-placeholder").should("not.exist"); - }); -}); diff --git a/cypress/integration/Sandpack.spec.js b/cypress/integration/Sandpack.spec.js deleted file mode 100644 index eb6fed9f9..000000000 --- a/cypress/integration/Sandpack.spec.js +++ /dev/null @@ -1,24 +0,0 @@ -const accessPage = (wait) => { - // eslint-disable-next-line cypress/no-unnecessary-waiting - cy.viewport(600, 1000) - .visit(`/iframe.html?id=bug-reports-issues--file-tab`) - .wait(wait ? 10000 : 0); // warm-up sandbox -}; - -describe("Sandpack", () => { - it(`Should be able to navigate between files`, () => { - accessPage(); - - cy.get(".cm-content").should( - "have.text", - `export default function App() { return

Hello World

}` - ); - - cy.get(".sp-tabs-scrollable-container [title='/styles.css']").click(); - - cy.get(".cm-content").should( - "have.text", - `body { font-family: sans-serif; -webkit-font-smoothing: auto; -moz-font-smoothing: auto; -moz-osx-font-smoothing: grayscale; font-smoothing: auto; text-rendering: optimizeLegibility; font-smooth: always; -webkit-tap-highlight-color: transparent; -webkit-touch-callout: none;}h1 { font-size: 1.5rem;}` - ); - }); -}); diff --git a/cypress/integration/Templates.spec.js b/cypress/integration/Templates.spec.js deleted file mode 100644 index 1c5b929c8..000000000 --- a/cypress/integration/Templates.spec.js +++ /dev/null @@ -1,31 +0,0 @@ -import { SANDBOX_TEMPLATES } from "../../sandpack-react/src/templates"; - -const accessPage = (template) => { - const timeout = template === "solid" ? 20000 : 10000; - // eslint-disable-next-line cypress/no-unnecessary-waiting - cy.viewport(600, 1000) - .visit(`/iframe.html?id=presets-template--${template}`) - .wait(timeout); // warm-up sandbox -}; -const getIframeDocument = () => { - return cy.get(".sp-preview-iframe").its("0.contentDocument"); -}; - -const getIframeBody = () => { - return getIframeDocument() - .its("body") - .should("not.be.undefined") - .then(cy.wrap); -}; - -describe("Templates", () => { - Object.keys(SANDBOX_TEMPLATES).forEach((template) => { - if (template === "test-ts") return null; // tests there is no preview - - it(`Should run the ${template} template`, () => { - accessPage(template); - - getIframeBody().find("h1").should("have.text", "Hello World"); - }); - }); -}); diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js deleted file mode 100644 index 8229063ad..000000000 --- a/cypress/plugins/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/// -// *********************************************************** -// This example plugins/index.js can be used to load plugins -// -// You can change the location of this file or turn off loading -// the plugins file with the 'pluginsFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/plugins-guide -// *********************************************************** - -// This function is called when a project is opened or re-opened (e.g. due to -// the project's config changing) - -/** - * @type {Cypress.PluginConfig} - */ -// eslint-disable-next-line no-unused-vars -module.exports = (on, config) => { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config -}; diff --git a/cypress/snapshots.js b/cypress/snapshots.js deleted file mode 100644 index b1b676361..000000000 --- a/cypress/snapshots.js +++ /dev/null @@ -1,34 +0,0 @@ -module.exports = { - __version: "9.6.1", - CodeMirror: { - 'Should render a "html" component with a proper syntax-highlight': { - 1: '
\n

\n
<!DOCTYPE html>
\n
<html lang="en">
\n
<head>
\n
<meta charset="UTF-8">
\n
<meta name="viewport" content="width=device-width,\n initial-scale=1.0">\n
\n
<meta http-equiv="X-UA-Compatible" content="ie=edge">
\n
<title>HTML 5 Boilerplate</title>
\n
<link rel="stylesheet" href="style.css">
\n
</head>
\n
<body>
\n
<script src="index.js"></script>
\n
</body>
\n
</html>
\n

\n
', - }, - 'Should render a "js" component with a proper syntax-highlight': { - 1: '
\n
function Greeting({ name }) {
\n
return <h1>Hello, {name}!</h1>;
\n
}
\n

\n
export default function App() {
\n
return (
\n
<div>
\n
<Greeting name="Divyesh" />
\n
<Greeting name="Sarah" />
\n
<Greeting name="Taylor" />
\n
</div>
\n
);
\n
}
\n
', - }, - 'Should render a "jsx" component with a proper syntax-highlight': { - 1: '
\n
function Greeting({ name }) {
\n
return <h1>Hello, {name}!</h1>;
\n
}
\n

\n
export default function App() {
\n
return (
\n
<div>
\n
<Greeting name="Divyesh" />
\n
<Greeting name="Sarah" />
\n
<Greeting name="Taylor" />
\n
</div>
\n
);
\n
}
\n
', - }, - 'Should render a "css" component with a proper syntax-highlight': { - 1: '
\n
body\n {
\n
background-color: lightblue;
\n
}
\n

\n
h1 {
\n
color: white;
\n
text-align: center;
\n
}
\n

\n
p {
\n
font-family: verdana;
\n
font-size: 20px;
\n
}
\n
', - }, - 'Should render a "less" component with a proper syntax-highlight': { - 1: '
\n
@width: 10px;
\n
@height: @width + 10px;
\n

\n
#header {\n
\n
width: @width;
\n
height: @height;
\n
}
\n
', - }, - 'Should render a "vue" component with a proper syntax-highlight': { - 1: '
\n
<template>
\n
<div class="column is-12">
\n
<label class="label" for="email">Email</label>
\n
<p :class="{\n \'control\': true }">\n
\n
<input v-validate="\'required|email\'" :class="{\'input\': true, \'is-danger\': errors.has(\'email\')\n }" name="email" type="text" placeholder="Email">
\n
<span v-show="errors.has(\'email\')" class="help is-danger">{{ errors.first(\'email\') }}</span>
\n
</p>
\n
</div>
\n
</template>
\n

\n
<script>
\n
export default {
\n
name: \'basic-example\'
\n
};
\n
</script>
\n
', - }, - "should render a decoration component properly": { - 1: '
\n
const\n people = [{
\n
id: 0,
\n
name: \'Creola Katherine Johnson\',
\n
profession: \'mathematician\',
\n
}, {
\n
id: 1,
\n
name: \'Mario José Molina-Pasquel Henríquez\',
\n
profession: \'chemist\',
\n
}];
\n

\n
export default function List() {
\n
const [text, setText] = useState("")
\n
const listItems = people.map(person =>
\n
<li>{person}</li>
\n
);
\n
return <ul>{listItems}</ul>;
\n
}
\n
', - }, - "should load the autocomplete CodeMirror extension": { - 1: '
\n

\n

\n
', - }, - }, - CodeViewer: { - "should not be able to cut the content": { - 1: '
\n
import "./styles.css";
\n

\n
document.getElementById("app").innerHTML = `
\n
<h1>Hello\n World</h1>
\n
<div>
\n
We use the same\n configuration as Parcel to bundle this sandbox, you can find more\n
\n
info about Parcel \n
\n
<a\n href="https://parceljs.org" target="_blank" rel="noopener\n noreferrer">here</a>.
\n
</div>
\n
`;
\n

\n
', - }, - }, -}; diff --git a/cypress/support/commands.js b/cypress/support/commands.js deleted file mode 100644 index ac61dbcc1..000000000 --- a/cypress/support/commands.js +++ /dev/null @@ -1 +0,0 @@ -require("@cypress/snapshot").register(); diff --git a/cypress/support/index.js b/cypress/support/index.js deleted file mode 100644 index d076cec9f..000000000 --- a/cypress/support/index.js +++ /dev/null @@ -1,20 +0,0 @@ -// *********************************************************** -// This example support/index.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.json b/package.json index 7813d221a..cd08fd6d8 100644 --- a/package.json +++ b/package.json @@ -19,17 +19,14 @@ "lint": "eslint '**/*.ts?(x)' --fix", "format:check": "prettier --check '**/*.{ts,tsx}'", "format": "prettier --write '**/*.{ts,tsx,js,jsx}'", - "test": "TEST_ENV=true jest sandpack-react sandpack-client --transformIgnorePatterns \"node_modules/(?!@codemirror)/\"", - "cy:open": "cypress open", - "cy:run": "cypress run", + "test": "TEST_ENV=true jest sandpack-react sandpack-client --transformIgnorePatterns \"node_modules/(?!@codemirror)/\" --modulePathIgnorePatterns \"e2e\"", "build": "yarn workspace @codesandbox/sandpack-client build && yarn workspace @codesandbox/sandpack-react build && yarn workspace @codesandbox/sandpack-themes build", "prepare": "husky install", "clean": "yarn workspaces run clean", "dev:docs": "yarn workspace sandpack-docs start", "dev:react": "yarn workspace @codesandbox/sandpack-react storybook", "dev:landing": "yarn workspace sandpack-landing dev -p 3001", - "dev:theme": "yarn workspace sandpack-theme dev -p 3002", - "chromatic:react": "yarn workspace @codesandbox/sandpack-react build-storybook" + "dev:theme": "yarn workspace sandpack-theme dev -p 3002" }, "repository": { "type": "git", @@ -41,19 +38,16 @@ "@babel/preset-env": "^7.16.5", "@babel/preset-react": "^7.16.5", "@babel/preset-typescript": "^7.16.5", - "@cypress/snapshot": "^2.1.7", "@octokit/rest": "^18.12.0", "@types/jest": "^27.4.0", "@typescript-eslint/eslint-plugin": "^4.0.0", "@typescript-eslint/parser": "^4.0.0", "babel-eslint": "^10.0.0", "babel-jest": "^27.4.5", - "cypress": "^9.1.1", "esbuild": "^0.12.21", "eslint": "^7.5.0", "eslint-config-prettier": "^8.1.0", "eslint-config-react-app": "^6.0.0", - "eslint-plugin-cypress": "^2.12.1", "eslint-plugin-flowtype": "^5.2.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.3.1", @@ -67,7 +61,6 @@ "lint-staged": "^10.5.4", "package-build-stats": "7.3.6", "prettier": "^2.2.1", - "react-test-renderer": "^18.1.0", - "cypress-real-events": "^1.7.0" + "react-test-renderer": "^18.1.0" } } diff --git a/sandpack-react/.gitignore b/sandpack-react/.gitignore index 9419f1618..9fedbad73 100644 --- a/sandpack-react/.gitignore +++ b/sandpack-react/.gitignore @@ -3,3 +3,7 @@ storybook-static .rpt2_cache dist .env +node_modules/ +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/sandpack-react/e2e/codeviewer.spec.ts b/sandpack-react/e2e/codeviewer.spec.ts new file mode 100644 index 000000000..5fcec2db3 --- /dev/null +++ b/sandpack-react/e2e/codeviewer.spec.ts @@ -0,0 +1,29 @@ +import { test, expect } from "@playwright/test"; + +test.beforeEach(async ({ page }) => { + await page.goto( + "http://localhost:6006/iframe.html?id=components-code-viewer--component" + ); +}); + +test.describe("CodeViewer", () => { + test("should not be editable", async ({ page }) => { + const content = page.locator(".cm-content"); + + // ✅ + await expect(content).toHaveAttribute("contenteditable", "false"); + }); + + test("should not be able to cut the content", async ({ page }) => { + await page.locator(".cm-content").click(); + + // Force select and Command+X: it should fail for non-ready-only component + page.keyboard.press("Meta+x"); + + // ✅ content should still be there + const content = await page.innerText(".cm-content"); + expect(content).toContain( + `We use the same configuration as Parcel to bundle this sandbox, you can find more` + ); + }); +}); diff --git a/sandpack-react/e2e/console.spec.ts b/sandpack-react/e2e/console.spec.ts new file mode 100644 index 000000000..b225185ea --- /dev/null +++ b/sandpack-react/e2e/console.spec.ts @@ -0,0 +1,23 @@ +import { test, expect } from "@playwright/test"; + +test.describe("Console", () => { + test("should print the log on SandpackConsole component", async ({ + page, + }) => { + await page.goto( + "http://localhost:6006/iframe.html?id=components-console--main" + ); + + // Dispatch a log + await page.frameLocator("iframe").locator("text=string").click(); + + // wait for console dispatch + await page.waitForTimeout(1000); + + // ✅ find the console.log message + const consoleComponentText = await page + .locator(".sp-console pre") + .innerText(); + expect(consoleComponentText).toContain('"Lorem ipsum"'); + }); +}); diff --git a/sandpack-react/e2e/issues.spec.ts b/sandpack-react/e2e/issues.spec.ts new file mode 100644 index 000000000..16af60ca1 --- /dev/null +++ b/sandpack-react/e2e/issues.spec.ts @@ -0,0 +1,28 @@ +import { test, expect } from "@playwright/test"; + +test.describe("Issue", () => { + test("toggles read-only mode (#454)", async ({ page }) => { + await page.goto( + "http://localhost:6006/iframe.html?id=bug-reports-issues--issue-454" + ); + + // 1. it is not editable + await expect(page.locator(".cm-content")).toHaveAttribute( + "contenteditable", + "true" + ); + + // 2. click on button and set read-only as true + await page.locator(".trigger").click(); + + // 3. it's not editable + await expect(page.locator(".cm-content")).toHaveAttribute( + "contenteditable", + "false" + ); + + // ✅ 4. make sure the editor is mount + await expect(page.locator(".cm-editor")).toHaveCount(1); + await expect(page.locator(".pre-placeholder")).toHaveCount(0); + }); +}); diff --git a/sandpack-react/e2e/sandpack.spec.ts b/sandpack-react/e2e/sandpack.spec.ts new file mode 100644 index 000000000..0a70bcbc1 --- /dev/null +++ b/sandpack-react/e2e/sandpack.spec.ts @@ -0,0 +1,76 @@ +import { test, expect } from "@playwright/test"; + +test.describe("Sandpack", () => { + test("Should be able to run a sandbox and edit the content", async ({ + page, + }) => { + await page.goto( + `http://localhost:6006/iframe.html?id=presets-template--react` + ); + + test.setTimeout(30000 * 3); // triple default + + const headingIframe = await page + .frameLocator("iframe") + .locator("h1") + .innerText(); + + // ✅ Initial state + expect(headingIframe).toBe("Hello World"); + + // Insert new content + await page.locator(".cm-content").fill(`export default function App() { + return

Hello Sandpack

+ }`); + + // Wait to the bundler applies changes + await page.waitForTimeout(2000); + + // ✅ Asset new content on iframe + const newHeadingIframe = await page + .frameLocator("iframe") + .locator("h1") + .innerText(); + expect(newHeadingIframe).toBe("Hello Sandpack"); + }); + + test("Should be able to navigate between files", async ({ page }) => { + await page.goto( + "http://localhost:6006/iframe.html?id=bug-reports-issues--file-tab" + ); + + const mainFileContent = await page.innerText("div.cm-content"); + + // ✅ Initial file + expect(mainFileContent).toBe( + `export default function App() { + return

Hello World

+} + +` + ); + + // Change file + await page + .locator(".sp-tabs-scrollable-container [title='/styles.css']") + .click(); + + const secondFileContent = await page.innerText("div.cm-content"); + + // ✅ Second file + expect(secondFileContent).toContain( + `body { + font-family: sans-serif; + -webkit-font-smoothing: auto; + -moz-font-smoothing: auto; + -moz-osx-font-smoothing: grayscale; + font-smoothing: auto; + text-rendering: optimizeLegibility; + font-smooth: always; + -webkit-tap-highlight-color: transparent; + -webkit-touch-callout: none; +} +` + ); + }); +}); diff --git a/sandpack-react/e2e/templates.spec.ts b/sandpack-react/e2e/templates.spec.ts new file mode 100644 index 000000000..caa3f2183 --- /dev/null +++ b/sandpack-react/e2e/templates.spec.ts @@ -0,0 +1,25 @@ +import { test, expect } from "@playwright/test"; + +import { SANDBOX_TEMPLATES } from "../src/templates"; + +test.describe("Templates", () => { + Object.keys(SANDBOX_TEMPLATES).forEach((template) => { + if (template === "test-ts") return null; // tests there is no preview + + test(`Should run the ${template} template`, async ({ page }) => { + await page.goto( + `http://localhost:6006/iframe.html?id=presets-template--${template}` + ); + + test.setTimeout(30000 * 3); // triple default + + const headingIframe = await page + .frameLocator("iframe") + .locator("h1") + .innerText(); + + // ✅ find the "hello world" message + expect(headingIframe).toBe("Hello World"); + }); + }); +}); diff --git a/sandpack-react/package.json b/sandpack-react/package.json index 052e80858..9e5c4b6aa 100644 --- a/sandpack-react/package.json +++ b/sandpack-react/package.json @@ -22,10 +22,9 @@ "build:publish": "yarn build", "build:types": "tsc -p tsconfig.json", "start": "tsc -p tsconfig.esm.json --watch", - "storybook": "start-storybook -p 6006 --no-dll", - "build-storybook": "build-storybook --no-dll", + "storybook": "start-storybook -p 6006 --no-dll --quiet", "typecheck": "tsc", - "chromatic": "chromatic --project-token CHROMATIC_PROJECT_TOKEN" + "test:e2e": "yarn storybook && yarn playwright test" }, "files": [ "dist", @@ -63,6 +62,7 @@ "@codemirror/legacy-modes": "^0.19.1", "@codemirror/stream-parser": "^0.19.9", "@codesandbox/sandpack-themes": "^1.6.0", + "@playwright/test": "^1.26.1", "@storybook/addon-actions": "^6.1.9", "@storybook/addon-essentials": "^6.1.9", "@storybook/addon-knobs": "^6.1.9", @@ -76,7 +76,6 @@ "@types/react": "^18.0.9", "autoprefixer": "^10.2.4", "babel-loader": "^7.1.5", - "chromatic": "^6.3.3", "cross-env": "^5.1.3", "cssnano": "^4.1.10", "dotenv": "^8.2.0", diff --git a/sandpack-react/playwright.config.ts b/sandpack-react/playwright.config.ts new file mode 100644 index 000000000..6892601d2 --- /dev/null +++ b/sandpack-react/playwright.config.ts @@ -0,0 +1,106 @@ +import type { PlaywrightTestConfig } from "@playwright/test"; +import { devices } from "@playwright/test"; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +const config: PlaywrightTestConfig = { + testDir: "./e2e", + /* Maximum time one test can run for. */ + timeout: 30 * 1000, + expect: { + /** + * Maximum time expect() should wait for the condition to be met. + * For example in `await expect(locator).toHaveText();` + */ + timeout: 5000, + }, + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: "html", + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ + actionTimeout: 0, + /* Base URL to use in actions like `await page.goto('/')`. */ + // baseURL: 'http://localhost:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: "on-first-retry", + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: "chromium", + use: { + ...devices["Desktop Chrome"], + }, + }, + + { + name: "firefox", + use: { + ...devices["Desktop Firefox"], + }, + }, + + { + name: "webkit", + use: { + ...devices["Desktop Safari"], + }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { + // ...devices['Pixel 5'], + // }, + // }, + // { + // name: 'Mobile Safari', + // use: { + // ...devices['iPhone 12'], + // }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { + // channel: 'msedge', + // }, + // }, + // { + // name: 'Google Chrome', + // use: { + // channel: 'chrome', + // }, + // }, + ], + + /* Folder for test artifacts such as screenshots, videos, traces, etc. */ + // outputDir: 'test-results/', + + webServer: { + command: "yarn storybook", + port: 6006, + }, +}; + +export default config; diff --git a/sandpack-react/src/Issues.stories.tsx b/sandpack-react/src/Issues.stories.tsx index 9b7730a72..0003e2021 100644 --- a/sandpack-react/src/Issues.stories.tsx +++ b/sandpack-react/src/Issues.stories.tsx @@ -78,11 +78,7 @@ export const Issue454 = (): JSX.Element => { export const FileTab = (): JSX.Element => { return ( ); diff --git a/sandpack-react/src/components/FileTabs/FileTabs.test.tsx b/sandpack-react/src/components/FileTabs/FileTabs.test.tsx index 526496c19..f415b9675 100644 --- a/sandpack-react/src/components/FileTabs/FileTabs.test.tsx +++ b/sandpack-react/src/components/FileTabs/FileTabs.test.tsx @@ -26,4 +26,29 @@ describe("FileTabs", () => { expect(buttonsTex).toEqual(["foo/App.js", "App.js", "baz/App.js"]); }); + + it("render the visible files", () => { + const component = create( + + + + ).root; + + const buttons = component.findAll((el) => + el.props.className?.includes("sp-tab-button") + ); + const buttonsTex = buttons.map((item) => item.props.children[0]); + + expect(buttonsTex).toEqual(["baz/App.js", "App.js"]); + }); }); diff --git a/sandpack-react/src/contexts/sandpackContext.tsx b/sandpack-react/src/contexts/sandpackContext.tsx index e6e9b4dbe..ccca360d5 100644 --- a/sandpack-react/src/contexts/sandpackContext.tsx +++ b/sandpack-react/src/contexts/sandpackContext.tsx @@ -72,6 +72,7 @@ export class SandpackProviderClass extends React.PureComponent< template: props.template, files: props.files, customSetup: props.customSetup, + options: props.options, }); this.state = { @@ -280,6 +281,7 @@ export class SandpackProviderClass extends React.PureComponent< template: this.props.template, files: this.props.files, customSetup: this.props.customSetup, + options: this.props.options, }); /** @@ -612,6 +614,7 @@ export class SandpackProviderClass extends React.PureComponent< template: this.props.template, files: this.props.files, customSetup: this.props.customSetup, + options: this.props.options, }); this.setState( @@ -627,6 +630,7 @@ export class SandpackProviderClass extends React.PureComponent< template: this.props.template, files: this.props.files, customSetup: this.props.customSetup, + options: this.props.options, }); this.setState({ files }, this.updateClients); diff --git a/yarn.lock b/yarn.lock index 7dabec9ed..778a89d2c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1640,52 +1640,6 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-1.0.0.tgz#91c560df2ed8d9700e4c7ed4ac21a3a322c9d975" integrity sha512-RkYG5KiGNX0fJ5YoI0f4Wfq2Yo74D25Hru4fxTOioYdQvHBxcrrtTTyT5Ozzh2ejcNrhFy7IEts2WyEY7yi5yw== -"@cypress/request@^2.88.10": - version "2.88.10" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce" - integrity sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg== - 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.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^8.3.2" - -"@cypress/snapshot@^2.1.7": - version "2.1.7" - resolved "https://registry.yarnpkg.com/@cypress/snapshot/-/snapshot-2.1.7.tgz#e7360eb628b062f28f03036382619ec72cfb1831" - integrity sha512-f8AcfIg7wOOHSdBODlIwCJE/rG5Yb+kUY+WVTKynB2pLLoDy9nc8CtcazqX19q2Lh++nTJLNRihpbbWvk33mbg== - dependencies: - "@wildpeaks/snapshot-dom" "1.6.0" - am-i-a-dependency "1.1.2" - check-more-types "2.24.0" - its-name "1.0.0" - js-beautify "1.10.3" - lazy-ass "1.6.0" - snap-shot-compare "2.8.3" - snap-shot-store "1.2.3" - -"@cypress/xvfb@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" - integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== - dependencies: - debug "^3.1.0" - lodash.once "^4.1.1" - "@discoveryjs/json-ext@^0.5.3": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" @@ -4870,6 +4824,14 @@ chrome-trace-event "^1.0.2" nullthrows "^1.1.1" +"@playwright/test@^1.26.1": + version "1.26.1" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.26.1.tgz#73ada4e70f618bca69ba7509c4ba65b5a41c4b10" + integrity sha512-bNxyZASVt2adSZ9gbD7NCydzcb5JaI0OR9hc7s+nmPeH604gwp0zp17NNpwXY4c8nvuBGQQ9oGDx72LE+cUWvw== + dependencies: + "@types/node" "*" + playwright-core "1.26.1" + "@pmmmwh/react-refresh-webpack-plugin@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" @@ -6548,7 +6510,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== -"@types/node@^14.0.10", "@types/node@^14.14.31": +"@types/node@^14.0.10": version "14.18.18" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.18.tgz#5c9503030df484ccffcbb935ea9a9e1d6fad1a20" integrity sha512-B9EoJFjhqcQ9OmQrNorItO+OwEOORNn3S31WuiHvZY/dm9ajkB7AKD/8toessEtHHNL+58jofbq7hMMY9v4yig== @@ -6760,16 +6722,6 @@ dependencies: "@types/node" "*" -"@types/sinonjs__fake-timers@8.1.1": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" - integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== - -"@types/sizzle@^2.3.2": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" - integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== - "@types/sockjs@^0.3.33": version "0.3.33" resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" @@ -6899,13 +6851,6 @@ dependencies: "@types/yargs-parser" "*" -"@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== - dependencies: - "@types/node" "*" - "@types/yoga-layout@1.9.2": version "1.9.2" resolved "https://registry.yarnpkg.com/@types/yoga-layout/-/yoga-layout-1.9.2.tgz#efaf9e991a7390dc081a0b679185979a83a9639a" @@ -7647,11 +7592,6 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" -"@wildpeaks/snapshot-dom@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@wildpeaks/snapshot-dom/-/snapshot-dom-1.6.0.tgz#83297612bf93b97983beafbe6ae71672642ac884" - integrity sha512-fCM5tYK6VZ1nhbk3Q11lkf6UOJlOCRU0oScQ8NV8OYBPC58wQmQaOF9g+rk+yhNYf3beybOBr+ZuiNen3B0Bxw== - "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -7908,11 +7848,6 @@ alphanum-sort@^1.0.0: resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ== -am-i-a-dependency@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/am-i-a-dependency/-/am-i-a-dependency-1.1.2.tgz#f9d3422304d6f642f821e4c407565035f6167f1f" - integrity sha512-h9Wm0GBuTJVKbtwDHBzdJr932O9iTR5lAgebGSke1b3V4pqzbwOsa1R3bYhff89Ch3+v3A4EgbX3vem+5Rl6Zg== - amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -8013,7 +7948,7 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== -ansi-styles@^2.0.1, ansi-styles@^2.2.1: +ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== @@ -8132,7 +8067,7 @@ aproba@^1.0.3, aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -arch@^2.1.1, arch@^2.2.0: +arch@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== @@ -8481,7 +8416,7 @@ async@1.5.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== -async@3.2.3, async@^3.2.0, async@^3.2.3: +async@3.2.3, async@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== @@ -9048,11 +8983,6 @@ bl@^4.0.0, bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -blob-util@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" - integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== - blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" @@ -9342,11 +9272,6 @@ buble-jsx-only@^0.19.8: minimist "^1.2.0" regexpu-core "^4.5.4" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -9381,7 +9306,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.2.0, buffer@^5.5.0, buffer@^5.6.0, buffer@^5.7.0: +buffer@^5.2.0, buffer@^5.5.0, buffer@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -9573,11 +9498,6 @@ cacheable-request@^7.0.1, cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" -cachedir@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" - integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -9833,11 +9753,6 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-more-types@2.24.0, check-more-types@^2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" - integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== - check-types@^11.1.1: version "11.1.2" resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" @@ -9933,11 +9848,6 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -chromatic@^6.3.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-6.5.4.tgz#2e1beb7a8f6b84e7575456fe484201a3b4327ee1" - integrity sha512-/yunI/+rdc56C6x0IhpPmdfK/DRMOvQ2hoNyAe6uuU9rdWRoAH72lYatr2NcpdsOdHGOcV5DKgIaKgVdPfUk1w== - chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" @@ -10036,7 +9946,7 @@ cli-highlight@^2.1.11: parse5-htmlparser2-tree-adapter "^6.0.0" yargs "^16.0.0" -cli-table3@^0.6.1, cli-table3@^0.6.2, cli-table3@~0.6.1: +cli-table3@^0.6.1, cli-table3@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== @@ -11460,59 +11370,6 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -cypress-real-events@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/cypress-real-events/-/cypress-real-events-1.7.0.tgz#ad6a78de33af3af0e6437f5c713e30691c44472c" - integrity sha512-iyXp07j0V9sG3YClVDcvHN2DAQDgr+EjTID82uWDw6OZBlU3pXEBqTMNYqroz3bxlb0k+F74U81aZwzMNaKyew== - -cypress@^9.1.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-9.6.1.tgz#a7d6b5a53325b3dc4960181f5800a5ade0f085eb" - integrity sha512-ECzmV7pJSkk+NuAhEw6C3D+RIRATkSb2VAHXDY6qGZbca/F9mv5pPsj2LO6Ty6oIFVBTrwCyL9agl28MtJMe2g== - dependencies: - "@cypress/request" "^2.88.10" - "@cypress/xvfb" "^1.2.4" - "@types/node" "^14.14.31" - "@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 "^5.1.0" - common-tags "^1.8.0" - dayjs "^1.10.4" - debug "^4.3.2" - enquirer "^2.3.6" - eventemitter2 "^6.4.3" - 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.6" - ospath "^1.2.2" - pretty-bytes "^5.6.0" - proxy-from-env "1.0.0" - request-progress "^3.0.0" - semver "^7.3.2" - supports-color "^8.1.1" - tmp "~0.2.1" - untildify "^4.0.0" - yauzl "^2.10.0" - d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -11596,11 +11453,6 @@ dayjs@1.10.7: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== -dayjs@^1.10.4: - version "1.11.2" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.2.tgz#fa0f5223ef0d6724b3d8327134890cfe3d72fbe5" - integrity sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw== - de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" @@ -11632,13 +11484,6 @@ debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, d dependencies: ms "2.1.2" -debug@4.1.1, debug@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - debug@4.3.3: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" @@ -11653,6 +11498,13 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -11992,11 +11844,6 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diff@^1.3.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" - integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8= - diff@^3.1.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -12030,14 +11877,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -disparity@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/disparity/-/disparity-2.0.0.tgz#57ddacb47324ae5f58d2cc0da886db4ce9eeb718" - integrity sha1-V92stHMkrl9Y0swNqIbbTOnutxg= - dependencies: - ansi-styles "^2.0.1" - diff "^1.3.2" - dlv@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" @@ -13022,13 +12861,6 @@ eslint-module-utils@^2.7.3: debug "^3.2.7" find-up "^2.1.0" -eslint-plugin-cypress@^2.12.1: - version "2.12.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz#9aeee700708ca8c058e00cdafe215199918c2632" - integrity sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA== - dependencies: - globals "^11.12.0" - eslint-plugin-flowtype@^5.10.0, eslint-plugin-flowtype@^5.2.0: version "5.10.0" resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz#7764cc63940f215bf3f0bd2d9a1293b2b9b2b4bb" @@ -13401,11 +13233,6 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter2@^6.4.3: - version "6.4.5" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" - integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== - eventemitter3@^3.1.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -13434,7 +13261,20 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== -execa@4.1.0, execa@^4.1.0: +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -13449,19 +13289,6 @@ execa@4.1.0, execa@^4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -13477,13 +13304,6 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -executable@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" - integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== - dependencies: - pify "^2.2.0" - exif-parser@^0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" @@ -13729,17 +13549,6 @@ extract-files@9.0.0: resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== -extract-zip@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -13883,13 +13692,6 @@ fbjs@^3.0.0, fbjs@^3.0.1: setimmediate "^1.0.5" ua-parser-js "^0.7.30" -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - fd@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/fd/-/fd-0.0.3.tgz#b3240de86dbf5a345baae7382a07d4713566ff0c" @@ -13932,7 +13734,7 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.0.0, figures@^3.2.0: +figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -14186,16 +13988,6 @@ flux@^4.0.1: fbemitter "^3.0.0" fbjs "^3.0.1" -folktale@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/folktale/-/folktale-2.0.1.tgz#6dc26a65565aefdef9520223e022dddf5b8d8462" - integrity sha512-3kDSWVkSlErHIt/dC73vu+5zRqbW1mlnL46s2QfYN7Ps0JcS9MVtuLCrDQOBa7sanA+d9Fd8F+bn0VcyNe68Jw== - -folktale@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/folktale/-/folktale-2.3.2.tgz#38231b039e5ef36989920cbf805bf6b227bf4fd4" - integrity sha512-+8GbtQBwEqutP0v3uajDDoN64K2ehmHd0cjlghhxh0WpcfPzAIjPA03e1VvHlxL02FVGR0A6lwXsNQKn3H1RNQ== - follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.7: version "1.15.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4" @@ -14994,13 +14786,6 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -getos@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" - integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== - dependencies: - async "^3.2.0" - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -15230,7 +15015,7 @@ global@^4.4.0, global@~4.4.0: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0, globals@^11.12.0: +globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -16182,15 +15967,6 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -http-signature@~1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" - integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.14.1" - http-status-codes@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-2.2.0.tgz#bb2efe63d941dfc2be18e15f703da525169622be" @@ -16723,13 +16499,6 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-ci@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - is-color-stop@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" @@ -16914,7 +16683,7 @@ is-installed-globally@^0.3.2: global-dirs "^2.0.1" is-path-inside "^3.0.1" -is-installed-globally@^0.4.0, is-installed-globally@~0.4.0: +is-installed-globally@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== @@ -17416,11 +17185,6 @@ iterate-value@^1.0.2: es-get-iterator "^1.0.2" iterate-iterator "^1.0.1" -its-name@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/its-name/-/its-name-1.0.0.tgz#2065f1883ecb568c65f7112ddbf123401fae4af0" - integrity sha1-IGXxiD7LVoxl9xEt2/EjQB+uSvA= - jake@^10.8.5: version "10.8.5" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" @@ -17987,17 +17751,6 @@ js-base64@^2.1.8: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== -js-beautify@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.10.3.tgz#c73fa10cf69d3dfa52d8ed624f23c64c0a6a94c1" - integrity sha512-wfk/IAWobz1TfApSdivH5PJ0miIHgDoYb1ugSqHcODPmaYu46rYe5FVuIEkhjg8IQiv6rDNPyhsqbsohI/C2vQ== - dependencies: - config-chain "^1.1.12" - editorconfig "^0.15.3" - glob "^7.1.3" - mkdirp "~0.5.1" - nopt "~4.0.1" - js-beautify@^1.8.8: version "1.14.3" resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.3.tgz#3dd11c949178de7f3bdf3f6f752778d3bed95150" @@ -18236,16 +17989,6 @@ jsprim@^1.2.2: json-schema "0.4.0" verror "1.10.0" -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - jstransformer@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" @@ -18380,11 +18123,6 @@ latest-version@5.1.0, latest-version@^5.1.0: dependencies: package-json "^6.3.0" -lazy-ass@1.6.0, lazy-ass@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= - lazy-universal-dotenv@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" @@ -18612,7 +18350,7 @@ listr-verbose-renderer@^0.5.0: date-fns "^1.27.2" figures "^2.0.0" -listr2@^3.2.2, listr2@^3.8.3: +listr2@^3.2.2: version "3.14.0" resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== @@ -18988,7 +18726,7 @@ lodash.merge@^4.4.0, lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.once@^4.0.0, lodash.once@^4.1.1: +lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= @@ -20400,7 +20138,7 @@ node-sass@^4.14.1: dependencies: abbrev "1" -nopt@^4.0.1, nopt@~4.0.1: +nopt@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== @@ -20997,11 +20735,6 @@ osenv@0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -ospath@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" - integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= - overlayscrollbars@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz#0b840a88737f43a946b9d87875a2f9e421d0338a" @@ -21649,11 +21382,6 @@ peek-readable@^4.1.0: resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -21684,7 +21412,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatc resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -21816,6 +21544,11 @@ platform@^1.3.6: resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== +playwright-core@1.26.1: + version "1.26.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.26.1.tgz#a162f476488312dcf12638d97685144de6ada512" + integrity sha512-hzFchhhxnEiPc4qVPs9q2ZR+5eKNifY2hQDHtg1HnTTUuphYCBP8ZRb2si+B1TR7BHirgXaPi48LIye5SgrLAA== + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -22822,7 +22555,7 @@ prettier-bytes@1.0.4: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== -pretty-bytes@^5.3.0, pretty-bytes@^5.4.1, pretty-bytes@^5.6.0: +pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== @@ -23018,11 +22751,6 @@ proxy-addr@~2.0.5, proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-from-env@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -23305,11 +23033,6 @@ raf@^3.4.1: dependencies: performance-now "^2.1.0" -ramda@0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9" - integrity sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ== - ramda@^0.28.0: version "0.28.0" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.28.0.tgz#acd785690100337e8b063cab3470019be427cc97" @@ -24478,13 +24201,6 @@ replace-homedir@^1.0.0: is-absolute "^1.0.0" remove-trailing-separator "^1.1.0" -request-progress@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" - integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= - dependencies: - throttleit "^1.0.0" - request@2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" @@ -25544,30 +25260,6 @@ snake-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" -snap-shot-compare@2.8.3: - version "2.8.3" - resolved "https://registry.yarnpkg.com/snap-shot-compare/-/snap-shot-compare-2.8.3.tgz#b4982fb7b4e9cd4fa0b03a40a100b5f005b2d515" - integrity sha512-dznYMQAYMcQ4crFduIX5sST/Ex35l414hVCL6sXFi84OPuwG5eXgRBfBqbgz7mi3rC/r7VWDn2ADF8FTV/wbCw== - dependencies: - check-more-types "2.24.0" - debug "4.1.1" - disparity "2.0.0" - folktale "2.3.2" - lazy-ass "1.6.0" - strip-ansi "5.2.0" - variable-diff "1.1.0" - -snap-shot-store@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/snap-shot-store/-/snap-shot-store-1.2.3.tgz#4aab0b95ec24cb68eddf90b1c478617ded85f2d2" - integrity sha512-KLSUkdXvSfoPGPSo5Qk97jYEpME96WECOuIOpW91OGYt/fX2g2xOvXA35EJziI32PlDbRfi36JxzUcSsh59Ykw== - dependencies: - check-more-types "2.24.0" - debug "3.1.0" - folktale "2.0.1" - lazy-ass "1.6.0" - ramda "0.25.0" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -25937,7 +25629,7 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.14.1, sshpk@^1.7.0: +sshpk@^1.7.0: version "1.17.0" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== @@ -26301,13 +25993,6 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@5.2.0, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -26322,6 +26007,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -26512,7 +26204,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0, supports-color@^8.1.1: +supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -26916,11 +26608,6 @@ throttle-debounce@^3.0.1: resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== -throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= - through2-filter@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" @@ -27013,7 +26700,7 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@^0.2.1, tmp@~0.2.1: +tmp@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== @@ -27827,11 +27514,6 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - upath@^1.1.1, upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" @@ -28116,14 +27798,6 @@ values.js@^2.0.0: parse-css-color "0.2.0" pure-color "1.3.0" -variable-diff@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/variable-diff/-/variable-diff-1.1.0.tgz#d2bd5c66db76c13879d96e6a306edc989df978da" - integrity sha1-0r1cZtt2wTh52W5qMG7cmJ35eNo= - dependencies: - chalk "^1.1.1" - object-assign "^4.0.1" - vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -29391,14 +29065,6 @@ yargs@^7.1.0: y18n "^3.2.1" yargs-parser "^5.0.1" -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"