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
deleted file mode 100644
index a02fb2b..0000000
--- a/cypress/e2e/2-advanced-examples/aliasing.cy.js
+++ /dev/null
@@ -1,39 +0,0 @@
-///
-
-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
deleted file mode 100644
index 79e3d0e..0000000
--- a/cypress/e2e/2-advanced-examples/assertions.cy.js
+++ /dev/null
@@ -1,176 +0,0 @@
-///
-
-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
deleted file mode 100644
index ae87991..0000000
--- a/cypress/e2e/2-advanced-examples/connectors.cy.js
+++ /dev/null
@@ -1,97 +0,0 @@
-///
-
-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()
-
- // https://on.cypress.io/invoke
- cy.get('.connectors-div').should('be.hidden')
- // call the jquery method 'show' on the 'div.container'
- .invoke('show')
- .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
deleted file mode 100644
index 31587ff..0000000
--- a/cypress/e2e/2-advanced-examples/cookies.cy.js
+++ /dev/null
@@ -1,77 +0,0 @@
-///
-
-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', () => {
- // 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.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', () => {
- // 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')
- })
-})
diff --git a/cypress/e2e/2-advanced-examples/cypress_api.cy.js b/cypress/e2e/2-advanced-examples/cypress_api.cy.js
deleted file mode 100644
index 55dcead..0000000
--- a/cypress/e2e/2-advanced-examples/cypress_api.cy.js
+++ /dev/null
@@ -1,183 +0,0 @@
-///
-
-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)
- //! this assertion is disabled as our default configuration has a baseUrl
- // 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
deleted file mode 100644
index d449c75..0000000
--- a/cypress/e2e/2-advanced-examples/files.cy.js
+++ /dev/null
@@ -1,87 +0,0 @@
-///
-
-/// 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
deleted file mode 100644
index 299867d..0000000
--- a/cypress/e2e/2-advanced-examples/location.cy.js
+++ /dev/null
@@ -1,32 +0,0 @@
-///
-
-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
deleted file mode 100644
index 087d33c..0000000
--- a/cypress/e2e/2-advanced-examples/misc.cy.js
+++ /dev/null
@@ -1,104 +0,0 @@
-///
-
-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
deleted file mode 100644
index b85a468..0000000
--- a/cypress/e2e/2-advanced-examples/navigation.cy.js
+++ /dev/null
@@ -1,56 +0,0 @@
-///
-
-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
deleted file mode 100644
index 11213a0..0000000
--- a/cypress/e2e/2-advanced-examples/network_requests.cy.js
+++ /dev/null
@@ -1,163 +0,0 @@
-///
-
-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
deleted file mode 100644
index 0097048..0000000
--- a/cypress/e2e/2-advanced-examples/querying.cy.js
+++ /dev/null
@@ -1,114 +0,0 @@
-///
-
-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
deleted file mode 100644
index 72d8a21..0000000
--- a/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js
+++ /dev/null
@@ -1,203 +0,0 @@
-///
-// 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
deleted file mode 100644
index c138806..0000000
--- a/cypress/e2e/2-advanced-examples/storage.cy.js
+++ /dev/null
@@ -1,110 +0,0 @@
-///
-
-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
deleted file mode 100644
index 0a3b9d3..0000000
--- a/cypress/e2e/2-advanced-examples/traversal.cy.js
+++ /dev/null
@@ -1,121 +0,0 @@
-///
-
-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
deleted file mode 100644
index 14934c2..0000000
--- a/cypress/e2e/2-advanced-examples/utilities.cy.js
+++ /dev/null
@@ -1,108 +0,0 @@
-///
-
-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
deleted file mode 100644
index 95d3eb4..0000000
--- a/cypress/e2e/2-advanced-examples/viewport.cy.js
+++ /dev/null
@@ -1,59 +0,0 @@
-///
-
-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
deleted file mode 100644
index c8f0d7c..0000000
--- a/cypress/e2e/2-advanced-examples/waiting.cy.js
+++ /dev/null
@@ -1,31 +0,0 @@
-///
-
-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
deleted file mode 100644
index f94b649..0000000
--- a/cypress/e2e/2-advanced-examples/window.cy.js
+++ /dev/null
@@ -1,22 +0,0 @@
-///
-
-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/fixtures/example.json b/cypress/fixtures/example.json
deleted file mode 100644
index 02e4254..0000000
--- 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/fixtures/profile.json b/cypress/fixtures/profile.json
deleted file mode 100644
index b6c355c..0000000
--- a/cypress/fixtures/profile.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "id": 8739,
- "name": "Jane",
- "email": "jane@example.com"
-}
\ No newline at end of file
diff --git a/cypress/fixtures/users.json b/cypress/fixtures/users.json
deleted file mode 100644
index 79b699a..0000000
--- a/cypress/fixtures/users.json
+++ /dev/null
@@ -1,232 +0,0 @@
-[
- {
- "id": 1,
- "name": "Leanne Graham",
- "username": "Bret",
- "email": "Sincere@april.biz",
- "address": {
- "street": "Kulas Light",
- "suite": "Apt. 556",
- "city": "Gwenborough",
- "zipcode": "92998-3874",
- "geo": {
- "lat": "-37.3159",
- "lng": "81.1496"
- }
- },
- "phone": "1-770-736-8031 x56442",
- "website": "hildegard.org",
- "company": {
- "name": "Romaguera-Crona",
- "catchPhrase": "Multi-layered client-server neural-net",
- "bs": "harness real-time e-markets"
- }
- },
- {
- "id": 2,
- "name": "Ervin Howell",
- "username": "Antonette",
- "email": "Shanna@melissa.tv",
- "address": {
- "street": "Victor Plains",
- "suite": "Suite 879",
- "city": "Wisokyburgh",
- "zipcode": "90566-7771",
- "geo": {
- "lat": "-43.9509",
- "lng": "-34.4618"
- }
- },
- "phone": "010-692-6593 x09125",
- "website": "anastasia.net",
- "company": {
- "name": "Deckow-Crist",
- "catchPhrase": "Proactive didactic contingency",
- "bs": "synergize scalable supply-chains"
- }
- },
- {
- "id": 3,
- "name": "Clementine Bauch",
- "username": "Samantha",
- "email": "Nathan@yesenia.net",
- "address": {
- "street": "Douglas Extension",
- "suite": "Suite 847",
- "city": "McKenziehaven",
- "zipcode": "59590-4157",
- "geo": {
- "lat": "-68.6102",
- "lng": "-47.0653"
- }
- },
- "phone": "1-463-123-4447",
- "website": "ramiro.info",
- "company": {
- "name": "Romaguera-Jacobson",
- "catchPhrase": "Face to face bifurcated interface",
- "bs": "e-enable strategic applications"
- }
- },
- {
- "id": 4,
- "name": "Patricia Lebsack",
- "username": "Karianne",
- "email": "Julianne.OConner@kory.org",
- "address": {
- "street": "Hoeger Mall",
- "suite": "Apt. 692",
- "city": "South Elvis",
- "zipcode": "53919-4257",
- "geo": {
- "lat": "29.4572",
- "lng": "-164.2990"
- }
- },
- "phone": "493-170-9623 x156",
- "website": "kale.biz",
- "company": {
- "name": "Robel-Corkery",
- "catchPhrase": "Multi-tiered zero tolerance productivity",
- "bs": "transition cutting-edge web services"
- }
- },
- {
- "id": 5,
- "name": "Chelsey Dietrich",
- "username": "Kamren",
- "email": "Lucio_Hettinger@annie.ca",
- "address": {
- "street": "Skiles Walks",
- "suite": "Suite 351",
- "city": "Roscoeview",
- "zipcode": "33263",
- "geo": {
- "lat": "-31.8129",
- "lng": "62.5342"
- }
- },
- "phone": "(254)954-1289",
- "website": "demarco.info",
- "company": {
- "name": "Keebler LLC",
- "catchPhrase": "User-centric fault-tolerant solution",
- "bs": "revolutionize end-to-end systems"
- }
- },
- {
- "id": 6,
- "name": "Mrs. Dennis Schulist",
- "username": "Leopoldo_Corkery",
- "email": "Karley_Dach@jasper.info",
- "address": {
- "street": "Norberto Crossing",
- "suite": "Apt. 950",
- "city": "South Christy",
- "zipcode": "23505-1337",
- "geo": {
- "lat": "-71.4197",
- "lng": "71.7478"
- }
- },
- "phone": "1-477-935-8478 x6430",
- "website": "ola.org",
- "company": {
- "name": "Considine-Lockman",
- "catchPhrase": "Synchronised bottom-line interface",
- "bs": "e-enable innovative applications"
- }
- },
- {
- "id": 7,
- "name": "Kurtis Weissnat",
- "username": "Elwyn.Skiles",
- "email": "Telly.Hoeger@billy.biz",
- "address": {
- "street": "Rex Trail",
- "suite": "Suite 280",
- "city": "Howemouth",
- "zipcode": "58804-1099",
- "geo": {
- "lat": "24.8918",
- "lng": "21.8984"
- }
- },
- "phone": "210.067.6132",
- "website": "elvis.io",
- "company": {
- "name": "Johns Group",
- "catchPhrase": "Configurable multimedia task-force",
- "bs": "generate enterprise e-tailers"
- }
- },
- {
- "id": 8,
- "name": "Nicholas Runolfsdottir V",
- "username": "Maxime_Nienow",
- "email": "Sherwood@rosamond.me",
- "address": {
- "street": "Ellsworth Summit",
- "suite": "Suite 729",
- "city": "Aliyaview",
- "zipcode": "45169",
- "geo": {
- "lat": "-14.3990",
- "lng": "-120.7677"
- }
- },
- "phone": "586.493.6943 x140",
- "website": "jacynthe.com",
- "company": {
- "name": "Abernathy Group",
- "catchPhrase": "Implemented secondary concept",
- "bs": "e-enable extensible e-tailers"
- }
- },
- {
- "id": 9,
- "name": "Glenna Reichert",
- "username": "Delphine",
- "email": "Chaim_McDermott@dana.io",
- "address": {
- "street": "Dayna Park",
- "suite": "Suite 449",
- "city": "Bartholomebury",
- "zipcode": "76495-3109",
- "geo": {
- "lat": "24.6463",
- "lng": "-168.8889"
- }
- },
- "phone": "(775)976-6794 x41206",
- "website": "conrad.com",
- "company": {
- "name": "Yost and Sons",
- "catchPhrase": "Switchable contextually-based project",
- "bs": "aggregate real-time technologies"
- }
- },
- {
- "id": 10,
- "name": "Clementina DuBuque",
- "username": "Moriah.Stanton",
- "email": "Rey.Padberg@karina.biz",
- "address": {
- "street": "Kattie Turnpike",
- "suite": "Suite 198",
- "city": "Lebsackbury",
- "zipcode": "31428-2261",
- "geo": {
- "lat": "-38.2386",
- "lng": "57.2232"
- }
- },
- "phone": "024-648-3804",
- "website": "ambrose.net",
- "company": {
- "name": "Hoeger LLC",
- "catchPhrase": "Centralized empowering task-force",
- "bs": "target end-to-end models"
- }
- }
-]
\ No newline at end of file
diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts
deleted file mode 100644
index 698b01a..0000000
--- a/cypress/support/commands.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-///
-// ***********************************************
-// This example commands.ts 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) => { ... })
-//
-// declare global {
-// namespace Cypress {
-// interface Chainable {
-// login(email: string, password: string): Chainable
-// drag(subject: string, options?: Partial): Chainable
-// dismiss(subject: string, options?: Partial): Chainable
-// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable
-// }
-// }
-// }
\ No newline at end of file
diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts
deleted file mode 100644
index f80f74f..0000000
--- a/cypress/support/e2e.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-// ***********************************************************
-// This example support/e2e.ts 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')
\ No newline at end of file
diff --git a/e2e/basic-example.spec.ts b/e2e/basic-example.spec.ts
new file mode 100644
index 0000000..df7d4da
--- /dev/null
+++ b/e2e/basic-example.spec.ts
@@ -0,0 +1,15 @@
+import { test, expect } from '@playwright/test';
+
+test('checks title of the page ', async ({ page }) => {
+ await page.goto('http://localhost:3000/');
+
+ await expect(page).toHaveTitle('Welcome');
+});
+
+test('gets level 1 Heading', async ({ page }) => {
+ await page.goto('http://localhost:3000/');
+
+ await expect(page.getByRole('heading', { level: 1 })).toHaveText(
+ 'Welcome to Vizzuality Front End scaffold project.'
+ );
+});
diff --git a/e2e/demo-todo-app.spec.ts b/e2e/demo-todo-app.spec.ts
new file mode 100644
index 0000000..5e773a5
--- /dev/null
+++ b/e2e/demo-todo-app.spec.ts
@@ -0,0 +1,424 @@
+import { test, expect, type Page } from '@playwright/test';
+
+test.beforeEach(async ({ page }) => {
+ await page.goto('https://demo.playwright.dev/todomvc');
+});
+
+const TODO_ITEMS = ['buy some cheese', 'feed the cat', 'book a doctors appointment'];
+
+test.describe('New Todo', () => {
+ test('should allow me to add todo items', async ({ page }) => {
+ // create a new todo locator
+ const newTodo = page.getByPlaceholder('What needs to be done?');
+
+ // Create 1st todo.
+ await newTodo.fill(TODO_ITEMS[0]);
+ await newTodo.press('Enter');
+
+ // Make sure the list only has one todo item.
+ await expect(page.getByTestId('todo-title')).toHaveText([TODO_ITEMS[0]]);
+
+ // Create 2nd todo.
+ await newTodo.fill(TODO_ITEMS[1]);
+ await newTodo.press('Enter');
+
+ // Make sure the list now has two todo items.
+ await expect(page.getByTestId('todo-title')).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]);
+
+ await checkNumberOfTodosInLocalStorage(page, 2);
+ });
+
+ test('should clear text input field when an item is added', async ({ page }) => {
+ // create a new todo locator
+ const newTodo = page.getByPlaceholder('What needs to be done?');
+
+ // Create one todo item.
+ await newTodo.fill(TODO_ITEMS[0]);
+ await newTodo.press('Enter');
+
+ // Check that input is empty.
+ await expect(newTodo).toBeEmpty();
+ await checkNumberOfTodosInLocalStorage(page, 1);
+ });
+
+ test('should append new items to the bottom of the list', async ({ page }) => {
+ // Create 3 items.
+ await createDefaultTodos(page);
+
+ // create a todo count locator
+ const todoCount = page.getByTestId('todo-count');
+
+ // Check test using different methods.
+ await expect(page.getByText('3 items left')).toBeVisible();
+ await expect(todoCount).toHaveText('3 items left');
+ await expect(todoCount).toContainText('3');
+ await expect(todoCount).toHaveText(/3/);
+
+ // Check all items in one call.
+ await expect(page.getByTestId('todo-title')).toHaveText(TODO_ITEMS);
+ await checkNumberOfTodosInLocalStorage(page, 3);
+ });
+});
+
+test.describe('Mark all as completed', () => {
+ test.beforeEach(async ({ page }) => {
+ await createDefaultTodos(page);
+ await checkNumberOfTodosInLocalStorage(page, 3);
+ });
+
+ test.afterEach(async ({ page }) => {
+ await checkNumberOfTodosInLocalStorage(page, 3);
+ });
+
+ test('should allow me to mark all items as completed', async ({ page }) => {
+ // Complete all todos.
+ await page.getByLabel('Mark all as complete').check();
+
+ // Ensure all todos have 'completed' class.
+ await expect(page.getByTestId('todo-item')).toHaveClass([
+ 'completed',
+ 'completed',
+ 'completed',
+ ]);
+ await checkNumberOfCompletedTodosInLocalStorage(page, 3);
+ });
+
+ test('should allow me to clear the complete state of all items', async ({ page }) => {
+ const toggleAll = page.getByLabel('Mark all as complete');
+ // Check and then immediately uncheck.
+ await toggleAll.check();
+ await toggleAll.uncheck();
+
+ // Should be no completed classes.
+ await expect(page.getByTestId('todo-item')).toHaveClass(['', '', '']);
+ });
+
+ test('complete all checkbox should update state when items are completed / cleared', async ({
+ page,
+ }) => {
+ const toggleAll = page.getByLabel('Mark all as complete');
+ await toggleAll.check();
+ await expect(toggleAll).toBeChecked();
+ await checkNumberOfCompletedTodosInLocalStorage(page, 3);
+
+ // Uncheck first todo.
+ const firstTodo = page.getByTestId('todo-item').nth(0);
+ await firstTodo.getByRole('checkbox').uncheck();
+
+ // Reuse toggleAll locator and make sure its not checked.
+ await expect(toggleAll).not.toBeChecked();
+
+ await firstTodo.getByRole('checkbox').check();
+ await checkNumberOfCompletedTodosInLocalStorage(page, 3);
+
+ // Assert the toggle all is checked again.
+ await expect(toggleAll).toBeChecked();
+ });
+});
+
+test.describe('Item', () => {
+ test('should allow me to mark items as complete', async ({ page }) => {
+ // create a new todo locator
+ const newTodo = page.getByPlaceholder('What needs to be done?');
+
+ // Create two items.
+ for (const item of TODO_ITEMS.slice(0, 2)) {
+ await newTodo.fill(item);
+ await newTodo.press('Enter');
+ }
+
+ // Check first item.
+ const firstTodo = page.getByTestId('todo-item').nth(0);
+ await firstTodo.getByRole('checkbox').check();
+ await expect(firstTodo).toHaveClass('completed');
+
+ // Check second item.
+ const secondTodo = page.getByTestId('todo-item').nth(1);
+ await expect(secondTodo).not.toHaveClass('completed');
+ await secondTodo.getByRole('checkbox').check();
+
+ // Assert completed class.
+ await expect(firstTodo).toHaveClass('completed');
+ await expect(secondTodo).toHaveClass('completed');
+ });
+
+ test('should allow me to un-mark items as complete', async ({ page }) => {
+ // create a new todo locator
+ const newTodo = page.getByPlaceholder('What needs to be done?');
+
+ // Create two items.
+ for (const item of TODO_ITEMS.slice(0, 2)) {
+ await newTodo.fill(item);
+ await newTodo.press('Enter');
+ }
+
+ const firstTodo = page.getByTestId('todo-item').nth(0);
+ const secondTodo = page.getByTestId('todo-item').nth(1);
+ const firstTodoCheckbox = firstTodo.getByRole('checkbox');
+
+ await firstTodoCheckbox.check();
+ await expect(firstTodo).toHaveClass('completed');
+ await expect(secondTodo).not.toHaveClass('completed');
+ await checkNumberOfCompletedTodosInLocalStorage(page, 1);
+
+ await firstTodoCheckbox.uncheck();
+ await expect(firstTodo).not.toHaveClass('completed');
+ await expect(secondTodo).not.toHaveClass('completed');
+ await checkNumberOfCompletedTodosInLocalStorage(page, 0);
+ });
+
+ test('should allow me to edit an item', async ({ page }) => {
+ await createDefaultTodos(page);
+
+ const todoItems = page.getByTestId('todo-item');
+ const secondTodo = todoItems.nth(1);
+ await secondTodo.dblclick();
+ await expect(secondTodo.getByRole('textbox', { name: 'Edit' })).toHaveValue(TODO_ITEMS[1]);
+ await secondTodo.getByRole('textbox', { name: 'Edit' }).fill('buy some sausages');
+ await secondTodo.getByRole('textbox', { name: 'Edit' }).press('Enter');
+
+ // Explicitly assert the new text value.
+ await expect(todoItems).toHaveText([TODO_ITEMS[0], 'buy some sausages', TODO_ITEMS[2]]);
+ await checkTodosInLocalStorage(page, 'buy some sausages');
+ });
+});
+
+test.describe('Editing', () => {
+ test.beforeEach(async ({ page }) => {
+ await createDefaultTodos(page);
+ await checkNumberOfTodosInLocalStorage(page, 3);
+ });
+
+ test('should hide other controls when editing', async ({ page }) => {
+ const todoItem = page.getByTestId('todo-item').nth(1);
+ await todoItem.dblclick();
+ await expect(todoItem.getByRole('checkbox')).not.toBeVisible();
+ await expect(
+ todoItem.locator('label', {
+ hasText: TODO_ITEMS[1],
+ })
+ ).not.toBeVisible();
+ await checkNumberOfTodosInLocalStorage(page, 3);
+ });
+
+ test('should save edits on blur', async ({ page }) => {
+ const todoItems = page.getByTestId('todo-item');
+ await todoItems.nth(1).dblclick();
+ await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages');
+ await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).dispatchEvent('blur');
+
+ await expect(todoItems).toHaveText([TODO_ITEMS[0], 'buy some sausages', TODO_ITEMS[2]]);
+ await checkTodosInLocalStorage(page, 'buy some sausages');
+ });
+
+ test('should trim entered text', async ({ page }) => {
+ const todoItems = page.getByTestId('todo-item');
+ await todoItems.nth(1).dblclick();
+ await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill(' buy some sausages ');
+ await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter');
+
+ await expect(todoItems).toHaveText([TODO_ITEMS[0], 'buy some sausages', TODO_ITEMS[2]]);
+ await checkTodosInLocalStorage(page, 'buy some sausages');
+ });
+
+ test('should remove the item if an empty text string was entered', async ({ page }) => {
+ const todoItems = page.getByTestId('todo-item');
+ await todoItems.nth(1).dblclick();
+ await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('');
+ await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter');
+
+ await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]);
+ });
+
+ test('should cancel edits on escape', async ({ page }) => {
+ const todoItems = page.getByTestId('todo-item');
+ await todoItems.nth(1).dblclick();
+ await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages');
+ await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Escape');
+ await expect(todoItems).toHaveText(TODO_ITEMS);
+ });
+});
+
+test.describe('Counter', () => {
+ test('should display the current number of todo items', async ({ page }) => {
+ // create a new todo locator
+ const newTodo = page.getByPlaceholder('What needs to be done?');
+
+ // create a todo count locator
+ const todoCount = page.getByTestId('todo-count');
+
+ await newTodo.fill(TODO_ITEMS[0]);
+ await newTodo.press('Enter');
+
+ await expect(todoCount).toContainText('1');
+
+ await newTodo.fill(TODO_ITEMS[1]);
+ await newTodo.press('Enter');
+ await expect(todoCount).toContainText('2');
+
+ await checkNumberOfTodosInLocalStorage(page, 2);
+ });
+});
+
+test.describe('Clear completed button', () => {
+ test.beforeEach(async ({ page }) => {
+ await createDefaultTodos(page);
+ });
+
+ test('should display the correct text', async ({ page }) => {
+ await page.locator('.todo-list li .toggle').first().check();
+ await expect(page.getByRole('button', { name: 'Clear completed' })).toBeVisible();
+ });
+
+ test('should remove completed items when clicked', async ({ page }) => {
+ const todoItems = page.getByTestId('todo-item');
+ await todoItems.nth(1).getByRole('checkbox').check();
+ await page.getByRole('button', { name: 'Clear completed' }).click();
+ await expect(todoItems).toHaveCount(2);
+ await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]);
+ });
+
+ test('should be hidden when there are no items that are completed', async ({ page }) => {
+ await page.locator('.todo-list li .toggle').first().check();
+ await page.getByRole('button', { name: 'Clear completed' }).click();
+ await expect(page.getByRole('button', { name: 'Clear completed' })).toBeHidden();
+ });
+});
+
+test.describe('Persistence', () => {
+ test('should persist its data', async ({ page }) => {
+ // create a new todo locator
+ const newTodo = page.getByPlaceholder('What needs to be done?');
+
+ for (const item of TODO_ITEMS.slice(0, 2)) {
+ await newTodo.fill(item);
+ await newTodo.press('Enter');
+ }
+
+ const todoItems = page.getByTestId('todo-item');
+ const firstTodoCheck = todoItems.nth(0).getByRole('checkbox');
+ await firstTodoCheck.check();
+ await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]);
+ await expect(firstTodoCheck).toBeChecked();
+ await expect(todoItems).toHaveClass(['completed', '']);
+
+ // Ensure there is 1 completed item.
+ await checkNumberOfCompletedTodosInLocalStorage(page, 1);
+
+ // Now reload.
+ await page.reload();
+ await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]);
+ await expect(firstTodoCheck).toBeChecked();
+ await expect(todoItems).toHaveClass(['completed', '']);
+ });
+});
+
+test.describe('Routing', () => {
+ test.beforeEach(async ({ page }) => {
+ await createDefaultTodos(page);
+ // make sure the app had a chance to save updated todos in storage
+ // before navigating to a new view, otherwise the items can get lost :(
+ // in some frameworks like Durandal
+ await checkTodosInLocalStorage(page, TODO_ITEMS[0]);
+ });
+
+ test('should allow me to display active items', async ({ page }) => {
+ const todoItem = page.getByTestId('todo-item');
+ await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check();
+
+ await checkNumberOfCompletedTodosInLocalStorage(page, 1);
+ await page.getByRole('link', { name: 'Active' }).click();
+ await expect(todoItem).toHaveCount(2);
+ await expect(todoItem).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]);
+ });
+
+ test('should respect the back button', async ({ page }) => {
+ const todoItem = page.getByTestId('todo-item');
+ await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check();
+
+ await checkNumberOfCompletedTodosInLocalStorage(page, 1);
+
+ await test.step('Showing all items', async () => {
+ await page.getByRole('link', { name: 'All' }).click();
+ await expect(todoItem).toHaveCount(3);
+ });
+
+ await test.step('Showing active items', async () => {
+ await page.getByRole('link', { name: 'Active' }).click();
+ });
+
+ await test.step('Showing completed items', async () => {
+ await page.getByRole('link', { name: 'Completed' }).click();
+ });
+
+ await expect(todoItem).toHaveCount(1);
+ await page.goBack();
+ await expect(todoItem).toHaveCount(2);
+ await page.goBack();
+ await expect(todoItem).toHaveCount(3);
+ });
+
+ test('should allow me to display completed items', async ({ page }) => {
+ await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check();
+ await checkNumberOfCompletedTodosInLocalStorage(page, 1);
+ await page.getByRole('link', { name: 'Completed' }).click();
+ await expect(page.getByTestId('todo-item')).toHaveCount(1);
+ });
+
+ test('should allow me to display all items', async ({ page }) => {
+ await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check();
+ await checkNumberOfCompletedTodosInLocalStorage(page, 1);
+ await page.getByRole('link', { name: 'Active' }).click();
+ await page.getByRole('link', { name: 'Completed' }).click();
+ await page.getByRole('link', { name: 'All' }).click();
+ await expect(page.getByTestId('todo-item')).toHaveCount(3);
+ });
+
+ test('should highlight the currently applied filter', async ({ page }) => {
+ await expect(page.getByRole('link', { name: 'All' })).toHaveClass('selected');
+
+ //create locators for active and completed links
+ const activeLink = page.getByRole('link', { name: 'Active' });
+ const completedLink = page.getByRole('link', { name: 'Completed' });
+ await activeLink.click();
+
+ // Page change - active items.
+ await expect(activeLink).toHaveClass('selected');
+ await completedLink.click();
+
+ // Page change - completed items.
+ await expect(completedLink).toHaveClass('selected');
+ });
+});
+
+async function createDefaultTodos(page: Page) {
+ // create a new todo locator
+ const newTodo = page.getByPlaceholder('What needs to be done?');
+
+ for (const item of TODO_ITEMS) {
+ await newTodo.fill(item);
+ await newTodo.press('Enter');
+ }
+}
+
+async function checkNumberOfTodosInLocalStorage(page: Page, expected: number) {
+ return await page.waitForFunction((e) => {
+ return JSON.parse(localStorage['react-todos']).length === e;
+ }, expected);
+}
+
+async function checkNumberOfCompletedTodosInLocalStorage(page: Page, expected: number) {
+ return await page.waitForFunction((e) => {
+ return (
+ JSON.parse(localStorage['react-todos']).filter((todo: any) => todo.completed).length === e
+ );
+ }, expected);
+}
+
+async function checkTodosInLocalStorage(page: Page, title: string) {
+ return await page.waitForFunction((t) => {
+ return JSON.parse(localStorage['react-todos'])
+ .map((todo: any) => todo.title)
+ .includes(t);
+ }, title);
+}
diff --git a/package.json b/package.json
index e4f5542..c64c662 100644
--- a/package.json
+++ b/package.json
@@ -8,9 +8,8 @@
"build": "next build",
"start": "next start",
"check-types": "tsc",
- "test": "start-server-and-test 'yarn dev' 3000 'yarn cypress:run'",
- "cypress:open": "cypress open",
- "cypress:run": "cypress run",
+ "e2e:ui": "playwright test --ui",
+ "e2e": "playwright test",
"postinstall": "husky install"
},
"engines": {
@@ -48,6 +47,7 @@
"use-debounce": "9.0.4"
},
"devDependencies": {
+ "@playwright/test": "1.35.1",
"@types/google.analytics": "0.0.42",
"@types/node": "18.15.0",
"@types/react": "18.0.28",
@@ -55,7 +55,6 @@
"@typescript-eslint/eslint-plugin": "5.48.2",
"@typescript-eslint/parser": "^5.0.0",
"autoprefixer": "10.4.14",
- "cypress": "12.7.0",
"eslint": "8.32.0",
"eslint-config-next": "13.2.3",
"eslint-config-prettier": "8.6.0",
@@ -63,7 +62,6 @@
"husky": "6.0.0",
"prettier": "2.8.3",
"prettier-plugin-tailwindcss": "0.2.1",
- "start-server-and-test": "1.12.1",
"svg-sprite-loader": "6.0.11",
"svgo": "3.0.2",
"svgo-loader": "3.0.3",
diff --git a/playwright.config.ts b/playwright.config.ts
new file mode 100644
index 0000000..5a0556d
--- /dev/null
+++ b/playwright.config.ts
@@ -0,0 +1,82 @@
+import { defineConfig, devices } from '@playwright/test';
+
+/**
+ * Read environment variables from file.
+ * https://github.com/motdotla/dotenv
+ */
+// require('dotenv').config();
+
+/**
+ * See https://playwright.dev/docs/test-configuration.
+ */
+export default defineConfig({
+ testDir: './e2e',
+ outputDir: './e2e/test-results',
+ webServer: {
+ command: 'yarn dev',
+ url: 'http://localhost:3000',
+ },
+ /* 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: {
+ /* Base URL to use in actions like `await page.goto('/')`. */
+ // baseURL: 'http://127.0.0.1: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: { ...devices['Desktop Edge'], channel: 'msedge' },
+ // },
+ // {
+ // name: 'Google Chrome',
+ // use: { ..devices['Desktop Chrome'], channel: 'chrome' },
+ // },
+ ],
+
+ /* Run your local dev server before starting the tests */
+ // webServer: {
+ // command: 'npm run start',
+ // url: 'http://127.0.0.1:3000',
+ // reuseExistingServer: !process.env.CI,
+ // },
+});
diff --git a/src/pages/docs/tests.mdx b/src/pages/docs/tests.mdx
index b691d15..1a49cd7 100644
--- a/src/pages/docs/tests.mdx
+++ b/src/pages/docs/tests.mdx
@@ -2,9 +2,9 @@ import DocsLayout from 'layouts/docs'
# Tests
-- [Cypress](https://www.cypress.io/) Cypress is a next generation front end testing tool built for the modern web. We use it for end-to-end testing of our applications.
+- [Playwright](https://playwright.dev/docs/intro) Playwright enables reliable end-to-end testing for modern web apps.
-export default ({ children }) => {children}
\ No newline at end of file
+export default ({ children }) => {children}
diff --git a/tsconfig.json b/tsconfig.json
index 7f497bd..6b5d4a1 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -18,5 +18,5 @@
"paths": { "@/*": ["./*"] }
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.d.ts"],
- "exclude": ["node_modules", "cypress"]
+ "exclude": ["node_modules"]
}
diff --git a/yarn.lock b/yarn.lock
index 9948dc6..c745e68 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -41,49 +41,6 @@ __metadata:
languageName: node
linkType: hard
-"@colors/colors@npm:1.5.0":
- version: 1.5.0
- resolution: "@colors/colors@npm:1.5.0"
- checksum: d64d5260bed1d5012ae3fc617d38d1afc0329fec05342f4e6b838f46998855ba56e0a73833f4a80fa8378c84810da254f76a8a19c39d038260dc06dc4e007425
- languageName: node
- linkType: hard
-
-"@cypress/request@npm:^2.88.10":
- version: 2.88.11
- resolution: "@cypress/request@npm:2.88.11"
- 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: ~2.5.0
- tunnel-agent: ^0.6.0
- uuid: ^8.3.2
- checksum: e4b3f62e0c41c4ccca6c942828461d8ea717e752fd918d685e9f74e2ebcfa8b7942427f7ce971e502635c3bf3d40011476db84dc753d3dc360c6d08350da6f93
- languageName: node
- linkType: hard
-
-"@cypress/xvfb@npm:^1.2.4":
- version: 1.2.4
- resolution: "@cypress/xvfb@npm:1.2.4"
- dependencies:
- debug: ^3.1.0
- lodash.once: ^4.1.1
- checksum: 7bdcdaeb1bb692ec9d9bf8ec52538aa0bead6764753f4a067a171a511807a43fab016f7285a56bef6a606c2467ff3f1365e1ad2d2d583b81beed849ee1573fd1
- languageName: node
- linkType: hard
-
"@dnd-kit/accessibility@npm:^3.0.0":
version: 3.0.1
resolution: "@dnd-kit/accessibility@npm:3.0.1"
@@ -244,22 +201,6 @@ __metadata:
languageName: node
linkType: hard
-"@hapi/hoek@npm:^9.0.0":
- version: 9.3.0
- resolution: "@hapi/hoek@npm:9.3.0"
- checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43
- languageName: node
- linkType: hard
-
-"@hapi/topo@npm:^5.0.0":
- version: 5.1.0
- resolution: "@hapi/topo@npm:5.1.0"
- dependencies:
- "@hapi/hoek": ^9.0.0
- checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014
- languageName: node
- linkType: hard
-
"@humanwhocodes/config-array@npm:^0.11.8":
version: 0.11.10
resolution: "@humanwhocodes/config-array@npm:0.11.10"
@@ -592,6 +533,22 @@ __metadata:
languageName: node
linkType: hard
+"@playwright/test@npm:1.35.1":
+ version: 1.35.1
+ resolution: "@playwright/test@npm:1.35.1"
+ dependencies:
+ "@types/node": "*"
+ fsevents: 2.3.2
+ playwright-core: 1.35.1
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ bin:
+ playwright: cli.js
+ checksum: 3509d2f2c7397f9b0d4f49088cab8625f17d186f7e9b3389ddebf7c52ee8aae6407eab48f66b300b7bf6a33f6e3533fd5951e72bfdb001b68838af98596d5a53
+ languageName: node
+ linkType: hard
+
"@radix-ui/react-compose-refs@npm:1.0.1":
version: 1.0.1
resolution: "@radix-ui/react-compose-refs@npm:1.0.1"
@@ -630,29 +587,6 @@ __metadata:
languageName: node
linkType: hard
-"@sideway/address@npm:^4.1.3":
- version: 4.1.4
- resolution: "@sideway/address@npm:4.1.4"
- dependencies:
- "@hapi/hoek": ^9.0.0
- checksum: b9fca2a93ac2c975ba12e0a6d97853832fb1f4fb02393015e012b47fa916a75ca95102d77214b2a29a2784740df2407951af8c5dde054824c65577fd293c4cdb
- languageName: node
- linkType: hard
-
-"@sideway/formula@npm:^3.0.1":
- version: 3.0.1
- resolution: "@sideway/formula@npm:3.0.1"
- checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a
- languageName: node
- linkType: hard
-
-"@sideway/pinpoint@npm:^2.0.0":
- version: 2.0.0
- resolution: "@sideway/pinpoint@npm:2.0.0"
- checksum: 0f4491e5897fcf5bf02c46f5c359c56a314e90ba243f42f0c100437935daa2488f20482f0f77186bd6bf43345095a95d8143ecf8b1f4d876a7bc0806aba9c3d2
- languageName: node
- linkType: hard
-
"@swc/helpers@npm:0.4.14":
version: 0.4.14
resolution: "@swc/helpers@npm:0.4.14"
@@ -871,13 +805,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/node@npm:^14.14.31":
- version: 14.18.51
- resolution: "@types/node@npm:14.18.51"
- checksum: 0960a31d2ac605763fe79c8edcee3cb48257d345ce417c019d84ff5d8cd92dd0937674814ab3f169346b4259c29f640556006bcb2c54cfb3e63fa0cf728d320e
- languageName: node
- linkType: hard
-
"@types/pbf@npm:*, @types/pbf@npm:^3.0.2":
version: 3.0.2
resolution: "@types/pbf@npm:3.0.2"
@@ -937,20 +864,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/sinonjs__fake-timers@npm:8.1.1":
- version: 8.1.1
- resolution: "@types/sinonjs__fake-timers@npm:8.1.1"
- checksum: ca09d54d47091d87020824a73f026300fa06b17cd9f2f9b9387f28b549364b141ef194ee28db762f6588de71d8febcd17f753163cb7ea116b8387c18e80ebd5c
- languageName: node
- linkType: hard
-
-"@types/sizzle@npm:^2.3.2":
- version: 2.3.3
- resolution: "@types/sizzle@npm:2.3.3"
- checksum: 586a9fb1f6ff3e325e0f2cc1596a460615f0bc8a28f6e276ac9b509401039dd242fa8b34496d3a30c52f5b495873922d09a9e76c50c2ab2bcc70ba3fb9c4e160
- languageName: node
- linkType: hard
-
"@types/unist@npm:*, @types/unist@npm:^2.0.0":
version: 2.0.6
resolution: "@types/unist@npm:2.0.6"
@@ -958,15 +871,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/yauzl@npm:^2.9.1":
- version: 2.10.0
- resolution: "@types/yauzl@npm:2.10.0"
- dependencies:
- "@types/node": "*"
- checksum: 55d27ae5d346ea260e40121675c24e112ef0247649073848e5d4e03182713ae4ec8142b98f61a1c6cbe7d3b72fa99bbadb65d8b01873e5e605cdc30f1ff70ef2
- languageName: node
- linkType: hard
-
"@typescript-eslint/eslint-plugin@npm:5.48.2":
version: 5.48.2
resolution: "@typescript-eslint/eslint-plugin@npm:5.48.2"
@@ -1226,22 +1130,6 @@ __metadata:
languageName: node
linkType: hard
-"ansi-colors@npm:^4.1.1":
- version: 4.1.3
- resolution: "ansi-colors@npm:4.1.3"
- checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e
- languageName: node
- linkType: hard
-
-"ansi-escapes@npm:^4.3.0":
- version: 4.3.2
- resolution: "ansi-escapes@npm:4.3.2"
- dependencies:
- type-fest: ^0.21.3
- checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815
- languageName: node
- linkType: hard
-
"ansi-regex@npm:^2.0.0":
version: 2.1.1
resolution: "ansi-regex@npm:2.1.1"
@@ -1303,13 +1191,6 @@ __metadata:
languageName: node
linkType: hard
-"arch@npm:^2.2.0":
- version: 2.2.0
- resolution: "arch@npm:2.2.0"
- checksum: e21b7635029fe8e9cdd5a026f9a6c659103e63fff423834323cdf836a1bb240a72d0c39ca8c470f84643385cf581bd8eda2cad8bf493e27e54bd9783abe9101f
- languageName: node
- linkType: hard
-
"are-we-there-yet@npm:^3.0.0":
version: 3.0.1
resolution: "are-we-there-yet@npm:3.0.1"
@@ -1438,22 +1319,6 @@ __metadata:
languageName: node
linkType: hard
-"asn1@npm:~0.2.3":
- version: 0.2.6
- resolution: "asn1@npm:0.2.6"
- dependencies:
- safer-buffer: ~2.1.0
- checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d
- languageName: node
- linkType: hard
-
-"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0":
- version: 1.0.0
- resolution: "assert-plus@npm:1.0.0"
- checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64
- languageName: node
- linkType: hard
-
"assign-symbols@npm:^1.0.0":
version: 1.0.0
resolution: "assign-symbols@npm:1.0.0"
@@ -1468,13 +1333,6 @@ __metadata:
languageName: node
linkType: hard
-"astral-regex@npm:^2.0.0":
- version: 2.0.0
- resolution: "astral-regex@npm:2.0.0"
- checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766
- languageName: node
- linkType: hard
-
"astring@npm:^1.8.0":
version: 1.8.6
resolution: "astring@npm:1.8.6"
@@ -1484,13 +1342,6 @@ __metadata:
languageName: node
linkType: hard
-"async@npm:^3.2.0":
- version: 3.2.4
- resolution: "async@npm:3.2.4"
- checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89
- languageName: node
- linkType: hard
-
"asynckit@npm:^0.4.0":
version: 0.4.0
resolution: "asynckit@npm:0.4.0"
@@ -1498,13 +1349,6 @@ __metadata:
languageName: node
linkType: hard
-"at-least-node@npm:^1.0.0":
- version: 1.0.0
- resolution: "at-least-node@npm:1.0.0"
- checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e
- languageName: node
- linkType: hard
-
"atob@npm:^2.1.2":
version: 2.1.2
resolution: "atob@npm:2.1.2"
@@ -1539,20 +1383,6 @@ __metadata:
languageName: node
linkType: hard
-"aws-sign2@npm:~0.7.0":
- version: 0.7.0
- resolution: "aws-sign2@npm:0.7.0"
- checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525
- languageName: node
- linkType: hard
-
-"aws4@npm:^1.8.0":
- version: 1.12.0
- resolution: "aws4@npm:1.12.0"
- checksum: 68f79708ac7c335992730bf638286a3ee0a645cf12575d557860100767c500c08b30e24726b9f03265d74116417f628af78509e1333575e9f8d52a80edfe8cbc
- languageName: node
- linkType: hard
-
"axe-core@npm:^4.6.2":
version: 4.7.2
resolution: "axe-core@npm:4.7.2"
@@ -1571,15 +1401,6 @@ __metadata:
languageName: node
linkType: hard
-"axios@npm:^0.21.1":
- version: 0.21.4
- resolution: "axios@npm:0.21.4"
- dependencies:
- follow-redirects: ^1.14.0
- checksum: 44245f24ac971e7458f3120c92f9d66d1fc695e8b97019139de5b0cc65d9b8104647db01e5f46917728edfc0cfd88eb30fc4c55e6053eef4ace76768ce95ff3c
- languageName: node
- linkType: hard
-
"axobject-query@npm:^3.1.1":
version: 3.2.1
resolution: "axobject-query@npm:3.2.1"
@@ -1603,13 +1424,6 @@ __metadata:
languageName: node
linkType: hard
-"base64-js@npm:^1.3.1":
- version: 1.5.1
- resolution: "base64-js@npm:1.5.1"
- checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005
- languageName: node
- linkType: hard
-
"base@npm:^0.11.1":
version: 0.11.2
resolution: "base@npm:0.11.2"
@@ -1625,15 +1439,6 @@ __metadata:
languageName: node
linkType: hard
-"bcrypt-pbkdf@npm:^1.0.0":
- version: 1.0.2
- resolution: "bcrypt-pbkdf@npm:1.0.2"
- dependencies:
- tweetnacl: ^0.14.3
- checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291
- languageName: node
- linkType: hard
-
"big-integer@npm:^1.6.44":
version: 1.6.51
resolution: "big-integer@npm:1.6.51"
@@ -1655,14 +1460,7 @@ __metadata:
languageName: node
linkType: hard
-"blob-util@npm:^2.0.2":
- version: 2.0.2
- resolution: "blob-util@npm:2.0.2"
- checksum: d543e6b92e4ca715ca33c78e89a07a2290d43e5b2bc897d7ec588c5c7bbf59df93e45225ac0c9258aa6ce4320358990f99c9288f1c48280f8ec5d7a2e088d19b
- languageName: node
- linkType: hard
-
-"bluebird@npm:3.7.2, bluebird@npm:^3.5.0, bluebird@npm:^3.7.2":
+"bluebird@npm:^3.5.0":
version: 3.7.2
resolution: "bluebird@npm:3.7.2"
checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef
@@ -1745,23 +1543,6 @@ __metadata:
languageName: node
linkType: hard
-"buffer-crc32@npm:~0.2.3":
- version: 0.2.13
- resolution: "buffer-crc32@npm:0.2.13"
- checksum: 06252347ae6daca3453b94e4b2f1d3754a3b146a111d81c68924c22d91889a40623264e95e67955b1cb4a68cbedf317abeabb5140a9766ed248973096db5ce1c
- languageName: node
- linkType: hard
-
-"buffer@npm:^5.6.0":
- version: 5.7.1
- resolution: "buffer@npm:5.7.1"
- dependencies:
- base64-js: ^1.3.1
- ieee754: ^1.1.13
- checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84
- languageName: node
- linkType: hard
-
"bundle-name@npm:^3.0.0":
version: 3.0.0
resolution: "bundle-name@npm:3.0.0"
@@ -1808,13 +1589,6 @@ __metadata:
languageName: node
linkType: hard
-"cachedir@npm:^2.3.0":
- version: 2.3.0
- resolution: "cachedir@npm:2.3.0"
- checksum: ec90cb0f2e6336e266aa748dbadf3da9e0b20e843e43f1591acab7a3f1451337dc2f26cb9dd833ae8cfefeffeeb43ef5b5ff62782a685f4e3c2305dd98482fcb
- languageName: node
- linkType: hard
-
"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2":
version: 1.0.2
resolution: "call-bind@npm:1.0.2"
@@ -1846,13 +1620,6 @@ __metadata:
languageName: node
linkType: hard
-"caseless@npm:~0.12.0":
- version: 0.12.0
- resolution: "caseless@npm:0.12.0"
- checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751
- languageName: node
- linkType: hard
-
"ccount@npm:^2.0.0":
version: 2.0.1
resolution: "ccount@npm:2.0.1"
@@ -1873,7 +1640,7 @@ __metadata:
languageName: node
linkType: hard
-"chalk@npm:^4.0.0, chalk@npm:^4.1.0":
+"chalk@npm:^4.0.0":
version: 4.1.2
resolution: "chalk@npm:4.1.2"
dependencies:
@@ -1911,13 +1678,6 @@ __metadata:
languageName: node
linkType: hard
-"check-more-types@npm:2.24.0, check-more-types@npm:^2.24.0":
- version: 2.24.0
- resolution: "check-more-types@npm:2.24.0"
- checksum: b09080ec3404d20a4b0ead828994b2e5913236ef44ed3033a27062af0004cf7d2091fbde4b396bf13b7ce02fb018bc9960b48305e6ab2304cd82d73ed7a51ef4
- languageName: node
- linkType: hard
-
"chokidar@npm:^3.5.3":
version: 3.5.3
resolution: "chokidar@npm:3.5.3"
@@ -1944,13 +1704,6 @@ __metadata:
languageName: node
linkType: hard
-"ci-info@npm:^3.2.0":
- version: 3.8.0
- resolution: "ci-info@npm:3.8.0"
- checksum: d0a4d3160497cae54294974a7246202244fff031b0a6ea20dd57b10ec510aa17399c41a1b0982142c105f3255aff2173e5c0dd7302ee1b2f28ba3debda375098
- languageName: node
- linkType: hard
-
"class-utils@npm:^0.3.5":
version: 0.3.6
resolution: "class-utils@npm:0.3.6"
@@ -1984,38 +1737,6 @@ __metadata:
languageName: node
linkType: hard
-"cli-cursor@npm:^3.1.0":
- version: 3.1.0
- resolution: "cli-cursor@npm:3.1.0"
- dependencies:
- restore-cursor: ^3.1.0
- checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29
- languageName: node
- linkType: hard
-
-"cli-table3@npm:~0.6.1":
- version: 0.6.3
- resolution: "cli-table3@npm:0.6.3"
- dependencies:
- "@colors/colors": 1.5.0
- string-width: ^4.2.0
- dependenciesMeta:
- "@colors/colors":
- optional: true
- checksum: 09897f68467973f827c04e7eaadf13b55f8aec49ecd6647cc276386ea660059322e2dd8020a8b6b84d422dbdd619597046fa89cbbbdc95b2cea149a2df7c096c
- languageName: node
- linkType: hard
-
-"cli-truncate@npm:^2.1.0":
- version: 2.1.0
- resolution: "cli-truncate@npm:2.1.0"
- dependencies:
- slice-ansi: ^3.0.0
- string-width: ^4.2.0
- checksum: bf1e4e6195392dc718bf9cd71f317b6300dc4a9191d052f31046b8773230ece4fa09458813bf0e3455a5e68c0690d2ea2c197d14a8b85a7b5e01c97f4b5feb5d
- languageName: node
- linkType: hard
-
"client-only@npm:0.0.1":
version: 0.0.1
resolution: "client-only@npm:0.0.1"
@@ -2072,14 +1793,7 @@ __metadata:
languageName: node
linkType: hard
-"colorette@npm:^2.0.16":
- version: 2.0.20
- resolution: "colorette@npm:2.0.20"
- checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d
- languageName: node
- linkType: hard
-
-"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6":
+"combined-stream@npm:^1.0.8":
version: 1.0.8
resolution: "combined-stream@npm:1.0.8"
dependencies:
@@ -2095,13 +1809,6 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:^5.1.0":
- version: 5.1.0
- resolution: "commander@npm:5.1.0"
- checksum: 0b7fec1712fbcc6230fcb161d8d73b4730fa91a21dc089515489402ad78810547683f058e2a9835929c212fead1d6a6ade70db28bbb03edbc2829a9ab7d69447
- languageName: node
- linkType: hard
-
"commander@npm:^7.2.0":
version: 7.2.0
resolution: "commander@npm:7.2.0"
@@ -2109,13 +1816,6 @@ __metadata:
languageName: node
linkType: hard
-"common-tags@npm:^1.8.0":
- version: 1.8.2
- resolution: "common-tags@npm:1.8.2"
- checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff
- languageName: node
- linkType: hard
-
"component-emitter@npm:^1.2.1":
version: 1.3.0
resolution: "component-emitter@npm:1.3.0"
@@ -2144,13 +1844,6 @@ __metadata:
languageName: node
linkType: hard
-"core-util-is@npm:1.0.2":
- version: 1.0.2
- resolution: "core-util-is@npm:1.0.2"
- checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab
- languageName: node
- linkType: hard
-
"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3":
version: 7.0.3
resolution: "cross-spawn@npm:7.0.3"
@@ -2266,58 +1959,6 @@ __metadata:
languageName: node
linkType: hard
-"cypress@npm:12.7.0":
- version: 12.7.0
- resolution: "cypress@npm:12.7.0"
- 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.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.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
- bin:
- cypress: bin/cypress
- checksum: a9489f7f254dcee1b8a374d14d175c8f8681a3388e4c02181e0486f064f4de59bfc79dec1f401605332d3a5869bf2ba06b3a1653a5c287e447810d756d470078
- languageName: node
- linkType: hard
-
"damerau-levenshtein@npm:^1.0.8":
version: 1.0.8
resolution: "damerau-levenshtein@npm:1.0.8"
@@ -2325,22 +1966,6 @@ __metadata:
languageName: node
linkType: hard
-"dashdash@npm:^1.12.0":
- version: 1.14.1
- resolution: "dashdash@npm:1.14.1"
- dependencies:
- assert-plus: ^1.0.0
- checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598
- languageName: node
- linkType: hard
-
-"dayjs@npm:^1.10.4":
- version: 1.11.8
- resolution: "dayjs@npm:1.11.8"
- checksum: 4fe04b6df98ba6e5f89b49d80bba603cbf01e21a1b4a24ecb163c94c0ba5324a32ac234a139cee654f89d5277a2bcebca5347e6676c28a0a6d1a90f1d34a42b8
- languageName: node
- linkType: hard
-
"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4":
version: 4.3.4
resolution: "debug@npm:4.3.4"
@@ -2353,18 +1978,6 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4.3.1":
- version: 4.3.1
- resolution: "debug@npm:4.3.1"
- dependencies:
- ms: 2.1.2
- peerDependenciesMeta:
- supports-color:
- optional: true
- checksum: 2c3352e37d5c46b0d203317cd45ea0e26b2c99f2d9dfec8b128e6ceba90dfb65425f5331bf3020fe9929d7da8c16758e737f4f3bfc0fce6b8b3d503bae03298b
- languageName: node
- linkType: hard
-
"debug@npm:^2.2.0, debug@npm:^2.3.3":
version: 2.6.9
resolution: "debug@npm:2.6.9"
@@ -2374,7 +1987,7 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:^3.1.0, debug@npm:^3.2.7":
+"debug@npm:^3.2.7":
version: 3.2.7
resolution: "debug@npm:3.2.7"
dependencies:
@@ -2688,13 +2301,6 @@ __metadata:
languageName: node
linkType: hard
-"duplexer@npm:~0.1.1":
- version: 0.1.2
- resolution: "duplexer@npm:0.1.2"
- checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0
- languageName: node
- linkType: hard
-
"earcut@npm:^2.2.3":
version: 2.2.4
resolution: "earcut@npm:2.2.4"
@@ -2709,16 +2315,6 @@ __metadata:
languageName: node
linkType: hard
-"ecc-jsbn@npm:~0.1.1":
- version: 0.1.2
- resolution: "ecc-jsbn@npm:0.1.2"
- dependencies:
- jsbn: ~0.1.0
- safer-buffer: ^2.1.0
- checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a
- languageName: node
- linkType: hard
-
"electron-to-chromium@npm:^1.4.428":
version: 1.4.428
resolution: "electron-to-chromium@npm:1.4.428"
@@ -2756,15 +2352,6 @@ __metadata:
languageName: node
linkType: hard
-"end-of-stream@npm:^1.1.0":
- version: 1.4.4
- resolution: "end-of-stream@npm:1.4.4"
- dependencies:
- once: ^1.4.0
- checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b
- languageName: node
- linkType: hard
-
"enhanced-resolve@npm:^5.12.0":
version: 5.14.1
resolution: "enhanced-resolve@npm:5.14.1"
@@ -2775,15 +2362,6 @@ __metadata:
languageName: node
linkType: hard
-"enquirer@npm:^2.3.6":
- version: 2.3.6
- resolution: "enquirer@npm:2.3.6"
- dependencies:
- ansi-colors: ^4.1.1
- checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884
- languageName: node
- linkType: hard
-
"entities@npm:^1.1.1":
version: 1.1.2
resolution: "entities@npm:1.1.2"
@@ -2899,7 +2477,7 @@ __metadata:
languageName: node
linkType: hard
-"escape-string-regexp@npm:1.0.5, escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5":
+"escape-string-regexp@npm:1.0.5, escape-string-regexp@npm:^1.0.2":
version: 1.0.5
resolution: "escape-string-regexp@npm:1.0.5"
checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410
@@ -3290,63 +2868,6 @@ __metadata:
languageName: node
linkType: hard
-"event-stream@npm:=3.3.4":
- version: 3.3.4
- resolution: "event-stream@npm:3.3.4"
- dependencies:
- duplexer: ~0.1.1
- from: ~0
- map-stream: ~0.1.0
- pause-stream: 0.0.11
- split: 0.3
- stream-combiner: ~0.0.4
- through: ~2.3.1
- checksum: 80b467820b6daf824d9fb4345d2daf115a056e5c104463f2e98534e92d196a27f2df5ea2aa085624db26f4c45698905499e881d13bc7c01f7a13eac85be72a22
- languageName: node
- linkType: hard
-
-"eventemitter2@npm:6.4.7":
- version: 6.4.7
- resolution: "eventemitter2@npm:6.4.7"
- checksum: 1b36a77e139d6965ebf3a36c01fa00c089ae6b80faa1911e52888f40b3a7057b36a2cc45dcd1ad87cda3798fe7b97a0aabcbb8175a8b96092a23bb7d0f039e66
- languageName: node
- linkType: hard
-
-"execa@npm:3.4.0":
- version: 3.4.0
- resolution: "execa@npm:3.4.0"
- 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
- p-finally: ^2.0.0
- signal-exit: ^3.0.2
- strip-final-newline: ^2.0.0
- checksum: 72832ff72f79f9082dc3567775cbb52f4682452f7d8015714d924e476a37c36a98183fd669317327ed2e7800ffe7ec2a7be4bfe704a2173ef22ae00109fe9123
- languageName: node
- linkType: hard
-
-"execa@npm:4.1.0":
- version: 4.1.0
- resolution: "execa@npm:4.1.0"
- 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
- checksum: e30d298934d9c52f90f3847704fd8224e849a081ab2b517bbc02f5f7732c24e56a21f14cb96a08256deffeb2d12b2b7cb7e2b014a12fb36f8d3357e06417ed55
- languageName: node
- linkType: hard
-
"execa@npm:^5.0.0":
version: 5.1.1
resolution: "execa@npm:5.1.1"
@@ -3381,15 +2902,6 @@ __metadata:
languageName: node
linkType: hard
-"executable@npm:^4.1.1":
- version: 4.1.1
- resolution: "executable@npm:4.1.1"
- dependencies:
- pify: ^2.2.0
- checksum: f01927ce59bccec804e171bf859a26e362c1f50aa9ebc69f7cafdcce3859d29d4b6267fd47237c18b0a1830614bd3f0ee14b7380d9bad18a4e7af9b5f0b6984f
- languageName: node
- linkType: hard
-
"expand-brackets@npm:^2.1.4":
version: 2.1.4
resolution: "expand-brackets@npm:2.1.4"
@@ -3431,7 +2943,7 @@ __metadata:
languageName: node
linkType: hard
-"extend@npm:^3.0.0, extend@npm:~3.0.2":
+"extend@npm:^3.0.0":
version: 3.0.2
resolution: "extend@npm:3.0.2"
checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515
@@ -3454,37 +2966,6 @@ __metadata:
languageName: node
linkType: hard
-"extract-zip@npm:2.0.1":
- version: 2.0.1
- resolution: "extract-zip@npm:2.0.1"
- dependencies:
- "@types/yauzl": ^2.9.1
- debug: ^4.1.1
- get-stream: ^5.1.0
- yauzl: ^2.10.0
- dependenciesMeta:
- "@types/yauzl":
- optional: true
- bin:
- extract-zip: cli.js
- checksum: 8cbda9debdd6d6980819cc69734d874ddd71051c9fe5bde1ef307ebcedfe949ba57b004894b585f758b7c9eeeea0e3d87f2dda89b7d25320459c2c9643ebb635
- languageName: node
- linkType: hard
-
-"extsprintf@npm:1.3.0":
- version: 1.3.0
- resolution: "extsprintf@npm:1.3.0"
- checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2
- languageName: node
- linkType: hard
-
-"extsprintf@npm:^1.2.0":
- version: 1.4.1
- resolution: "extsprintf@npm:1.4.1"
- checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33
- languageName: node
- linkType: hard
-
"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3":
version: 3.1.3
resolution: "fast-deep-equal@npm:3.1.3"
@@ -3535,24 +3016,6 @@ __metadata:
languageName: node
linkType: hard
-"fd-slicer@npm:~1.1.0":
- version: 1.1.0
- resolution: "fd-slicer@npm:1.1.0"
- dependencies:
- pend: ~1.2.0
- checksum: c8585fd5713f4476eb8261150900d2cb7f6ff2d87f8feb306ccc8a1122efd152f1783bdb2b8dc891395744583436bfd8081d8e63ece0ec8687eeefea394d4ff2
- languageName: node
- linkType: hard
-
-"figures@npm:^3.2.0":
- version: 3.2.0
- resolution: "figures@npm:3.2.0"
- dependencies:
- escape-string-regexp: ^1.0.5
- checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b
- languageName: node
- linkType: hard
-
"file-entry-cache@npm:^6.0.1":
version: 6.0.1
resolution: "file-entry-cache@npm:6.0.1"
@@ -3610,7 +3073,7 @@ __metadata:
languageName: node
linkType: hard
-"follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.15.0":
+"follow-redirects@npm:^1.15.0":
version: 1.15.2
resolution: "follow-redirects@npm:1.15.2"
peerDependenciesMeta:
@@ -3646,13 +3109,6 @@ __metadata:
languageName: node
linkType: hard
-"forever-agent@npm:~0.6.1":
- version: 0.6.1
- resolution: "forever-agent@npm:0.6.1"
- checksum: 766ae6e220f5fe23676bb4c6a99387cec5b7b62ceb99e10923376e27bfea72f3c3aeec2ba5f45f3f7ba65d6616965aa7c20b15002b6860833bb6e394dea546a8
- languageName: node
- linkType: hard
-
"form-data@npm:^4.0.0":
version: 4.0.0
resolution: "form-data@npm:4.0.0"
@@ -3664,17 +3120,6 @@ __metadata:
languageName: node
linkType: hard
-"form-data@npm:~2.3.2":
- version: 2.3.3
- resolution: "form-data@npm:2.3.3"
- dependencies:
- asynckit: ^0.4.0
- combined-stream: ^1.0.6
- mime-types: ^2.1.12
- checksum: 10c1780fa13dbe1ff3100114c2ce1f9307f8be10b14bf16e103815356ff567b6be39d70fc4a40f8990b9660012dc24b0f5e1dde1b6426166eb23a445ba068ca3
- languageName: node
- linkType: hard
-
"fraction.js@npm:^4.2.0":
version: 4.2.0
resolution: "fraction.js@npm:4.2.0"
@@ -3712,13 +3157,6 @@ __metadata:
languageName: node
linkType: hard
-"from@npm:~0":
- version: 0.1.7
- resolution: "from@npm:0.1.7"
- checksum: b85125b7890489656eb2e4f208f7654a93ec26e3aefaf3bbbcc0d496fc1941e4405834fcc9fe7333192aa2187905510ace70417bbf9ac6f6f4784a731d986939
- languageName: node
- linkType: hard
-
"front-end-scaffold@workspace:.":
version: 0.0.0-use.local
resolution: "front-end-scaffold@workspace:."
@@ -3731,6 +3169,7 @@ __metadata:
"@mdx-js/loader": 2.3.0
"@mdx-js/react": 2.3.0
"@next/mdx": 13.2.4
+ "@playwright/test": 1.35.1
"@radix-ui/react-slot": 1.0.2
"@tailwindcss/forms": 0.5.3
"@tailwindcss/line-clamp": 0.4.2
@@ -3746,7 +3185,6 @@ __metadata:
axios: 1.3.4
class-variance-authority: 0.6.0
clsx: 1.2.1
- cypress: 12.7.0
eslint: 8.32.0
eslint-config-next: 13.2.3
eslint-config-prettier: 8.6.0
@@ -3762,7 +3200,6 @@ __metadata:
react: 18.2.0
react-dom: 18.2.0
react-map-gl: 7.0.25
- start-server-and-test: 1.12.1
svg-sprite-loader: 6.0.11
svgo: 3.0.2
svgo-loader: 3.0.3
@@ -3774,18 +3211,6 @@ __metadata:
languageName: unknown
linkType: soft
-"fs-extra@npm:^9.1.0":
- version: 9.1.0
- resolution: "fs-extra@npm:9.1.0"
- dependencies:
- at-least-node: ^1.0.0
- graceful-fs: ^4.2.0
- jsonfile: ^6.0.1
- universalify: ^2.0.0
- checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20
- languageName: node
- linkType: hard
-
"fs-minipass@npm:^2.0.0":
version: 2.1.0
resolution: "fs-minipass@npm:2.1.0"
@@ -3811,7 +3236,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@npm:~2.3.2":
+"fsevents@npm:2.3.2, fsevents@npm:~2.3.2":
version: 2.3.2
resolution: "fsevents@npm:2.3.2"
dependencies:
@@ -3821,7 +3246,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@patch:fsevents@~2.3.2#~builtin":
+"fsevents@patch:fsevents@2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin":
version: 2.3.2
resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1"
dependencies:
@@ -3891,15 +3316,6 @@ __metadata:
languageName: node
linkType: hard
-"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0":
- version: 5.2.0
- resolution: "get-stream@npm:5.2.0"
- dependencies:
- pump: ^3.0.0
- checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12
- languageName: node
- linkType: hard
-
"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1":
version: 6.0.1
resolution: "get-stream@npm:6.0.1"
@@ -3933,24 +3349,6 @@ __metadata:
languageName: node
linkType: hard
-"getos@npm:^3.2.1":
- version: 3.2.1
- resolution: "getos@npm:3.2.1"
- dependencies:
- async: ^3.2.0
- checksum: 42fd78a66d47cebd3e09de5566cc0044e034b08f4a000a310dbd89a77b02c65d8f4002554bfa495ea5bdc4fa9d515f5ac785a7cc474ba45383cc697f865eeaf1
- languageName: node
- linkType: hard
-
-"getpass@npm:^0.1.1":
- version: 0.1.7
- resolution: "getpass@npm:0.1.7"
- dependencies:
- assert-plus: ^1.0.0
- checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046
- languageName: node
- linkType: hard
-
"gl-matrix@npm:^3.4.3":
version: 3.4.3
resolution: "gl-matrix@npm:3.4.3"
@@ -4019,15 +3417,6 @@ __metadata:
languageName: node
linkType: hard
-"global-dirs@npm:^3.0.0":
- version: 3.0.1
- resolution: "global-dirs@npm:3.0.1"
- dependencies:
- ini: 2.0.0
- checksum: 70147b80261601fd40ac02a104581432325c1c47329706acd773f3a6ce99bb36d1d996038c85ccacd482ad22258ec233c586b6a91535b1a116b89663d49d6438
- languageName: node
- linkType: hard
-
"globals@npm:^13.19.0":
version: 13.20.0
resolution: "globals@npm:13.20.0"
@@ -4082,7 +3471,7 @@ __metadata:
languageName: node
linkType: hard
-"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6":
+"graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6":
version: 4.2.11
resolution: "graceful-fs@npm:4.2.11"
checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7
@@ -4284,31 +3673,13 @@ __metadata:
languageName: node
linkType: hard
-"http-signature@npm:~1.3.6":
- version: 1.3.6
- resolution: "http-signature@npm:1.3.6"
- dependencies:
- assert-plus: ^1.0.0
- jsprim: ^2.0.2
- sshpk: ^1.14.1
- checksum: 10be2af4764e71fee0281392937050201ee576ac755c543f570d6d87134ce5e858663fe999a7adb3e4e368e1e356d0d7fec6b9542295b875726ff615188e7a0c
- languageName: node
- linkType: hard
-
"https-proxy-agent@npm:^5.0.0":
version: 5.0.1
resolution: "https-proxy-agent@npm:5.0.1"
dependencies:
agent-base: 6
debug: 4
- checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765
- languageName: node
- linkType: hard
-
-"human-signals@npm:^1.1.1":
- version: 1.1.1
- resolution: "human-signals@npm:1.1.1"
- checksum: d587647c9e8ec24e02821b6be7de5a0fc37f591f6c4e319b3054b43fd4c35a70a94c46fc74d8c1a43c47fde157d23acd7421f375e1c1365b09a16835b8300205
+ checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765
languageName: node
linkType: hard
@@ -4353,7 +3724,7 @@ __metadata:
languageName: node
linkType: hard
-"ieee754@npm:^1.1.12, ieee754@npm:^1.1.13":
+"ieee754@npm:^1.1.12":
version: 1.2.1
resolution: "ieee754@npm:1.2.1"
checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e
@@ -4417,13 +3788,6 @@ __metadata:
languageName: node
linkType: hard
-"ini@npm:2.0.0":
- version: 2.0.0
- resolution: "ini@npm:2.0.0"
- checksum: e7aadc5fb2e4aefc666d74ee2160c073995a4061556b1b5b4241ecb19ad609243b9cceafe91bae49c219519394bbd31512516cb22a3b1ca6e66d869e0447e84e
- languageName: node
- linkType: hard
-
"inline-style-parser@npm:0.1.1":
version: 0.1.1
resolution: "inline-style-parser@npm:0.1.1"
@@ -4544,17 +3908,6 @@ __metadata:
languageName: node
linkType: hard
-"is-ci@npm:^3.0.0":
- version: 3.0.1
- resolution: "is-ci@npm:3.0.1"
- dependencies:
- ci-info: ^3.2.0
- bin:
- is-ci: bin.js
- checksum: 192c66dc7826d58f803ecae624860dccf1899fc1f3ac5505284c0a5cf5f889046ffeb958fa651e5725d5705c5bcb14f055b79150ea5fcad7456a9569de60260e
- languageName: node
- linkType: hard
-
"is-core-module@npm:^2.11.0, is-core-module@npm:^2.9.0":
version: 2.12.1
resolution: "is-core-module@npm:2.12.1"
@@ -4695,16 +4048,6 @@ __metadata:
languageName: node
linkType: hard
-"is-installed-globally@npm:~0.4.0":
- version: 0.4.0
- resolution: "is-installed-globally@npm:0.4.0"
- dependencies:
- global-dirs: ^3.0.0
- is-path-inside: ^3.0.2
- checksum: 3359840d5982d22e9b350034237b2cda2a12bac1b48a721912e1ab8e0631dd07d45a2797a120b7b87552759a65ba03e819f1bd63f2d7ab8657ec0b44ee0bf399
- languageName: node
- linkType: hard
-
"is-lambda@npm:^1.0.1":
version: 1.0.1
resolution: "is-lambda@npm:1.0.1"
@@ -4744,7 +4087,7 @@ __metadata:
languageName: node
linkType: hard
-"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3":
+"is-path-inside@npm:^3.0.3":
version: 3.0.3
resolution: "is-path-inside@npm:3.0.3"
checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9
@@ -4847,20 +4190,6 @@ __metadata:
languageName: node
linkType: hard
-"is-typedarray@npm:~1.0.0":
- version: 1.0.0
- resolution: "is-typedarray@npm:1.0.0"
- checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7
- languageName: node
- linkType: hard
-
-"is-unicode-supported@npm:^0.1.0":
- version: 0.1.0
- resolution: "is-unicode-supported@npm:0.1.0"
- checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52
- languageName: node
- linkType: hard
-
"is-weakref@npm:^1.0.2":
version: 1.0.2
resolution: "is-weakref@npm:1.0.2"
@@ -4916,13 +4245,6 @@ __metadata:
languageName: node
linkType: hard
-"isstream@npm:~0.1.2":
- version: 0.1.2
- resolution: "isstream@npm:0.1.2"
- checksum: 1eb2fe63a729f7bdd8a559ab552c69055f4f48eb5c2f03724430587c6f450783c8f1cd936c1c952d0a927925180fcc892ebd5b174236cf1065d4bd5bdb37e963
- languageName: node
- linkType: hard
-
"jackspeak@npm:^2.0.3":
version: 2.2.1
resolution: "jackspeak@npm:2.2.1"
@@ -4936,19 +4258,6 @@ __metadata:
languageName: node
linkType: hard
-"joi@npm:^17.3.0":
- version: 17.9.2
- resolution: "joi@npm:17.9.2"
- dependencies:
- "@hapi/hoek": ^9.0.0
- "@hapi/topo": ^5.0.0
- "@sideway/address": ^4.1.3
- "@sideway/formula": ^3.0.1
- "@sideway/pinpoint": ^2.0.0
- checksum: 8c3709849293411c524e5a679dba7b42598a29a663478941767b8d5b06288611dece58803c468a2c7320cc2429a3e71e3d94337fe47aefcf6c22174dbd90b601
- languageName: node
- linkType: hard
-
"js-base64@npm:^2.1.9":
version: 2.6.4
resolution: "js-base64@npm:2.6.4"
@@ -4981,13 +4290,6 @@ __metadata:
languageName: node
linkType: hard
-"jsbn@npm:~0.1.0":
- version: 0.1.1
- resolution: "jsbn@npm:0.1.1"
- checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2
- languageName: node
- linkType: hard
-
"json-schema-traverse@npm:^0.4.1":
version: 0.4.1
resolution: "json-schema-traverse@npm:0.4.1"
@@ -4995,13 +4297,6 @@ __metadata:
languageName: node
linkType: hard
-"json-schema@npm:0.4.0":
- version: 0.4.0
- resolution: "json-schema@npm:0.4.0"
- checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72
- languageName: node
- linkType: hard
-
"json-stable-stringify-without-jsonify@npm:^1.0.1":
version: 1.0.1
resolution: "json-stable-stringify-without-jsonify@npm:1.0.1"
@@ -5009,13 +4304,6 @@ __metadata:
languageName: node
linkType: hard
-"json-stringify-safe@npm:~5.0.1":
- version: 5.0.1
- resolution: "json-stringify-safe@npm:5.0.1"
- checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee
- languageName: node
- linkType: hard
-
"json5@npm:^1.0.1, json5@npm:^1.0.2":
version: 1.0.2
resolution: "json5@npm:1.0.2"
@@ -5036,31 +4324,6 @@ __metadata:
languageName: node
linkType: hard
-"jsonfile@npm:^6.0.1":
- version: 6.1.0
- resolution: "jsonfile@npm:6.1.0"
- dependencies:
- graceful-fs: ^4.1.6
- universalify: ^2.0.0
- dependenciesMeta:
- graceful-fs:
- optional: true
- checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354
- languageName: node
- linkType: hard
-
-"jsprim@npm:^2.0.2":
- version: 2.0.2
- resolution: "jsprim@npm:2.0.2"
- dependencies:
- assert-plus: 1.0.0
- extsprintf: 1.3.0
- json-schema: 0.4.0
- verror: 1.10.0
- checksum: d175f6b1991e160cb0aa39bc857da780e035611986b5492f32395411879fdaf4e513d98677f08f7352dac93a16b66b8361c674b86a3fa406e2e7af6b26321838
- languageName: node
- linkType: hard
-
"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.3":
version: 3.3.3
resolution: "jsx-ast-utils@npm:3.3.3"
@@ -5133,13 +4396,6 @@ __metadata:
languageName: node
linkType: hard
-"lazy-ass@npm:1.6.0, lazy-ass@npm:^1.6.0":
- version: 1.6.0
- resolution: "lazy-ass@npm:1.6.0"
- checksum: 5a3ebb17915b03452320804466345382a6c25ac782ec4874fecdb2385793896cd459be2f187dc7def8899180c32ee0ab9a1aa7fe52193ac3ff3fe29bb0591729
- languageName: node
- linkType: hard
-
"levn@npm:^0.4.1":
version: 0.4.1
resolution: "levn@npm:0.4.1"
@@ -5157,27 +4413,6 @@ __metadata:
languageName: node
linkType: hard
-"listr2@npm:^3.8.3":
- version: 3.14.0
- resolution: "listr2@npm:3.14.0"
- 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
- peerDependencies:
- enquirer: ">= 2.3.0 < 3"
- peerDependenciesMeta:
- enquirer:
- optional: true
- checksum: fdb8b2d6bdf5df9371ebd5082bee46c6d0ca3d1e5f2b11fbb5a127839855d5f3da9d4968fce94f0a5ec67cac2459766abbb1faeef621065ebb1829b11ef9476d
- languageName: node
- linkType: hard
-
"loader-utils@npm:^1.1.0":
version: 1.4.2
resolution: "loader-utils@npm:1.4.2"
@@ -5230,42 +4465,6 @@ __metadata:
languageName: node
linkType: hard
-"lodash.once@npm:^4.1.1":
- version: 4.1.1
- resolution: "lodash.once@npm:4.1.1"
- checksum: d768fa9f9b4e1dc6453be99b753906f58990e0c45e7b2ca5a3b40a33111e5d17f6edf2f768786e2716af90a8e78f8f91431ab8435f761fef00f9b0c256f6d245
- languageName: node
- linkType: hard
-
-"lodash@npm:^4.17.21":
- version: 4.17.21
- resolution: "lodash@npm:4.17.21"
- checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
- languageName: node
- linkType: hard
-
-"log-symbols@npm:^4.0.0":
- version: 4.1.0
- resolution: "log-symbols@npm:4.1.0"
- dependencies:
- chalk: ^4.1.0
- is-unicode-supported: ^0.1.0
- checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74
- languageName: node
- linkType: hard
-
-"log-update@npm:^4.0.0":
- version: 4.0.0
- resolution: "log-update@npm:4.0.0"
- dependencies:
- ansi-escapes: ^4.3.0
- cli-cursor: ^3.1.0
- slice-ansi: ^4.0.0
- wrap-ansi: ^6.2.0
- checksum: ae2f85bbabc1906034154fb7d4c4477c79b3e703d22d78adee8b3862fa913942772e7fa11713e3d96fb46de4e3cabefbf5d0a544344f03b58d3c4bff52aa9eb2
- languageName: node
- linkType: hard
-
"longest-streak@npm:^3.0.0":
version: 3.1.0
resolution: "longest-streak@npm:3.1.0"
@@ -5337,13 +4536,6 @@ __metadata:
languageName: node
linkType: hard
-"map-stream@npm:~0.1.0":
- version: 0.1.0
- resolution: "map-stream@npm:0.1.0"
- checksum: 38abbe4eb883888031e6b2fc0630bc583c99396be16b8ace5794b937b682a8a081f03e8b15bfd4914d1bc88318f0e9ac73ba3512ae65955cd449f63256ddb31d
- languageName: node
- linkType: hard
-
"map-visit@npm:^1.0.0":
version: 1.0.0
resolution: "map-visit@npm:1.0.0"
@@ -5965,7 +5157,7 @@ __metadata:
languageName: node
linkType: hard
-"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19":
+"mime-types@npm:^2.1.12":
version: 2.1.35
resolution: "mime-types@npm:2.1.35"
dependencies:
@@ -6015,7 +5207,7 @@ __metadata:
languageName: node
linkType: hard
-"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6":
+"minimist@npm:^1.2.0, minimist@npm:^1.2.6":
version: 1.2.8
resolution: "minimist@npm:1.2.8"
checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0
@@ -6340,7 +5532,7 @@ __metadata:
languageName: node
linkType: hard
-"npm-run-path@npm:^4.0.0, npm-run-path@npm:^4.0.1":
+"npm-run-path@npm:^4.0.1":
version: 4.0.1
resolution: "npm-run-path@npm:4.0.1"
dependencies:
@@ -6491,7 +5683,7 @@ __metadata:
languageName: node
linkType: hard
-"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0":
+"once@npm:^1.3.0":
version: 1.4.0
resolution: "once@npm:1.4.0"
dependencies:
@@ -6500,7 +5692,7 @@ __metadata:
languageName: node
linkType: hard
-"onetime@npm:^5.1.0, onetime@npm:^5.1.2":
+"onetime@npm:^5.1.2":
version: 5.1.2
resolution: "onetime@npm:5.1.2"
dependencies:
@@ -6544,20 +5736,6 @@ __metadata:
languageName: node
linkType: hard
-"ospath@npm:^1.2.2":
- version: 1.2.2
- resolution: "ospath@npm:1.2.2"
- checksum: 505f48a4f4f1c557d6c656ec985707726e3714721680139be037613e903aa8c8fa4ddd8d1342006f9b2dc0065e6e20f8b7bea2ee05354f31257044790367b347
- languageName: node
- linkType: hard
-
-"p-finally@npm:^2.0.0":
- version: 2.0.1
- resolution: "p-finally@npm:2.0.1"
- checksum: 6306a2851c3b28f8b603624f395ae84dce76970498fed8aa6aae2d930595053746edf1e4ee0c4b78a97410d84aa4504d63179f5310d555511ecd226f53ed1e8e
- languageName: node
- linkType: hard
-
"p-limit@npm:^3.0.2":
version: 3.1.0
resolution: "p-limit@npm:3.1.0"
@@ -6669,15 +5847,6 @@ __metadata:
languageName: node
linkType: hard
-"pause-stream@npm:0.0.11":
- version: 0.0.11
- resolution: "pause-stream@npm:0.0.11"
- dependencies:
- through: ~2.3
- checksum: 3c4a14052a638b92e0c96eb00c0d7977df7f79ea28395250c525d197f1fc02d34ce1165d5362e2e6ebbb251524b94a76f3f0d4abc39ab8b016d97449fe15583c
- languageName: node
- linkType: hard
-
"pbf@npm:^3.2.1":
version: 3.2.1
resolution: "pbf@npm:3.2.1"
@@ -6690,20 +5859,6 @@ __metadata:
languageName: node
linkType: hard
-"pend@npm:~1.2.0":
- version: 1.2.0
- resolution: "pend@npm:1.2.0"
- checksum: 6c72f5243303d9c60bd98e6446ba7d30ae29e3d56fdb6fae8767e8ba6386f33ee284c97efe3230a0d0217e2b1723b8ab490b1bbf34fcbb2180dbc8a9de47850d
- languageName: node
- linkType: hard
-
-"performance-now@npm:^2.1.0":
- version: 2.1.0
- resolution: "performance-now@npm:2.1.0"
- checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550
- languageName: node
- linkType: hard
-
"periscopic@npm:^3.0.0":
version: 3.1.0
resolution: "periscopic@npm:3.1.0"
@@ -6729,13 +5884,22 @@ __metadata:
languageName: node
linkType: hard
-"pify@npm:^2.2.0, pify@npm:^2.3.0":
+"pify@npm:^2.3.0":
version: 2.3.0
resolution: "pify@npm:2.3.0"
checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba
languageName: node
linkType: hard
+"playwright-core@npm:1.35.1":
+ version: 1.35.1
+ resolution: "playwright-core@npm:1.35.1"
+ bin:
+ playwright-core: cli.js
+ checksum: 179abc0051f00474e528935b507fa8cedc986b2803b020d7679878ba28cdd7036ad5a779792aad2ad281f8dc625eb1d2fb77663cb8de0d20c7ffbda7c18febdd
+ languageName: node
+ linkType: hard
+
"posix-character-classes@npm:^0.1.0":
version: 0.1.1
resolution: "posix-character-classes@npm:0.1.1"
@@ -6966,13 +6130,6 @@ __metadata:
languageName: node
linkType: hard
-"pretty-bytes@npm:^5.6.0":
- version: 5.6.0
- resolution: "pretty-bytes@npm:5.6.0"
- checksum: 9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd
- languageName: node
- linkType: hard
-
"promise-retry@npm:^2.0.1":
version: 2.0.1
resolution: "promise-retry@npm:2.0.1"
@@ -7008,13 +6165,6 @@ __metadata:
languageName: node
linkType: hard
-"proxy-from-env@npm:1.0.0":
- version: 1.0.0
- resolution: "proxy-from-env@npm:1.0.0"
- checksum: 292e28d1de0c315958d71d8315eb546dd3cd8c8cbc2dab7c54eeb9f5c17f421771964ad0b5e1f77011bab2305bdae42e1757ce33bdb1ccc3e87732322a8efcf1
- languageName: node
- linkType: hard
-
"proxy-from-env@npm:^1.1.0":
version: 1.1.0
resolution: "proxy-from-env@npm:1.1.0"
@@ -7022,50 +6172,13 @@ __metadata:
languageName: node
linkType: hard
-"ps-tree@npm:1.2.0":
- version: 1.2.0
- resolution: "ps-tree@npm:1.2.0"
- dependencies:
- event-stream: =3.3.4
- bin:
- ps-tree: ./bin/ps-tree.js
- checksum: e635dd00f53d30d31696cf5f95b3a8dbdf9b1aeb36d4391578ce8e8cd22949b7c5536c73b0dc18c78615ea3ddd4be96101166be59ca2e3e3cb1e2f79ba3c7f98
- languageName: node
- linkType: hard
-
-"psl@npm:^1.1.28":
- version: 1.9.0
- resolution: "psl@npm:1.9.0"
- checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d
- languageName: node
- linkType: hard
-
-"pump@npm:^3.0.0":
- version: 3.0.0
- resolution: "pump@npm:3.0.0"
- dependencies:
- end-of-stream: ^1.1.0
- once: ^1.3.1
- checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9
- languageName: node
- linkType: hard
-
-"punycode@npm:^2.1.0, punycode@npm:^2.1.1":
+"punycode@npm:^2.1.0":
version: 2.3.0
resolution: "punycode@npm:2.3.0"
checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200
languageName: node
linkType: hard
-"qs@npm:~6.10.3":
- version: 6.10.5
- resolution: "qs@npm:6.10.5"
- dependencies:
- side-channel: ^1.0.4
- checksum: b3873189a11bcf48445864b3ba66f7a76db0d9d874955d197779f561addfa604884f7b107971526ce1eca02c99bf7d1e47f28a3e7e6e29204d798fb279164226
- languageName: node
- linkType: hard
-
"query-string@npm:^4.3.2":
version: 4.3.4
resolution: "query-string@npm:4.3.4"
@@ -7248,15 +6361,6 @@ __metadata:
languageName: node
linkType: hard
-"request-progress@npm:^3.0.0":
- version: 3.0.0
- resolution: "request-progress@npm:3.0.0"
- dependencies:
- throttleit: ^1.0.0
- checksum: 6ea1761dcc8a8b7b5894afd478c0286aa31bd69438d7050294bd4fd0d0b3e09b5cde417d38deef9c49809039c337d8744e4bb49d8632b0c3e4ffa5e8a687e0fd
- languageName: node
- linkType: hard
-
"resolve-from@npm:^4.0.0":
version: 4.0.0
resolution: "resolve-from@npm:4.0.0"
@@ -7339,16 +6443,6 @@ __metadata:
languageName: node
linkType: hard
-"restore-cursor@npm:^3.1.0":
- version: 3.1.0
- resolution: "restore-cursor@npm:3.1.0"
- dependencies:
- onetime: ^5.1.0
- signal-exit: ^3.0.2
- checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630
- languageName: node
- linkType: hard
-
"ret@npm:~0.1.10":
version: 0.1.15
resolution: "ret@npm:0.1.15"
@@ -7370,14 +6464,7 @@ __metadata:
languageName: node
linkType: hard
-"rfdc@npm:^1.3.0":
- version: 1.3.0
- resolution: "rfdc@npm:1.3.0"
- checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32
- languageName: node
- linkType: hard
-
-"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2":
+"rimraf@npm:^3.0.2":
version: 3.0.2
resolution: "rimraf@npm:3.0.2"
dependencies:
@@ -7406,24 +6493,6 @@ __metadata:
languageName: node
linkType: hard
-"rxjs@npm:^6.6.3":
- version: 6.6.7
- resolution: "rxjs@npm:6.6.7"
- dependencies:
- tslib: ^1.9.0
- checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b
- languageName: node
- linkType: hard
-
-"rxjs@npm:^7.5.1":
- version: 7.8.1
- resolution: "rxjs@npm:7.8.1"
- dependencies:
- tslib: ^2.1.0
- checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119
- languageName: node
- linkType: hard
-
"sade@npm:^1.7.3":
version: 1.8.1
resolution: "sade@npm:1.8.1"
@@ -7433,7 +6502,7 @@ __metadata:
languageName: node
linkType: hard
-"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0":
+"safe-buffer@npm:~5.2.0":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491
@@ -7460,7 +6529,7 @@ __metadata:
languageName: node
linkType: hard
-"safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0":
+"safer-buffer@npm:>= 2.1.2 < 3.0.0":
version: 2.1.2
resolution: "safer-buffer@npm:2.1.2"
checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0
@@ -7485,7 +6554,7 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7":
+"semver@npm:^7.3.5, semver@npm:^7.3.7":
version: 7.5.1
resolution: "semver@npm:7.5.1"
dependencies:
@@ -7542,7 +6611,7 @@ __metadata:
languageName: node
linkType: hard
-"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7":
+"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7":
version: 3.0.7
resolution: "signal-exit@npm:3.0.7"
checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318
@@ -7570,28 +6639,6 @@ __metadata:
languageName: node
linkType: hard
-"slice-ansi@npm:^3.0.0":
- version: 3.0.0
- resolution: "slice-ansi@npm:3.0.0"
- dependencies:
- ansi-styles: ^4.0.0
- astral-regex: ^2.0.0
- is-fullwidth-code-point: ^3.0.0
- checksum: 5ec6d022d12e016347e9e3e98a7eb2a592213a43a65f1b61b74d2c78288da0aded781f665807a9f3876b9daa9ad94f64f77d7633a0458876c3a4fdc4eb223f24
- languageName: node
- linkType: hard
-
-"slice-ansi@npm:^4.0.0":
- version: 4.0.0
- resolution: "slice-ansi@npm:4.0.0"
- dependencies:
- ansi-styles: ^4.0.0
- astral-regex: ^2.0.0
- is-fullwidth-code-point: ^3.0.0
- checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756
- languageName: node
- linkType: hard
-
"smart-buffer@npm:^4.2.0":
version: 4.2.0
resolution: "smart-buffer@npm:4.2.0"
@@ -7720,36 +6767,6 @@ __metadata:
languageName: node
linkType: hard
-"split@npm:0.3":
- version: 0.3.3
- resolution: "split@npm:0.3.3"
- dependencies:
- through: 2
- checksum: 2e076634c9637cfdc54ab4387b6a243b8c33b360874a25adf6f327a5647f07cb3bf1c755d515248eb3afee4e382278d01f62c62d87263c118f28065b86f74f02
- languageName: node
- linkType: hard
-
-"sshpk@npm:^1.14.1":
- version: 1.17.0
- resolution: "sshpk@npm:1.17.0"
- 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
- checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597
- languageName: node
- linkType: hard
-
"ssri@npm:^10.0.0":
version: 10.0.4
resolution: "ssri@npm:10.0.4"
@@ -7766,25 +6783,6 @@ __metadata:
languageName: node
linkType: hard
-"start-server-and-test@npm:1.12.1":
- version: 1.12.1
- resolution: "start-server-and-test@npm:1.12.1"
- dependencies:
- bluebird: 3.7.2
- check-more-types: 2.24.0
- debug: 4.3.1
- execa: 3.4.0
- lazy-ass: 1.6.0
- ps-tree: 1.2.0
- wait-on: 5.3.0
- bin:
- server-test: src/bin/start.js
- start-server-and-test: src/bin/start.js
- start-test: src/bin/start.js
- checksum: 1c5e5dd7c1655a7946aa4e06c63f87dc6d7ec8d36599ddcec0bf9b7c840e021c376c644def5ed95eec6bd3ae55832f35353b36fa54b3cd6c32071a213c51e8f1
- languageName: node
- linkType: hard
-
"static-extend@npm:^0.1.1":
version: 0.1.2
resolution: "static-extend@npm:0.1.2"
@@ -7795,15 +6793,6 @@ __metadata:
languageName: node
linkType: hard
-"stream-combiner@npm:~0.0.4":
- version: 0.0.4
- resolution: "stream-combiner@npm:0.0.4"
- dependencies:
- duplexer: ~0.1.1
- checksum: 844b622cfe8b9de45a6007404f613b60aaf85200ab9862299066204242f89a7c8033b1c356c998aa6cfc630f6cd9eba119ec1c6dc1f93e245982be4a847aee7d
- languageName: node
- linkType: hard
-
"strict-uri-encode@npm:^1.0.0":
version: 1.1.0
resolution: "strict-uri-encode@npm:1.1.0"
@@ -7811,7 +6800,7 @@ __metadata:
languageName: node
linkType: hard
-"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3":
+"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.3":
version: 4.2.3
resolution: "string-width@npm:4.2.3"
dependencies:
@@ -8015,15 +7004,6 @@ __metadata:
languageName: node
linkType: hard
-"supports-color@npm:^8.1.1":
- version: 8.1.1
- resolution: "supports-color@npm:8.1.1"
- dependencies:
- has-flag: ^4.0.0
- checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406
- languageName: node
- linkType: hard
-
"supports-preserve-symlinks-flag@npm:^1.0.0":
version: 1.0.0
resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
@@ -8212,20 +7192,6 @@ __metadata:
languageName: node
linkType: hard
-"throttleit@npm:^1.0.0":
- version: 1.0.0
- resolution: "throttleit@npm:1.0.0"
- checksum: 1b2db4d2454202d589e8236c07a69d2fab838876d370030ebea237c34c0a7d1d9cf11c29f994531ebb00efd31e9728291042b7754f2798a8352ec4463455b659
- languageName: node
- linkType: hard
-
-"through@npm:2, through@npm:^2.3.8, through@npm:~2.3, through@npm:~2.3.1":
- version: 2.3.8
- resolution: "through@npm:2.3.8"
- checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd
- languageName: node
- linkType: hard
-
"tinyqueue@npm:^2.0.3":
version: 2.0.3
resolution: "tinyqueue@npm:2.0.3"
@@ -8240,15 +7206,6 @@ __metadata:
languageName: node
linkType: hard
-"tmp@npm:~0.2.1":
- version: 0.2.1
- resolution: "tmp@npm:0.2.1"
- dependencies:
- rimraf: ^3.0.0
- checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e
- languageName: node
- linkType: hard
-
"to-object-path@npm:^0.3.0":
version: 0.3.0
resolution: "to-object-path@npm:0.3.0"
@@ -8289,16 +7246,6 @@ __metadata:
languageName: node
linkType: hard
-"tough-cookie@npm:~2.5.0":
- version: 2.5.0
- resolution: "tough-cookie@npm:2.5.0"
- dependencies:
- psl: ^1.1.28
- punycode: ^2.1.1
- checksum: 16a8cd090224dd176eee23837cbe7573ca0fa297d7e468ab5e1c02d49a4e9a97bb05fef11320605eac516f91d54c57838a25864e8680e27b069a5231d8264977
- languageName: node
- linkType: hard
-
"traverse@npm:^0.6.6":
version: 0.6.7
resolution: "traverse@npm:0.6.7"
@@ -8332,14 +7279,14 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:^1.8.1, tslib@npm:^1.9.0":
+"tslib@npm:^1.8.1":
version: 1.14.1
resolution: "tslib@npm:1.14.1"
checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd
languageName: node
linkType: hard
-"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0":
+"tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0":
version: 2.5.3
resolution: "tslib@npm:2.5.3"
checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c
@@ -8357,22 +7304,6 @@ __metadata:
languageName: node
linkType: hard
-"tunnel-agent@npm:^0.6.0":
- version: 0.6.0
- resolution: "tunnel-agent@npm:0.6.0"
- dependencies:
- safe-buffer: ^5.0.1
- checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711
- languageName: node
- linkType: hard
-
-"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0":
- version: 0.14.5
- resolution: "tweetnacl@npm:0.14.5"
- checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487
- languageName: node
- linkType: hard
-
"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
version: 0.4.0
resolution: "type-check@npm:0.4.0"
@@ -8389,13 +7320,6 @@ __metadata:
languageName: node
linkType: hard
-"type-fest@npm:^0.21.3":
- version: 0.21.3
- resolution: "type-fest@npm:0.21.3"
- checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0
- languageName: node
- linkType: hard
-
"typed-array-length@npm:^1.0.4":
version: 1.0.4
resolution: "typed-array-length@npm:1.0.4"
@@ -8565,13 +7489,6 @@ __metadata:
languageName: node
linkType: hard
-"universalify@npm:^2.0.0":
- version: 2.0.0
- resolution: "universalify@npm:2.0.0"
- checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44
- languageName: node
- linkType: hard
-
"unset-value@npm:^1.0.0":
version: 1.0.0
resolution: "unset-value@npm:1.0.0"
@@ -8660,15 +7577,6 @@ __metadata:
languageName: node
linkType: hard
-"uuid@npm:^8.3.2":
- version: 8.3.2
- resolution: "uuid@npm:8.3.2"
- bin:
- uuid: dist/bin/uuid
- checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df
- languageName: node
- linkType: hard
-
"uvu@npm:^0.5.0":
version: 0.5.6
resolution: "uvu@npm:0.5.6"
@@ -8683,17 +7591,6 @@ __metadata:
languageName: node
linkType: hard
-"verror@npm:1.10.0":
- version: 1.10.0
- resolution: "verror@npm:1.10.0"
- dependencies:
- assert-plus: ^1.0.0
- core-util-is: 1.0.2
- extsprintf: ^1.2.0
- checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea
- languageName: node
- linkType: hard
-
"vfile-message@npm:^3.0.0":
version: 3.1.4
resolution: "vfile-message@npm:3.1.4"
@@ -8727,21 +7624,6 @@ __metadata:
languageName: node
linkType: hard
-"wait-on@npm:5.3.0":
- version: 5.3.0
- resolution: "wait-on@npm:5.3.0"
- dependencies:
- axios: ^0.21.1
- joi: ^17.3.0
- lodash: ^4.17.21
- minimist: ^1.2.5
- rxjs: ^6.6.3
- bin:
- wait-on: bin/wait-on
- checksum: b7099104b7900ff6349f1196edff759076ab557a2053c017a587819f7a59f146ec9e35c99579acd31dcda371bfa72241ef28b8ccda902f0bf3fbf2d780a00ebf
- languageName: node
- linkType: hard
-
"which-boxed-primitive@npm:^1.0.2":
version: 1.0.2
resolution: "which-boxed-primitive@npm:1.0.2"
@@ -8796,7 +7678,7 @@ __metadata:
languageName: node
linkType: hard
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0":
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version: 7.0.0
resolution: "wrap-ansi@npm:7.0.0"
dependencies:
@@ -8807,17 +7689,6 @@ __metadata:
languageName: node
linkType: hard
-"wrap-ansi@npm:^6.2.0":
- version: 6.2.0
- resolution: "wrap-ansi@npm:6.2.0"
- dependencies:
- ansi-styles: ^4.0.0
- string-width: ^4.1.0
- strip-ansi: ^6.0.0
- checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a
- languageName: node
- linkType: hard
-
"wrap-ansi@npm:^8.1.0":
version: 8.1.0
resolution: "wrap-ansi@npm:8.1.0"
@@ -8857,16 +7728,6 @@ __metadata:
languageName: node
linkType: hard
-"yauzl@npm:^2.10.0":
- version: 2.10.0
- resolution: "yauzl@npm:2.10.0"
- dependencies:
- buffer-crc32: ~0.2.3
- fd-slicer: ~1.1.0
- checksum: 7f21fe0bbad6e2cb130044a5d1d0d5a0e5bf3d8d4f8c4e6ee12163ce798fee3de7388d22a7a0907f563ac5f9d40f8699a223d3d5c1718da90b0156da6904022b
- languageName: node
- linkType: hard
-
"yocto-queue@npm:^0.1.0":
version: 0.1.0
resolution: "yocto-queue@npm:0.1.0"