diff --git a/.~lock.240228_Userstory HWPA en.docx# b/.~lock.240228_Userstory HWPA en.docx# new file mode 100644 index 0000000..a126b3f --- /dev/null +++ b/.~lock.240228_Userstory HWPA en.docx# @@ -0,0 +1 @@ +,smnc,smnc-Swift-SFX16-51G,04.03.2024 19:45,file:///home/smnc/.config/libreoffice/4; \ No newline at end of file diff --git a/240228_Userstory HWPA en.docx b/240228_Userstory HWPA en.docx new file mode 100644 index 0000000..3267d56 Binary files /dev/null and b/240228_Userstory HWPA en.docx differ diff --git a/240228_Userstory HWPA.docx b/240228_Userstory HWPA.docx new file mode 100644 index 0000000..f164488 Binary files /dev/null and b/240228_Userstory HWPA.docx differ diff --git a/README.md b/README.md index 989c703..0a09c35 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,6 @@ -# **Simple** E2E test suite with Cypress -[](https://dashboard.cypress.io/projects/urshkd/runs) :point_left: click here to see test results on Cypress dashboard -> **application under test:** http://angularjs.realworld.io/ - 🎉 Learn how to write these tests and more in our trainings. More info: [bigbyte.academy](https://bigbyte.academy) :tada: - -## :goal_net: Goals -- keep it simple - no 'custom' abstractions/functions/utils/helpers (use what Cypress provides) -- tests are easily readable -- project is easily understandable even to people without previous JS or Cypress knowledge -- [use shortcuts](https://docs.cypress.io/api/cypress-api/custom-commands#4-Skip-your-UI-as-much-as-possible) to avoid repeating/testing the same UI actions over and over again - - - - -## :gear: Setup - -1. `git clone https://github.com/helenanull/cypress-example.git` 2. cd to `cypress-example` folder and run `npm install` - ## :heavy_check_mark: Run tests - If you installed Cypress via npm: @@ -39,6 +21,28 @@ :file_folder: Selectors (CSS selectors) are located in `cypress/selectors` folder [only difference from cypress default project structure] - __not__ using page object model(POM) design pattern but keeping selectors (only selectors) separately [Read more](https://github.com/helenanull/cypress-example#grey_question-qa) +### Stress test + +NOTE: this portion is dependant on having the following library installed: cypress-utils +This is available here: https://github.com/trentrand/cypress-utils.git + + +To ensure your Cypress tests are not irregularly failing with false-negatives, stress testing new test files can be a reliable way of filtering out bad test code. + +To stress test one or more test files, simply specify the files to run: + + ```shell + cypress-utils stress-test specFileA specfileB + ``` + +Additional command-line options may be specified, such as the sample size or number of concurrent threads: + ```shell + cypress-utils stress-test --trialCount 12 --threads 4 + ``` + +> See more command-line options with `cypress-utils stress-test --help` + + #### :hammer_and_wrench: Configuration Config files: diff --git a/Userstory Editor Schulung Sulzbach Teil 1.docx b/Userstory Editor Schulung Sulzbach Teil 1.docx new file mode 100644 index 0000000..78c07bc Binary files /dev/null and b/Userstory Editor Schulung Sulzbach Teil 1.docx differ diff --git a/cypress.config.js b/cypress.config.js index 085788e..b6d7dd8 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -29,3 +29,20 @@ module.exports = defineConfig({ baseUrl: 'http://angularjs.realworld.io/#' } }) + +const { lighthouse, prepareAudit } = require("@cypress-audit/lighthouse"); +// const { pa11y } = require("@cypress-audit/pa11y"); +module.exports = { + e2e: { + baseUrl: "http://bstackdemo.com", // this is your app + setupNodeEvents(on, config) { + on("before:browser:launch", (browser = {}, launchOptions) => { + prepareAudit(launchOptions); + }); + on("task", { + lighthouse: lighthouse(), + // pa11y: pa11y(console.log.bind(console)), + }); + }, + }, +}; \ No newline at end of file diff --git a/cypress/e2e/HWPA/hwpa.cy.js b/cypress/e2e/HWPA/hwpa.cy.js new file mode 100644 index 0000000..73887f0 --- /dev/null +++ b/cypress/e2e/HWPA/hwpa.cy.js @@ -0,0 +1,259 @@ +//import home from '../selectors/home.css' +import robert from '../../selectors/robert.css' +import '@cypress-audit/lighthouse/commands'; + +describe('HWPA ticket generation', () => { + it('loads the correct screen', () => { + cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + cy.get(robert.EGovC_demo).should('be.visible') + .and('contain', 'li') + cy.get('body > div > div > details:nth-child(4) > summary').click(); + cy.get('body > div > div > details:nth-child(4) > ul > li:nth-child(2) > a').click(); + + + }) + + it('logs into user portal', () =>{ + cy.visit('https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_UserPortal_oc.js&AppName=Edit&AppCode=Start&OU_Name=EGOVC&LOG_Role=USER&ynDevTools=Y', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + + //cy.lighthouse(); + + + //enter login credentials and click login button + cy.get('#___5___Login___-4___USR_EMail').type('robert.wagner@egovc.de'); + cy.get('#___5___Login___-4___USR_Pass').type('Welcome1'); + cy.get('#CLK_6').click(); + cy.wait(3000); + + //open mobility -> logistik -> HWPA + cy.get('#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(9)').click(); + cy.get('#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(9) > div > details:nth-child(4) > summary > div').click(); + cy.get('#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(9) > div > details:nth-child(4) > div > div').first().click(); + + cy.wait(3000); + + //<<<------ 1 - Kontakt page ------>>> + cy.get('input.w3-check[name="ynHWK"]').check(); + cy.get('input.w3-check[name="ynGS"]').check(); + cy.get('input.w3-check[name="ynKFZ"]').check(); + cy.get('input.w3-input[name="PLZ"]').type('74889'); + + //Speichern und Weiter + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + + //<<<------ 2 - Antrag page ------>>> + cy.get('.w3-button[title="Antrag starten"]').click(); + + //<<<------ 1 - Kontakt page ------>>> + + //Nachname + //cy.get('') + cy.get('input.w3-input[name="USR_LastName"]').type('Grueber'); + + //vorname + cy.get('input.w3-input[name="USR_FirstName"]').type('Hans'); + + //Namenszusatz (Beispiel: Freifrau, Graf) + cy.get('input.w3-input[name="USR_NameAddOn1"]').type('Graf'); + + //Vorsatzworte zum Namen (Beispiel: von, van, de) + cy.get('input.w3-input[name="USR_NameAddOn2"]').type('van'); + + //Titel (Beispiel: Prof. Dr. med. + cy.get('input.w3-input[name="USR_Title"]').type('Dr.'); + + //E-Mail + cy.get('input.w3-input[name="USR_EMail"]').invoke('val').should('contain', 'robert.wagner@egovc.de'); + + //Telefonisch tagsüber zu erreichen (Angabe freiwillig) + cy.get('input.w3-input[name="Telefon"]').invoke('val').should('contain', '072321-2636 534'); + + //Mobiltelefon (Angabe freiwillig) + cy.get('input.w3-input[name="Mobiltelefon"]').type('123123123123'); + + //Rückrufnummer + //cy.get('input.w3-input[name="CallBack"]').type('123123123123'); + + //Starttermin + cy.get('input.w3-input[name="DateWish"]').type('2025-05-04'); + + //click "Speichern und Weiter" + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + //<<<------ 2 - UNTERNEHMENSDATEN page ------>>> + //Eingetragene Firmierung / Unternehmensname + cy.get('input.w3-input[name="ORG_Name"]').type('TestCorp123'); + + //Art des ausgeführten Handwerks + cy.get('input.w3-input[name="__Key_GenericString_2"]').type('Mahler'); + + //Betriebliche Steuernummer + cy.get('input.w3-input[name="TaxId"]').type('123123'); + + //Postleitzahl + //cy.get('input.w3-input[name="PLZ"]').type('552074'); + + //Ort + //cy.get('input.w3-input[name="Stadt"]').type('TestBurg'); + + //Straße + cy.get('input.w3-input[name="Strasse"]').type('TestStrasse'); + + //Hausnummer + cy.get('input.w3-input[name="StrasseNr"]').type('123'); + + //Hausnummerzusatz + cy.get('input.w3-input[name="StrasseNrExt"]').type('123123'); + + //check Handwerkskarte option + //cy.get('input.w3-check[name="rdGewNachweis"]').check(); + + //speichern und weiter + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + //<<<------ 3 - Handwerkskarte page ------>>> + + //Betreibsnummer + cy.get('input.w3-input[name="TaxId"]').type('123'); + + //upload hwpa mouse image + cy.get('input.fileUpload-drop-input').eq(0).selectFile('./cypress/upload_files/hwpa_mouse.png'); + cy.get('input.fileUpload-drop-input').eq(1).selectFile('./cypress/upload_files/hwpa_mouse.png'); + + //Speichern und Weiter + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + + ///<<<------ 4 - Gewerbenachsweis page ------>>> + //upload hwpa mouse + cy.get('input.fileUpload-drop-input').selectFile('./cypress/upload_files/hwpa_mouse.png'); + + //Speichern und Weiter + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + //<<<------ 5 - Fahrzeugphoto page ------>>> + cy.get('input.fileUpload-drop-input').selectFile('./cypress/upload_files/hwpa_mouse.png'); + + //upload hwpa mouse + cy.get('input.fileUpload-drop-input').selectFile('./cypress/upload_files/hwpa_mouse.png'); + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + + //<<<------ 6 - Zulassung page ------>>> + cy.get('input.w3-input[name="idKFZ"]').type('HD ZZ 777'); + cy.get('input.fileUpload-drop-input').selectFile('./cypress/upload_files/hwpa_mouse.png'); + + //Submit request!!! + cy.get('.w3-button[title="Antrag senden"]').click(); + cy.wait(3000); + + + + + + + }) + + it('logs into clerk portal', () =>{ + cy.visit('https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_ClerkPortal_oc.js&AppName=Edit&AppCode=Start&OU_Name=EGOVC&LOG_Role=CLERK&ynDevTools=Y', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + + //enter login credentials and login button + cy.get('#___5___Login___-4___USR_EMail').type('robert.wagner@egovc.de'); + cy.get('#___5___Login___-4___USR_Pass').type('Welcome1'); + cy.get('#CLK_6').click(); + cy.wait(3000); + + //open the first ticket ticket + cy.get('.w3-button[title="Abarbeitung starten"]').first().click(); + + cy.wait(3000); + + //Kontakt + //TODO: enter comment + // + //select ok + cy.get('select[name="ynPassed"]').select(1); + //Speichern und weiter + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + //Unternehmensdaten + //TODO: enter comment + // + //select ok + cy.get('select[name="ynPassed"]').select(1); + //Speichern und weiter + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + //GewerbenAchWeis + //TODO: enter comment + // + //verify Kopie der Handwerkskarte + cy.get('select[name="ynPassed"]').select(1); + //speichern und weiter + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + //zulassung des fahrzeugs + //TODO: enter comment + // + //select ok + cy.get('select[name="ynPassed"]').select(1); + //speichern und weiter + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + //photo des fahrzeugs + //TODO: enter comment + // + //select ok + cy.get('select[name="ynPassed"]').select(1); + //speichern und weiter + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + //Final page + //accept application and generate permits + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + + //KFZ regestreirung + cy.get('.w3-button[title="Genehmigung"]').click(); + cy.wait(3000); + + //2 - Fahrzeug + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + //3 - TEXT <<>>> + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.get('.w3-input[name="RBB_Buchungszeichen"]').type('testtesttest') + + //4 - Daten + //Speichern und weiter + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + //4 - Daten + cy.get('.w3-button[title="Speichern und Weiter"]').click(); + cy.wait(3000); + + //5 - PDF + //Dokumente versenden + cy.get('.w3-button[title="Dokumente versenden"]').click(); + cy.wait(6000); + + + + }) + + it('correctly selects Auto-Info-Prozess', () =>{ + + + }) +}) diff --git a/cypress/e2e/editor/formular-editor.cy.js b/cypress/e2e/editor/formular-editor.cy.js new file mode 100644 index 0000000..86271d0 --- /dev/null +++ b/cypress/e2e/editor/formular-editor.cy.js @@ -0,0 +1,105 @@ +import home from '../selectors/home.css' +import robert from '../selectors/robert.css' + +describe('Home page', () => { + it('3.2 Formular-Elemente', () => { + cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + //cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},) + cy.get(robert.EGovC_demo).should('be.visible') + .and('contain', 'li') + + //click formula button + cy.get("#CFD-5 > div:nth-child(9) > fieldset > button").click() + + //Formular Elemente is visible and contains expected elements + cy.get("#gridLeft > div > div.w3-card-4").should('be.visible') + .and('contain', 'btGeneric') + .and('contain', 'GenericApiCall') + .and('contain', 'GenericCalc') + .and('contain', 'GenericCalcedJSON') + .and('contain', 'GenericCheck') + .and('contain', 'GenericDataList') + .and('contain', 'GenericDate') + .and('contain', 'GenericDate2Local') + .and('contain', 'GenericDigits') + .and('contain', 'GenericDotWord') + .and('contain', 'GenericFixSelect') + .and('contain', 'GenericFloat') + .and('contain', 'GenericInteger') + .and('contain', 'GenericJSON') + .and('contain', 'GenericNumber') + .and('contain', 'GenericPath') + .and('contain', 'GenericRadio') + .and('contain', 'GenericRow') + .and('contain', 'GenericSelectFromExcel') + .and('contain', 'GenericSelectGroup') + .and('contain', 'GenericSelectHTM') + .and('contain', 'GenericSelectHTMLeika') + .and('contain', 'GenericString') + .and('contain', 'GenericStringArray') + .and('contain', 'GenericText') + .and('contain', 'GenericTime') + .and('contain', 'GenericUniqueNumber') + .and('contain', 'GenericWord') + .and('contain', 'GenericYN') + .and('contain', 'GenericYNFadeIn') + .and('contain', 'GenericYNFadeOut') + .and('contain', 'GenericYNRow') + + }) + it('3.1.1 Neues Formular // New form', () =>{ + + //load homepage + cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + + //selects a leistungen + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1)").click() + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1)").click() + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1) > div").click() + + //leistungen correctly selected + cy.get("[id^=___10___EditPortalMenu___-4___APP_Prefix").invoke('val').should('contain', 'Abholung_EGG') + + //click formula button + cy.get("#CFD-5 > div:nth-child(9) > fieldset > button").click() + + //click new formula + cy.get("#Button_-11_Forms > a:nth-child(1)").click({force: true}) + + //assert it opens new formula thingy + cy.get("body > div.alertify.ajs-movable.ajs-closable.ajs-pinnable.ajs-zoom.ajs-resizable.ajs-maximizable > div.ajs-modal > div > div.ajs-header").should('contain', 'Neues Formular') + + //enter text into new formula body + cy.get("#___355___EditForm_New___-354___FEG_Prefix").type("test123") + cy.get("#___355___EditForm_New___-354___FEG_Title").type("test123") + cy.get("#___355___EditForm_New___-354___FEG_Icon").select("book") + + //click OK + cy.get("body > div.alertify.ajs-movable.ajs-closable.ajs-pinnable.ajs-zoom.ajs-resizable.ajs-maximizable > div.ajs-modal > div > div.ajs-footer > div.ajs-primary.ajs-buttons > button.ajs-button.ajs-ok").click() + + //expect formula to be created + cy.get('#FEGMember > div.w3-card-4 > div:nth-child(2) > h4').should('contain', "test123") + + }) + + it('3.1.2 Formular editieren // Edit form', () =>{ + cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + cy.get('[id^=gridLeft]').should('be.visible') + //cy.get('details').eq(0).click(); + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1)").click() + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1)").click() + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1) > div").click() + + //contains value + cy.get("[id^=___10___EditPortalMenu___-4___APP_Prefix").invoke('val').should('contain', 'Abholung_EGG') + + + //click formula button + cy.get("#CFD-5 > div:nth-child(9) > fieldset > button").click() + + //cy.get("#CFD-11 > div > fieldset:nth-child(6) > div > button").trigger("mouseover").wait(1000) + //cy.get("#Button_-11_Process > a:nth-child(6) > div").click({force: true}) + + }) +}) diff --git a/cypress/e2e/editor/leistung.cy.js b/cypress/e2e/editor/leistung.cy.js new file mode 100644 index 0000000..fcdfa40 --- /dev/null +++ b/cypress/e2e/editor/leistung.cy.js @@ -0,0 +1,22 @@ +import home from '../selectors/home.css' +import robert from '../selectors/robert.css' + +describe('Home page', () => { + it('loads the correct screen', () => { + cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},) + cy.get(robert.EGovC_demo).should('be.visible') + .and('contain', 'li') + + + const indexToClick = 3; + + // Select the nth <details> element and click it + cy.get('details').eq(indexToClick).click(); + + cy.get('a[href="https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&AppName=Edit&AppCode=StartEditProcess&PO_Prefix=Leika&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1"]') + .click(); + }) +/* it('is possible to go to EGovC MRN HWPA screen', () =>{ + }) */ +}) diff --git a/cypress/e2e/editor/prozess.cy.js b/cypress/e2e/editor/prozess.cy.js new file mode 100644 index 0000000..550fbdd --- /dev/null +++ b/cypress/e2e/editor/prozess.cy.js @@ -0,0 +1,46 @@ +import home from '../selectors/home.css' +import robert from '../selectors/robert.css' + +describe('Home page', () => { + it('loads the correct screen', () => { + cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + //cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},) + cy.get(robert.EGovC_demo).should('be.visible') + .and('contain', 'li') + + + }) + it('correctly selects Auto-Genehmigung-Prozess', () =>{ + cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + cy.get('[id^=gridLeft]').should('be.visible') + //cy.get('details').eq(0).click(); + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1)").click() + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1)").click() + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1) > div").click() + + //contains value + cy.get("[id^=___10___EditPortalMenu___-4___APP_Prefix").invoke('val').should('contain', 'Abholung_EGG') + + + }) + + it('correctly selects Auto-Info-Prozess', () =>{ + cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + cy.get('[id^=gridLeft]').should('be.visible') + //cy.get('details').eq(0).click(); + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1)").click() + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1)").click() + cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1) > div").click() + + //contains value + cy.get("[id^=___10___EditPortalMenu___-4___APP_Prefix").invoke('val').should('contain', 'Abholung_EGG') + + //click process button + cy.get("#CFD-5 > div:nth-child(5) > fieldset").click() + + cy.get("#CFD-11 > div > fieldset:nth-child(6) > div > button").trigger("mouseover").wait(1000) + cy.get("#Button_-11_Process > a:nth-child(6) > div").click({force: true}) + + }) +}) diff --git a/cypress/e2e/editor/seiten-editor.cy .js b/cypress/e2e/editor/seiten-editor.cy .js new file mode 100644 index 0000000..fcdfa40 --- /dev/null +++ b/cypress/e2e/editor/seiten-editor.cy .js @@ -0,0 +1,22 @@ +import home from '../selectors/home.css' +import robert from '../selectors/robert.css' + +describe('Home page', () => { + it('loads the correct screen', () => { + cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},) + cy.get(robert.EGovC_demo).should('be.visible') + .and('contain', 'li') + + + const indexToClick = 3; + + // Select the nth <details> element and click it + cy.get('details').eq(indexToClick).click(); + + cy.get('a[href="https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&AppName=Edit&AppCode=StartEditProcess&PO_Prefix=Leika&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1"]') + .click(); + }) +/* it('is possible to go to EGovC MRN HWPA screen', () =>{ + }) */ +}) diff --git a/cypress/e2e/editor/serviceportal.cy .js b/cypress/e2e/editor/serviceportal.cy .js new file mode 100644 index 0000000..fcdfa40 --- /dev/null +++ b/cypress/e2e/editor/serviceportal.cy .js @@ -0,0 +1,22 @@ +import home from '../selectors/home.css' +import robert from '../selectors/robert.css' + +describe('Home page', () => { + it('loads the correct screen', () => { + cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},) + cy.get(robert.EGovC_demo).should('be.visible') + .and('contain', 'li') + + + const indexToClick = 3; + + // Select the nth <details> element and click it + cy.get('details').eq(indexToClick).click(); + + cy.get('a[href="https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&AppName=Edit&AppCode=StartEditProcess&PO_Prefix=Leika&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1"]') + .click(); + }) +/* it('is possible to go to EGovC MRN HWPA screen', () =>{ + }) */ +}) diff --git a/cypress/e2e/editor/workspace.cy.js b/cypress/e2e/editor/workspace.cy.js new file mode 100644 index 0000000..fcdfa40 --- /dev/null +++ b/cypress/e2e/editor/workspace.cy.js @@ -0,0 +1,22 @@ +import home from '../selectors/home.css' +import robert from '../selectors/robert.css' + +describe('Home page', () => { + it('loads the correct screen', () => { + cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },}) + //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},) + cy.get(robert.EGovC_demo).should('be.visible') + .and('contain', 'li') + + + const indexToClick = 3; + + // Select the nth <details> element and click it + cy.get('details').eq(indexToClick).click(); + + cy.get('a[href="https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&AppName=Edit&AppCode=StartEditProcess&PO_Prefix=Leika&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1"]') + .click(); + }) +/* it('is possible to go to EGovC MRN HWPA screen', () =>{ + }) */ +}) diff --git a/cypress/e2e/article.cy.js b/cypress/e2e/reference/article.cy.js similarity index 97% rename from cypress/e2e/article.cy.js rename to cypress/e2e/reference/article.cy.js index b7c0e47..577b06e 100644 --- a/cypress/e2e/article.cy.js +++ b/cypress/e2e/reference/article.cy.js @@ -1,5 +1,5 @@ -import editor from '../selectors/editor.css' -import article from '../selectors/article.css' +import editor from '../../selectors/editor.css' +import article from '../../selectors/article.css' describe('Article', () => { const seeMoreLink = 'https://github.com/helenanull/cypress-example' diff --git a/cypress/e2e/comments.cy.js b/cypress/e2e/reference/comments.cy.js similarity index 95% rename from cypress/e2e/comments.cy.js rename to cypress/e2e/reference/comments.cy.js index 1ea5a58..9ea0112 100644 --- a/cypress/e2e/comments.cy.js +++ b/cypress/e2e/reference/comments.cy.js @@ -1,4 +1,4 @@ -import article from '../selectors/article.css' +import article from '../../selectors/article.css' describe('Comments', () => { beforeEach(() => { diff --git a/cypress/e2e/header.cy.js b/cypress/e2e/reference/header.cy.js similarity index 93% rename from cypress/e2e/header.cy.js rename to cypress/e2e/reference/header.cy.js index ec37ada..78cca22 100644 --- a/cypress/e2e/header.cy.js +++ b/cypress/e2e/reference/header.cy.js @@ -1,4 +1,4 @@ -import header from '../selectors/header.css' +import header from '../../selectors/header.css' describe('Header', () => { it('contains correct elements when logged out', () => { diff --git a/cypress/e2e/home.cy.js b/cypress/e2e/reference/home.cy.js similarity index 97% rename from cypress/e2e/home.cy.js rename to cypress/e2e/reference/home.cy.js index 44be3c6..fa386e8 100644 --- a/cypress/e2e/home.cy.js +++ b/cypress/e2e/reference/home.cy.js @@ -1,4 +1,4 @@ -import home from '../selectors/home.css' +import home from '../../selectors/home.css' describe('Home page', () => { it('contains correct elements when logged out', () => { diff --git a/cypress/e2e/login.cy.js b/cypress/e2e/reference/login.cy.js similarity index 95% rename from cypress/e2e/login.cy.js rename to cypress/e2e/reference/login.cy.js index 455aeda..bf21226 100644 --- a/cypress/e2e/login.cy.js +++ b/cypress/e2e/reference/login.cy.js @@ -1,5 +1,5 @@ -import login from '../selectors/login.css' -import header from '../selectors/header.css' +import login from '../../selectors/login.css' +import header from '../../selectors/header.css' describe('Login', () => { // context is the same as describe diff --git a/cypress/e2e/profile.cy.js b/cypress/e2e/reference/profile.cy.js similarity index 97% rename from cypress/e2e/profile.cy.js rename to cypress/e2e/reference/profile.cy.js index 0809da7..c4fe6e1 100644 --- a/cypress/e2e/profile.cy.js +++ b/cypress/e2e/reference/profile.cy.js @@ -1,4 +1,4 @@ -import profile from '../selectors/profile.css' +import profile from '../../selectors/profile.css' describe('Profile page', () => { beforeEach(() => { diff --git a/cypress/e2e/register.cy.js b/cypress/e2e/reference/register.cy.js similarity index 95% rename from cypress/e2e/register.cy.js rename to cypress/e2e/reference/register.cy.js index 6714c89..d5914c6 100644 --- a/cypress/e2e/register.cy.js +++ b/cypress/e2e/reference/register.cy.js @@ -1,5 +1,5 @@ -import registration from '../selectors/register.css' -import header from '../selectors/header.css' +import registration from '../../selectors/register.css' +import header from '../../selectors/header.css' describe('Register', () => { // https://docs.cypress.io/guides/core-concepts/variables-and-aliases.html#Aliases diff --git a/cypress/e2e/settings.cy.js b/cypress/e2e/reference/settings.cy.js similarity index 90% rename from cypress/e2e/settings.cy.js rename to cypress/e2e/reference/settings.cy.js index 47bdbba..ebf75f9 100644 --- a/cypress/e2e/settings.cy.js +++ b/cypress/e2e/reference/settings.cy.js @@ -1,5 +1,5 @@ -import settings from '../selectors/settings.css' -import profile from '../selectors/profile.css' +import settings from '../../selectors/settings.css' +import profile from '../../selectors/profile.css' describe('Settings', () => { beforeEach(() => { diff --git a/cypress/selectors/robert.css.js b/cypress/selectors/robert.css.js new file mode 100644 index 0000000..269f2df --- /dev/null +++ b/cypress/selectors/robert.css.js @@ -0,0 +1,12 @@ +module.exports = { + title: '.container h1', + imageField: '[ng-model="$ctrl.formData.image"]', + usernameField: '[ng-model="$ctrl.formData.username"]', + bioField: '[ng-model="$ctrl.formData.bio"]', + emailField: '[ng-model="$ctrl.formData.email"]', + passwordField: '[ng-model="$ctrl.formData.password"]', + submitButton: 'button[type="submit"]', + logoutButton: 'button[ng-click="$ctrl.logout()"]', + errorMessages: '.error-messages', + EGovC_demo: 'details' +} diff --git a/cypress/support/command.js b/cypress/support/command.js new file mode 100644 index 0000000..26208f6 --- /dev/null +++ b/cypress/support/command.js @@ -0,0 +1 @@ +import '@cypress-audit/lighthouse/commands'; diff --git a/cypress/upload_files/hwpa_mouse.png b/cypress/upload_files/hwpa_mouse.png new file mode 100644 index 0000000..b5f34ff Binary files /dev/null and b/cypress/upload_files/hwpa_mouse.png differ diff --git a/package-lock.json b/package-lock.json index 54d5098..0933eab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,9 @@ "name": "cypress-example", "version": "1.0.0", "devDependencies": { - "cypress": "^13.6.2", + "@cypress-audit/lighthouse": "^1.4.2", + "cypress": "^13.7.0", + "cypress-utils": "^3.0.0", "eslint": "^7.23.0" } }, @@ -110,6 +112,15 @@ "node": ">=0.1.90" } }, + "node_modules/@cypress-audit/lighthouse": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@cypress-audit/lighthouse/-/lighthouse-1.4.2.tgz", + "integrity": "sha512-xiYeCnZYav89vsIWNtyXdU1mORyp/OGK3qQ8tDYN3HacYjTtcsp+avcoi4X2vXZWC7yu4dcu17SbTg4H64ymSQ==", + "dev": true, + "dependencies": { + "lighthouse": "^10.0.2" + } + }, "node_modules/@cypress/request": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.0.tgz", @@ -193,6 +204,174 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@puppeteer/browsers": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", + "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", + "dev": true, + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "progress": "2.0.3", + "proxy-agent": "6.3.0", + "tar-fs": "3.0.4", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=16.3.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sentry/core": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz", + "integrity": "sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==", + "dev": true, + "dependencies": { + "@sentry/hub": "6.19.7", + "@sentry/minimal": "6.19.7", + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/hub": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz", + "integrity": "sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==", + "dev": true, + "dependencies": { + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/minimal": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", + "integrity": "sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==", + "dev": true, + "dependencies": { + "@sentry/hub": "6.19.7", + "@sentry/types": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/node": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.7.tgz", + "integrity": "sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==", + "dev": true, + "dependencies": { + "@sentry/core": "6.19.7", + "@sentry/hub": "6.19.7", + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/types": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", + "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz", + "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==", + "dev": true, + "dependencies": { + "@sentry/types": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true + }, "node_modules/@types/node": { "version": "18.18.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.5.tgz", @@ -242,6 +421,18 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -378,6 +569,18 @@ "node": ">=0.8" } }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -423,12 +626,34 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", "dev": true }, + "node_modules/axe-core": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", + "dev": true + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bare-events": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", + "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", + "dev": true, + "optional": true + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -449,6 +674,15 @@ } ] }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -590,6 +824,48 @@ "node": ">= 0.8.0" } }, + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chromium-bidi": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", + "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", + "dev": true, + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -657,6 +933,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -717,12 +1007,47 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.12" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -737,22 +1062,36 @@ "node": ">= 8" } }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/csp_evaluator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.1.tgz", + "integrity": "sha512-N3ASg0C4kNPUaNxt1XAvzHIVuzdtr8KLgfk1O8WDyimp1GisPAHESupArO2ieHk9QWbrJ/WkQODyh21Ps/xhxw==", + "dev": true + }, "node_modules/cypress": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.6.2.tgz", - "integrity": "sha512-TW3bGdPU4BrfvMQYv1z3oMqj71YI4AlgJgnrycicmPZAXtvywVFZW9DAToshO65D97rCWfG/kqMFsYB6Kp91gQ==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.7.0.tgz", + "integrity": "sha512-UimjRSJJYdTlvkChcdcfywKJ6tUYuwYuk/n1uMMglrvi+ZthNhoRYcxnWgTqUtkl17fXrPAsD5XT2rcQYN1xKA==", "dev": true, "hasInstallScript": true, "dependencies": { "@cypress/request": "^3.0.0", "@cypress/xvfb": "^1.2.4", - "@types/node": "^18.17.5", "@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", + "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", "check-more-types": "^2.24.0", @@ -770,7 +1109,7 @@ "figures": "^3.2.0", "fs-extra": "^9.1.0", "getos": "^3.2.1", - "is-ci": "^3.0.0", + "is-ci": "^3.0.1", "is-installed-globally": "~0.4.0", "lazy-ass": "^1.6.0", "listr2": "^3.8.3", @@ -795,28 +1134,67 @@ "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, - "node_modules/cypress/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/cypress-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cypress-utils/-/cypress-utils-3.0.0.tgz", + "integrity": "sha512-qpP6jbD/k9/4jpFPhYVXKmsuyPsHNqL9/j6Lj6hxSGdWkwdchCnF1LvryvzLEVCKVqMJYa1yiTNcPNqUNnAEFQ==", "dev": true, "dependencies": { - "ms": "2.1.2" + "async": "^3.2.4", + "glob": "^8.0.3", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "yargs": "^17.5.1" + }, + "bin": { + "cypress-utils": "index.js" }, "engines": { - "node": ">=6.0" + "node": ">= 14.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "cypress": ">=10" } }, - "node_modules/cypress/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/cypress-utils/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cypress-utils/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cypress-utils/node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } }, "node_modules/cypress/node_modules/semver": { "version": "7.5.4", @@ -860,6 +1238,15 @@ "node": ">=0.10" } }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/dayjs": { "version": "1.11.9", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", @@ -867,9 +1254,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -895,6 +1282,29 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -904,6 +1314,12 @@ "node": ">=0.4.0" } }, + "node_modules/devtools-protocol": { + "version": "0.0.1155343", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1155343.tgz", + "integrity": "sha512-oD9vGBV2wTc7fAzAM6KC0chSgs234V8+qDEeK+mcbRj2UvcuA7lgBztGi/opj/iahcXD3BSj8Ymvib628yy9FA==", + "dev": true + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -916,6 +1332,18 @@ "node": ">=6.0.0" } }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -953,6 +1381,15 @@ "node": ">=8.6" } }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -962,19 +1399,49 @@ "node": ">=0.8.0" } }, - "node_modules/eslint": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", - "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", + "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", "enquirer": "^2.3.5", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", @@ -1261,6 +1728,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -1393,6 +1866,15 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -1422,6 +1904,44 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-uri": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "dev": true, + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4", + "fs-extra": "^11.2.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/get-uri/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/get-uri/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -1553,6 +2073,40 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/http-link-header": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/http-signature": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", @@ -1567,6 +2121,19 @@ "node": ">=0.10" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -1605,6 +2172,12 @@ "node": ">= 4" } }, + "node_modules/image-ssim": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/image-ssim/-/image-ssim-0.2.0.tgz", + "integrity": "sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -1664,6 +2237,47 @@ "node": ">=10" } }, + "node_modules/intl-messageformat": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-4.4.0.tgz", + "integrity": "sha512-z+Bj2rS3LZSYU4+sNitdHrwnBhr0wO80ZJSW8EzKDBowwUe3Q/UsvgCGjrwa+HPzoGCLEb9HAjfJgo4j2Sac8w==", + "dev": true, + "dependencies": { + "intl-messageformat-parser": "^1.8.1" + } + }, + "node_modules/intl-messageformat-parser": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.8.1.tgz", + "integrity": "sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg==", + "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser", + "dev": true + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, "node_modules/is-boolean-object": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", @@ -1691,6 +2305,21 @@ "is-ci": "bin.js" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1749,6 +2378,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -1800,6 +2438,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1812,6 +2462,21 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "dev": true + }, + "node_modules/js-library-detector": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.7.0.tgz", + "integrity": "sha512-c80Qupofp43y4cJ7+8TTDN/AsDwLi5oOm/plBrWI+iQt485vKXCco+yVmOwEgdo9VOdsYTuV0UlTeetVPTriXA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1919,6 +2584,89 @@ "node": ">= 0.8.0" } }, + "node_modules/lighthouse": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-10.4.0.tgz", + "integrity": "sha512-XQWHEWkJ8YxSPsxttBJORy5+hQrzbvGkYfeP3fJjyYKioWkF2MXfFqNK4ZuV4jL8pBu7Z91qnQP6In0bq1yXww==", + "dev": true, + "dependencies": { + "@sentry/node": "^6.17.4", + "axe-core": "4.7.2", + "chrome-launcher": "^0.15.2", + "configstore": "^5.0.1", + "csp_evaluator": "1.1.1", + "devtools-protocol": "0.0.1155343", + "enquirer": "^2.3.6", + "http-link-header": "^1.1.1", + "intl-messageformat": "^4.4.0", + "jpeg-js": "^0.4.4", + "js-library-detector": "^6.6.0", + "lighthouse-logger": "^1.4.1", + "lighthouse-stack-packs": "1.11.0", + "lodash": "^4.17.21", + "lookup-closest-locale": "6.2.0", + "metaviewport-parser": "0.3.0", + "open": "^8.4.0", + "parse-cache-control": "1.0.1", + "ps-list": "^8.0.0", + "puppeteer-core": "^20.8.0", + "robots-parser": "^3.0.0", + "semver": "^5.3.0", + "speedline-core": "^1.4.3", + "third-party-web": "^0.23.3", + "ws": "^7.0.0", + "yargs": "^17.3.1", + "yargs-parser": "^21.0.0" + }, + "bin": { + "chrome-debug": "core/scripts/manual-chrome-launcher.js", + "lighthouse": "cli/index.js", + "smokehouse": "cli/test/smokehouse/frontends/smokehouse-bin.js" + }, + "engines": { + "node": ">=16.16" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "dev": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/lighthouse-stack-packs": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.11.0.tgz", + "integrity": "sha512-sRr0z1S/I26VffRLq9KJsKtLk856YrJlNGmcJmbLX8dFn3MuzVPUbstuChEhqnSxZb8TZmVfthuXuwhG9vRoSw==", + "dev": true + }, + "node_modules/lighthouse/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/listr2": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", @@ -2041,6 +2789,18 @@ "node": ">=8" } }, + "node_modules/lookup-closest-locale": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz", + "integrity": "sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==", + "dev": true + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2053,12 +2813,48 @@ "node": ">=10" } }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "dev": true + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/metaviewport-parser": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/metaviewport-parser/-/metaviewport-parser-0.3.0.tgz", + "integrity": "sha512-EoYJ8xfjQ6kpe9VbVHvZTZHiOl4HL1Z18CrZ+qahvLXT7ZO4YTC2JMyt5FaUp9JJp6J4Ybb/z7IsCXZt86/QkQ==", + "dev": true + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -2110,6 +2906,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2122,6 +2930,35 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -2167,6 +3004,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -2205,6 +3059,63 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pac-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", + "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "dev": true, + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "pac-resolver": "^7.0.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2217,6 +3128,12 @@ "node": ">=6" } }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2295,12 +3212,83 @@ "node": ">=0.4.0" } }, + "node_modules/proxy-agent": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", + "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-agent/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", "dev": true }, + "node_modules/ps-list": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.1.tgz", + "integrity": "sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -2326,6 +3314,58 @@ "node": ">=6" } }, + "node_modules/puppeteer-core": { + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", + "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", + "dev": true, + "dependencies": { + "@puppeteer/browsers": "1.4.6", + "chromium-bidi": "0.4.16", + "cross-fetch": "4.0.0", + "debug": "4.3.4", + "devtools-protocol": "0.0.1147663", + "ws": "8.13.0" + }, + "engines": { + "node": ">=16.3.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/devtools-protocol": { + "version": "0.0.1147663", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", + "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==", + "dev": true + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/qs": { "version": "6.10.4", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", @@ -2347,6 +3387,12 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, "node_modules/regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -2368,6 +3414,15 @@ "throttleit": "^1.0.0" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -2426,6 +3481,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/robots-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.1.tgz", + "integrity": "sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -2531,6 +3595,80 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", + "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", + "dev": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speedline-core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/speedline-core/-/speedline-core-1.4.3.tgz", + "integrity": "sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==", + "dev": true, + "dependencies": { + "@types/node": "*", + "image-ssim": "^0.2.0", + "jpeg-js": "^0.4.1" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -2562,36 +3700,28 @@ "node": ">=0.10.0" } }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "node_modules/streamx": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", + "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" + "optionalDependencies": { + "bare-events": "^2.2.0" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" @@ -2716,12 +3846,40 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/tar-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "dev": true, + "dependencies": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "node_modules/third-party-web": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.23.4.tgz", + "integrity": "sha512-kwYnSZRhEvv0SBW2fp8SBBKRglMoBjV8xz6C31m0ewqOtknB5UL+Ihg+M81hyFY5ldkZuGWPb+e4GVDkzf/gYg==", + "dev": true + }, "node_modules/throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", @@ -2761,6 +3919,12 @@ "node": ">=6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -2806,6 +3970,37 @@ "node": ">=8" } }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", @@ -2872,6 +4067,22 @@ "extsprintf": "^1.2.0" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -2919,12 +4130,90 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", diff --git a/package.json b/package.json index 7ad7c1c..f6e8eaf 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "cy:ci": "cypress run --env device=web --record --parallel --browser chrome --headless" }, "devDependencies": { - "cypress": "^13.6.2", + "@cypress-audit/lighthouse": "^1.4.2", + "cypress": "^13.7.0", + "cypress-utils": "^3.0.0", "eslint": "^7.23.0" } }