From 8ad0de9f28916e3f96c1571136974b3b274ed41c Mon Sep 17 00:00:00 2001 From: SanttuA Date: Wed, 31 May 2023 10:14:07 +0300 Subject: [PATCH] Added initial cypress configs and tests (#247) --- .eslintrc | 96 +- .github/workflows/cypress-tests.yml | 44 + .gitignore | 2 + cypress.config.js | 9 + cypress/e2e/home-page.cy.js | 44 + cypress/e2e/make-reservation.cy.js | 109 + cypress/e2e/search-page.cy.js | 30 + cypress/fixtures/oidc_user.json | 20 + cypress/fixtures/purpose.json | 27 + cypress/fixtures/reservation_office.json | 69 + cypress/fixtures/resource.json | 1672 ++++++++++++ cypress/fixtures/resource_office_detail.json | 223 ++ cypress/fixtures/resource_office_search.json | 230 ++ cypress/fixtures/unit.json | 276 ++ cypress/fixtures/user.json | 19 + cypress/support/commands.js | 25 + cypress/support/e2e.js | 20 + cypress/utils/scripts.js | 66 + package-lock.json | 2574 ++++++++++++------ package.json | 6 +- src/index.js | 5 + 21 files changed, 4749 insertions(+), 817 deletions(-) create mode 100644 .github/workflows/cypress-tests.yml create mode 100644 cypress.config.js create mode 100644 cypress/e2e/home-page.cy.js create mode 100644 cypress/e2e/make-reservation.cy.js create mode 100644 cypress/e2e/search-page.cy.js create mode 100644 cypress/fixtures/oidc_user.json create mode 100644 cypress/fixtures/purpose.json create mode 100644 cypress/fixtures/reservation_office.json create mode 100644 cypress/fixtures/resource.json create mode 100644 cypress/fixtures/resource_office_detail.json create mode 100644 cypress/fixtures/resource_office_search.json create mode 100644 cypress/fixtures/unit.json create mode 100644 cypress/fixtures/user.json create mode 100644 cypress/support/commands.js create mode 100644 cypress/support/e2e.js create mode 100644 cypress/utils/scripts.js diff --git a/.eslintrc b/.eslintrc index 07be06808..ccba3cfca 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,20 +1,20 @@ { "extends": "airbnb", - "env": { "browser": true, "node": true, - "jest": true + "jest": true, + "cypress/globals": true }, - "globals": { "SETTINGS": true }, - "parser": "babel-eslint", - - "plugins": ["import", "react"], - + "plugins": [ + "import", + "react", + "cypress" + ], "settings": { "import/resolver": { "webpack": { @@ -22,75 +22,79 @@ } } }, - "rules": { - "class-methods-use-this": "off", - "import/no-extraneous-dependencies": "off", - "import/order": [ "warn", { "groups": [ "builtin", "external", - ["internal", "parent", "sibling", "index"] + [ + "internal", + "parent", + "sibling", + "index" + ] ], "newlines-between": "always" } ], - "no-debugger": "warn", - "no-unused-vars": "warn", - "import/prefer-default-export": "off", - - "new-cap": ["error", { "capIsNew": false, "newIsCap": true }], - - "no-underscore-dangle": ["error", { "allow": ["_paq"] }], - + "new-cap": [ + "error", + { + "capIsNew": false, + "newIsCap": true + } + ], + "no-underscore-dangle": [ + "error", + { + "allow": [ + "_paq" + ] + } + ], "no-unused-expressions": "off", - - "no-use-before-define": ["error", "nofunc"], - + "no-use-before-define": [ + "error", + "nofunc" + ], "react/forbid-prop-types": "off", - "react/jsx-filename-extension": "off", - - "react/jsx-sort-props": ["error", { "ignoreCase": true }], - + "react/jsx-sort-props": [ + "error", + { + "ignoreCase": true + } + ], "react/no-string-refs": "off", - - "react/no-unused-prop-types": ["error", { "skipShapeProps": true }], - + "react/no-unused-prop-types": [ + "error", + { + "skipShapeProps": true + } + ], "react/prefer-stateless-function": "off", - "linebreak-style": 0, - - "no-restricted-globals": ["error", "history"], - + "no-restricted-globals": [ + "error", + "history" + ], "prefer-destructuring": "off", - "react/destructuring-assignment": "off", - "react/require-default-props": "off", - "jsx-a11y/click-events-have-key-events": "off", - "jsx-a11y/anchor-is-valid": "off", - "jsx-a11y/label-has-for": "off", - "jsx-a11y/no-static-element-interactions": "off", - "jsx-a11y/no-noninteractive-tabindex": "off", - "react/no-array-index-key": "off", - "comma-dangle": "off", - "arrow-parens": "off", "function-paren-newline": "off", "prefer-object-spread": "off", @@ -98,7 +102,6 @@ "function-call-argument-newline": "off", "no-restricted-exports": "off", "no-multiple-empty-lines": "off", - "react/function-component-definition": "off", "react/jsx-curly-newline": "off", "react/jsx-no-constructed-context-values": "off", @@ -118,8 +121,7 @@ "react/sort-comp": "off", "react/prop-types": "off", "react/jsx-indent": "warn", - "import/no-import-module-exports": "off", "jsx-a11y/control-has-associated-label": "off" } -} +} \ No newline at end of file diff --git a/.github/workflows/cypress-tests.yml b/.github/workflows/cypress-tests.yml new file mode 100644 index 000000000..16bfa8b3b --- /dev/null +++ b/.github/workflows/cypress-tests.yml @@ -0,0 +1,44 @@ +name: Cypress Tests + +on: + push: + branches: + - master + - develop + pull_request: + branches: + - '**' + +jobs: + cypress-run: + runs-on: ubuntu-22.04 + strategy: + matrix: + node: [18] + steps: + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + - run: node -v + + - name: Checkout + uses: actions/checkout@v2 + + - name: install dependencies + run: | + sudo apt-get update + sudo apt-get install --no-install-recommends libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb -y + + - name: create env file + run: | + touch .env + echo PORT=3000 >> .env + cat .env + + - name: Cypress run + uses: cypress-io/github-action@v5 + with: + install-command: npm ci --silent + build: npm run build + start: npm run start:production diff --git a/.gitignore b/.gitignore index 1335c036a..c63512855 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ node_modules npm-debug.log yarn-error.log /.idea +cypress/videos +cypress/screenshots diff --git a/cypress.config.js b/cypress.config.js new file mode 100644 index 000000000..97f47c412 --- /dev/null +++ b/cypress.config.js @@ -0,0 +1,9 @@ +const { defineConfig } = require("cypress"); + +module.exports = defineConfig({ + e2e: { + setupNodeEvents(on, config) { + // implement node event listeners here + }, + }, +}); diff --git a/cypress/e2e/home-page.cy.js b/cypress/e2e/home-page.cy.js new file mode 100644 index 000000000..fb740db10 --- /dev/null +++ b/cypress/e2e/home-page.cy.js @@ -0,0 +1,44 @@ +/// + +describe('home page', () => { + beforeEach(() => { + Cypress.config('defaultCommandTimeout', 20000); + cy.fixture('purpose.json').as('purpose'); + cy.intercept('GET', '**/purpose/', { fixture: 'purpose.json' }).as('getPurpose'); + }); + + it('should have the correct headings', () => { + cy.visit('localhost:3000'); + cy.get('.app-HomePage__content h1').should('have.text', 'Varaamo'); + cy.get('.app-HomePage__content h2').should('have.text', 'Turun vuokrattavat tilat, laitteet ja asiantuntijapalvelut varattavana'); + }); + + it('should have the correct header navigation links', () => { + cy.visit('localhost:3000'); + cy.get('.navbar-header a').contains('Varaamo'); + cy.get('.navbar-nav a').contains('Haku'); + cy.get('.navbar-nav a').contains('Lisää tietoa'); + }); + + it('should have search box and search button', () => { + cy.visit('localhost:3000'); + cy.get('.app-HomeSearchBox input').should('be.visible'); + cy.get('.app-HomeSearchBox button').should('be.visible').should('have.text', 'Hae'); + }); + + it('should have the correct purpose banners', () => { + cy.visit('localhost:3000'); + cy.wait('@getPurpose'); + cy.get('.app-HomePageContent__banner').should('have.length', 2); + cy.get('.app-HomePageContent__banner h3').first().should('have.text', 'Kokoustila'); + cy.get('.app-HomePageContent__banner h3').last().should('have.text', 'Testikäyttötarkoitus'); + }); + + it('should have the correct footer navigation links', () => { + cy.visit('localhost:3000'); + cy.get('footer a').should('have.length', 3); + cy.get('footer a').first().should('have.text', 'www.turku.fi'); + cy.get('footer a').eq(1).should('have.text', 'Saavutettavuusseloste'); + cy.get('footer a').last().should('have.text', 'Palautteesi voit lähettää täältä.'); + }); +}); diff --git a/cypress/e2e/make-reservation.cy.js b/cypress/e2e/make-reservation.cy.js new file mode 100644 index 000000000..0bb315f19 --- /dev/null +++ b/cypress/e2e/make-reservation.cy.js @@ -0,0 +1,109 @@ +/// + +const { + generateOpeningHrs, getTomorrowDate, formatDateTime +} = require('../utils/scripts'); +const userOidc = require('../fixtures/oidc_user.json'); +const userData = require('../fixtures/user.json'); +const reservationOffice = require('../fixtures/reservation_office.json'); + + +describe('make reservations', () => { + beforeEach(() => { + cy.fixture('purpose.json').as('purpose'); + cy.fixture('resource_office_search.json').as('resourceSearch'); + cy.fixture('resource_office_detail.json').as('resourceDetail'); + cy.fixture('unit.json').as('unit'); + }); + + // eslint-disable-next-line func-names + it('normal reservation can be made', function () { + cy.intercept('GET', '**/purpose/', { fixture: 'purpose.json' }).as('getPurpose'); + cy.intercept('GET', '**/unit/*', { fixture: 'unit.json' }).as('getUnit'); + cy.intercept('GET', '**/resource/*', { fixture: 'resource_office_search.json' }).as('getResource'); + cy.intercept('GET', '**/user/*', { fixture: 'user.json' }).as('getUser'); + + // start in home page + cy.visit('localhost:3000'); + cy.get('#CybotCookiebotDialogBodyButtonDecline').click(); + + // force user login data + cy.window().then((win) => { + // eslint-disable-next-line no-param-reassign + win.INITIAL_STATE = { + data: { + users: { + '123b6480-a639-62ab-1234-111ac567j19c': userData + } + } + }; + }); + cy.window().its('store').invoke('dispatch', { + type: 'redux-oidc/USER_FOUND', + payload: userOidc + }); + + cy.wait('@getPurpose'); + cy.get('input[type="text"]').should('be.visible').type('toimisto{enter}'); + + // search page + cy.wait('@getUnit'); + cy.wait('@getResource'); + cy.get('.app-ResourceCard__content a').should('be.visible').should('have.length', 1).should('have.text', 'Toimisto 1bKirjasto') + .click(); + + // resource page + const updatedDetail = { ...this.resourceDetail, opening_hours: generateOpeningHrs() }; + cy.intercept('GET', `**/resource/${updatedDetail.id}/*`, updatedDetail).as('getResourceDetail'); + cy.get('h1').should('be.visible').should('have.text', updatedDetail.name.fi); + cy.get('#reservation-panel h2').should('be.visible').should('have.text', 'Ajanvaraus'); + + cy.get('#dateField').should('be.visible').clear(); + const tomorrowDate = getTomorrowDate(); + cy.get('#dateField').should('be.visible').type(`${tomorrowDate}{enter}`); + + cy.get('.app-TimeSlots--date--selected button').first().click(); + cy.get('.reservation-calendar__reserve-button').should('be.visible').should('have.text', 'Tee varaus').click(); + + // reservation page + cy.get('h1').should('be.visible').should('have.text', 'Uusi varaus'); + cy.get('.app-ReservationPage__phase-index').should('have.length', 2); + cy.get('.app-ReservationPage__phase-title').should('have.length', 2); + cy.get('.app-ReservationPage__phase-index').first().should('be.visible').should('have.text', '1'); + cy.get('.app-ReservationPage__phase-index').last().should('be.visible').should('have.text', '2'); + cy.get('.app-ReservationPage__phase-title').first().should('be.visible').should('have.text', 'Varauksen lisätiedot'); + cy.get('.app-ReservationPage__phase-title').last().should('be.visible').should('have.text', 'Valmis'); + cy.get('h3').should('be.visible').contains('Varaajan tiedot'); + cy.get('#reserverName').should('be.visible').should('have.value', userData.display_name); + cy.get('#reserverPhoneNumber').should('be.visible').type('0401234567'); + cy.get('#reserverEmailAddress').should('be.visible').should('have.value', userData.email); + cy.get('#universalData').select(1); + cy.get('#reservationExtraQuestions').should('be.visible').type('This is a test reservation'); + cy.get('.terms-checkbox-field input').should('be.visible').click(); + + const { begin, end } = formatDateTime(tomorrowDate, '08:00', '08:30'); + const updatedReservation = { ...reservationOffice, begin, end }; + cy.intercept('POST', '**/reservation/', { body: updatedReservation }).as('postReservation'); + + cy.get('.form-controls button').contains('Tallenna').should('be.visible').click(); + cy.wait('@postReservation'); + + // reservation success page + cy.get('h2.app-ReservationPage__header').should('be.visible').should('have.text', 'Varaus onnistui'); + cy.get('h2#reservationDetails').should('be.visible').should('have.text', 'Varauksen lisätiedot'); + cy.get('.app-ReservationConfirmation__field').first().should('be.visible') + .should('have.text', `Varaaja / vuokraaja${userData.display_name}`); + + cy.intercept('GET', '**/reservation/*', { + body: { + count: 1, next: null, previous: null, results: [updatedReservation] + } + }).as('getReservations'); + cy.get('button').contains('Palaa omiin varauksiin').click(); + + // my reservations page + cy.wait('@getReservations'); + cy.get('h1').should('be.visible').should('have.text', 'Omat varaukset'); + cy.get('li.reservation').should('have.length', 1).contains(this.resourceDetail.name.fi); + }); +}); diff --git a/cypress/e2e/search-page.cy.js b/cypress/e2e/search-page.cy.js new file mode 100644 index 000000000..326c50e07 --- /dev/null +++ b/cypress/e2e/search-page.cy.js @@ -0,0 +1,30 @@ +/// + +describe('search page', () => { + beforeEach(() => { + cy.fixture('purpose.json').as('purpose'); + cy.fixture('unit.json').as('unit'); + cy.fixture('resource.json').as('resource'); + cy.intercept('GET', '**/purpose/', { fixture: 'purpose.json' }).as('getPurpose'); + cy.intercept('GET', '**/unit/*', { fixture: 'unit.json' }).as('getUnit'); + cy.intercept('GET', '**/resource/*', { fixture: 'resource.json' }).as('getResource'); + }); + + it('should have the correct headings', () => { + cy.visit('localhost:3000/search'); + cy.get('.app-SearchControlsContainer__content h1').should('have.text', 'Mitä haluat tehdä?'); + }); + + // eslint-disable-next-line func-names + it('should have correct search results', function () { + cy.visit('localhost:3000/search'); + cy.wait('@getPurpose'); + cy.wait('@getUnit'); + cy.wait('@getResource'); + const resourceNames = this.resource.results.map((resource) => resource.name.fi); + cy.get('.app-ResourceCard').should('have.length', resourceNames.length); + cy.get('.app-ResourceCard__content h3').each(($el, index) => { + expect($el.text()).to.equal(resourceNames[index]); + }); + }); +}); diff --git a/cypress/fixtures/oidc_user.json b/cypress/fixtures/oidc_user.json new file mode 100644 index 000000000..031ebefe4 --- /dev/null +++ b/cypress/fixtures/oidc_user.json @@ -0,0 +1,20 @@ +{ + "id_token": "123abc-id-token", + "access_token": "123abc-access-token", + "token_type": "bearer", + "scope": "openid profile https://auth.turku.fi/respa", + "profile": { + "sub": "123b6480-a639-62ab-1234-111ac567j19c", + "auth_time": 1670000000, + "name": "Test Tester", + "given_name": "Test", + "family_name": "Tester", + "nickname": "Test Tester", + "birthdate": "1985-07-12", + "email": "test@example.com", + "email_verified": false, + "oid": "11111", + "amr": "turku_suomifi" + }, + "expires_at": 2536915693 +} \ No newline at end of file diff --git a/cypress/fixtures/purpose.json b/cypress/fixtures/purpose.json new file mode 100644 index 000000000..9d426e0b8 --- /dev/null +++ b/cypress/fixtures/purpose.json @@ -0,0 +1,27 @@ +{ + "count": 2, + "next": null, + "previous": null, + "results": [ + { + "name": { + "fi": "Kokoustila", + "en": "Meeting room", + "sv": "Mötesrum" + }, + "parent": null, + "id": "meeting-room", + "image": null + }, + { + "name": { + "fi": "Testikäyttötarkoitus", + "en": "Test purpose", + "sv": "Test syfte" + }, + "parent": null, + "id": "test-purpose", + "image": null + } + ] +} \ No newline at end of file diff --git a/cypress/fixtures/reservation_office.json b/cypress/fixtures/reservation_office.json new file mode 100644 index 000000000..3d1354b82 --- /dev/null +++ b/cypress/fixtures/reservation_office.json @@ -0,0 +1,69 @@ +{ + "url": "https://respa.fi/v1/reservation/123/", + "id": 123, + "resource": "axwhvvq4er3a", + "begin": "2023-06-20T08:00:00+03:00", + "end": "2023-06-20T08:30:00+03:00", + "is_own": true, + "state": "confirmed", + "need_manual_confirmation": false, + "require_assistance": false, + "require_workstation": false, + "staff_event": false, + "user_permissions": { + "can_modify": true, + "can_delete": true + }, + "preferred_language": "fi", + "type": "normal", + "has_arrived": false, + "takes_place_virtually": false, + "virtual_address": "", + "universal_data": { + "type": "select", + "selected_option": "1", + "field": { + "id": 1, + "description": "Valitse mihin järjestykseen toivot tilan pöytien asetettavan", + "label": "Pöytien järjestys", + "options": [ + { + "id": 1, + "text": "Kolme riviä" + }, + { + "id": 2, + "text": "Pöydät U-muotoisesti" + }, + { + "id": 3, + "text": "Kahtena neliösaarekkeena" + } + ] + } + }, + "reserver_name": "Test Tester", + "reserver_phone_number": "0401234567", + "reserver_address_street": "", + "reserver_address_zip": "", + "reserver_address_city": "", + "company": "", + "event_description": "", + "event_subject": "", + "reserver_id": "", + "number_of_participants": 1, + "participants": "", + "reserver_email_address": "test@example.fi", + "host_name": "", + "reservation_extra_questions": "This is a test reservation", + "home_municipality": null, + "billing_first_name": "", + "billing_last_name": "", + "billing_phone_number": "", + "billing_email_address": "", + "billing_address_street": "", + "billing_address_zip": "", + "billing_address_city": "", + "order": null, + "has_catering_order": false +} \ No newline at end of file diff --git a/cypress/fixtures/resource.json b/cypress/fixtures/resource.json new file mode 100644 index 000000000..c48612384 --- /dev/null +++ b/cypress/fixtures/resource.json @@ -0,0 +1,1672 @@ +{ + "count": 10, + "next": null, + "previous": null, + "results": [ + { + "id": "axwhvvq4er3a", + "products": [], + "purposes": [ + { + "name": { + "fi": "Kokoustila", + "en": "Meeting room", + "sv": "Mötesrum" + }, + "parent": null, + "id": "meeting-room", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Testiresurssityyppi", + "en": "Test resource type", + "sv": "Testresurs typ" + }, + "main_type": "space", + "id": "axwhvxarnyzq" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T16:00:00+03:00" + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "reserver_address_street", + "reserver_address_zip", + "reserver_address_city", + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "company", + "event_description", + "reserver_id", + "number_of_participants", + "reserver_email_address", + "event_subject", + "reservation_extra_questions", + "billing_email_address", + "billing_first_name", + "billing_last_name", + "billing_phone_number", + "home_municipality", + "host_name", + "participants", + "require_assistance", + "require_workstation" + ], + "required_reservation_extra_fields": [], + "included_reservation_home_municipality_fields": [ + { + "id": "kaarina", + "name": { + "fi": "Kaarina", + "en": "Kaarina", + "sv": "S:t Karins" + } + }, + { + "id": "raisio", + "name": { + "fi": "Raisio", + "en": "Raisio", + "sv": "Reso" + } + }, + { + "id": "turku", + "name": { + "fi": "Turku", + "en": "Turku", + "sv": "Åbo" + } + } + ], + "is_favorite": false, + "generic_terms": { + "fi": "Tämä on testikäyttöehdot.", + "en": "This is a test terms of use.", + "sv": "Detta är ett test användarvillkor." + }, + "payment_terms": { + "fi": "Tämä on testimaksuehdot.", + "en": "This is the test payment terms.", + "sv": "Detta är testbetalningsvillkoren." + }, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "tags": [], + "max_price_per_hour": null, + "min_price_per_hour": null, + "universal_field": [ + { + "id": 1, + "field_type": "Select", + "data": null, + "description": { + "fi": "Valitse mihin järjestykseen toivot tilan pöytien asetettavan", + "en": "Choose the order in which you want the tables in the space to be placed", + "sv": "Välj i vilken ordning du vill att borden i utrymmet ska placeras" + }, + "label": { + "fi": "Pöytien järjestys", + "en": "Table positions", + "sv": "Ordningen på borden" + }, + "resource": "axwhvvq4er3a", + "options": [ + { + "id": 1, + "text": { + "fi": "Kolme riviä", + "en": "Three rows", + "sv": "Tre rader" + } + }, + { + "id": 2, + "text": { + "fi": "Pöydät U-muotoisesti", + "en": "Tables in U-shape", + "sv": "Bord i U-form" + } + }, + { + "id": 3, + "text": { + "fi": "Kahtena neliösaarekkeena", + "en": "In two square islands", + "sv": "På två kvadratiska öar" + } + } + ], + "name": "table positions" + } + ], + "reservable_by_all_staff": false, + "created_at": "2022-11-02T13:20:16.144927+02:00", + "modified_at": "2023-03-16T12:50:12.414393+02:00", + "public": true, + "name": { + "fi": "Toimisto 1b", + "en": "Office 1b", + "sv": "Kontor 1b" + }, + "description": { + "fi": "Tämä on toimistotilan kuvausteksti.", + "en": "This is the office space's description.", + "sv": "Detta är kontorsutrymmets beskrivning." + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": false, + "authentication": "strong", + "people_capacity": 5, + "area": null, + "min_period": "00:30:00", + "max_period": "00:30:00", + "cooldown": "00:00:00", + "slot_size": "00:30:00", + "max_reservations_per_user": null, + "reservable": true, + "reservation_info": { + "fi": "Reservation info fi", + "en": "Reservation info en", + "sv": "Reservation info sv" + }, + "responsible_contact_info": { + "fi": "Responsible contact info [fi]", + "en": "Responsible contact info [en]", + "sv": "Responsible contact info [sv]" + }, + "specific_terms": { + "fi": "Resurssin specific terms fi", + "en": "Resource specific terms en", + "sv": "Resource specific terms sv" + }, + "reservation_additional_information": { + "fi": "Reservation additional info fi", + "en": "Reservation additional info en", + "sv": "Reservation additional info sv" + }, + "min_price": "0.00", + "max_price": "100.00", + "price_type": "fixed", + "cash_payments_allowed": false, + "payment_requested_waiting_time": 0, + "generate_access_codes": true, + "reservation_feedback_url": "", + "external_reservation_url": null, + "is_external": false, + "unit": "axwhvuiljcdq", + "location": { + "type": "Point", + "coordinates": [ + 60.4436451, + 22.2441131 + ] + } + }, + { + "id": "axxdgpitdkuq", + "products": [ + { + "id": "axxdgtum7icq", + "type": "rent", + "name": { + "fi": "Testivuokra", + "en": "Test rent", + "sv": "Test hyra" + }, + "description": null, + "price": { + "type": "per_period", + "tax_percentage": "24.00", + "amount": "6.00", + "period": "00:30:00" + }, + "max_quantity": 1, + "product_customer_groups": [ + { + "id": "suomifi-1", + "price": "3.00", + "customer_group": { + "id": "axxdglu2vdla", + "name": { + "fi": "Suomi.fi", + "en": "Suomi.fi", + "sv": "Suomi.fi" + }, + "only_for_login_methods": [ + { + "login_method_id": "turku_suomifi" + } + ] + } + } + ], + "time_slot_prices": [], + "price_tax_free": "4.84" + } + ], + "purposes": [ + { + "name": { + "fi": "Testikäyttötarkoitus", + "en": "Test purpose", + "sv": "Test syfte" + }, + "parent": null, + "id": "test-purpose", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Testiresurssityyppi", + "en": "Test resource type", + "sv": "Testresurs typ" + }, + "main_type": "space", + "id": "axwhvxarnyzq" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T16:00:00+03:00" + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "reserver_email_address", + "billing_email_address", + "billing_first_name", + "billing_last_name", + "billing_phone_number" + ], + "required_reservation_extra_fields": [ + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "billing_email_address", + "billing_first_name", + "billing_last_name" + ], + "included_reservation_home_municipality_fields": [], + "is_favorite": false, + "generic_terms": {}, + "payment_terms": {}, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "tags": [], + "max_price_per_hour": null, + "min_price_per_hour": 1.0, + "universal_field": [], + "reservable_by_all_staff": false, + "created_at": "2022-11-24T10:33:31.562873+02:00", + "modified_at": "2023-01-10T08:39:53.163796+02:00", + "public": true, + "name": { + "fi": "Rajattu vain Suomi.fi käyttäjille", + "en": "Restricted to only Suomifi users", + "sv": "Endast för användare av Suomi.fi" + }, + "description": { + "fi": "test", + "en": "test", + "sv": "test" + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": false, + "authentication": "strong", + "people_capacity": 5, + "area": null, + "min_period": "00:30:00", + "max_period": null, + "cooldown": "00:00:00", + "slot_size": "00:30:00", + "max_reservations_per_user": null, + "reservable": true, + "reservation_info": null, + "responsible_contact_info": null, + "specific_terms": null, + "reservation_additional_information": null, + "min_price": "1.00", + "max_price": null, + "price_type": "hourly", + "cash_payments_allowed": false, + "payment_requested_waiting_time": 0, + "generate_access_codes": true, + "reservation_feedback_url": "", + "external_reservation_url": null, + "is_external": false, + "unit": "axwhvvif5ydq", + "location": null + }, + { + "id": "axxdgngxtelq", + "products": [ + { + "id": "axxdgssornnq", + "type": "rent", + "name": { + "fi": "Testivuokra", + "en": "Test rent", + "sv": "Test hyra" + }, + "description": null, + "price": { + "type": "per_period", + "tax_percentage": "24.00", + "amount": "10.00", + "period": "00:30:00" + }, + "max_quantity": 1, + "product_customer_groups": [ + { + "id": "city-1", + "price": "2.00", + "customer_group": { + "id": "axxdgkherjra", + "name": { + "fi": "Turun kaupungin työntekijät", + "en": "City of Turku employees", + "sv": "Åbo stads anställda" + }, + "only_for_login_methods": [ + { + "login_method_id": "turku_adfs" + } + ] + } + } + ], + "time_slot_prices": [], + "price_tax_free": "8.06" + } + ], + "purposes": [ + { + "name": { + "fi": "Testikäyttötarkoitus", + "en": "Test purpose", + "sv": "Test syfte" + }, + "parent": null, + "id": "test-purpose", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Testiresurssityyppi", + "en": "Test resource type", + "sv": "Testresurs typ" + }, + "main_type": "space", + "id": "axwhvxarnyzq" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T16:00:00+03:00" + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "reserver_email_address", + "billing_email_address", + "billing_first_name", + "billing_last_name", + "billing_phone_number" + ], + "required_reservation_extra_fields": [ + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "billing_email_address", + "billing_first_name", + "billing_last_name" + ], + "included_reservation_home_municipality_fields": [], + "is_favorite": false, + "generic_terms": {}, + "payment_terms": {}, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "tags": [], + "max_price_per_hour": null, + "min_price_per_hour": 1.0, + "universal_field": [], + "reservable_by_all_staff": false, + "created_at": "2022-11-24T10:31:53.739005+02:00", + "modified_at": "2023-01-10T08:39:41.793347+02:00", + "public": true, + "name": { + "fi": "Rajattu vain Turun työntekijöille", + "en": "Restricted to only City of Turku employees", + "sv": "Endast anställda i Åbo stad" + }, + "description": { + "fi": "test", + "en": "test", + "sv": "test" + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": false, + "authentication": "strong", + "people_capacity": 5, + "area": null, + "min_period": "00:30:00", + "max_period": null, + "cooldown": "00:00:00", + "slot_size": "00:30:00", + "max_reservations_per_user": null, + "reservable": true, + "reservation_info": null, + "responsible_contact_info": null, + "specific_terms": null, + "reservation_additional_information": null, + "min_price": "1.00", + "max_price": null, + "price_type": "hourly", + "cash_payments_allowed": false, + "payment_requested_waiting_time": 0, + "generate_access_codes": true, + "reservation_feedback_url": "", + "external_reservation_url": null, + "is_external": false, + "unit": "axwhvvif5ydq", + "location": null + }, + { + "id": "axwhwc5ffyza", + "products": [ + { + "id": "axwhwjcftkiq", + "type": "extra", + "name": { + "fi": "Lounas", + "en": "Lunch", + "sv": "Lunch" + }, + "description": null, + "price": { + "type": "fixed", + "tax_percentage": "24.00", + "amount": "10.00" + }, + "max_quantity": 10, + "product_customer_groups": [], + "time_slot_prices": [], + "price_tax_free": "8.06" + }, + { + "id": "axwhwkrregba", + "type": "rent", + "name": { + "fi": "Toimiston vuokra", + "en": "Office rent", + "sv": "Kontorshyra" + }, + "description": null, + "price": { + "type": "per_period", + "tax_percentage": "14.00", + "amount": "6.00", + "period": "00:30:00" + }, + "max_quantity": 1, + "product_customer_groups": [], + "time_slot_prices": [ + { + "id": 1, + "begin": "09:00:00", + "end": "10:00:00", + "price": "7.00", + "customer_group_time_slot_prices": [] + }, + { + "id": 2, + "begin": "12:00:00", + "end": "14:00:00", + "price": "8.00", + "customer_group_time_slot_prices": [] + } + ], + "price_tax_free": "5.26" + }, + { + "id": "axwrz55im6tq", + "type": "extra", + "name": { + "fi": "CG-1", + "en": "CG-1", + "sv": "CG-1" + }, + "description": null, + "price": { + "type": "per_period", + "tax_percentage": "24.00", + "amount": "1.00", + "period": "00:30:00" + }, + "max_quantity": 10, + "product_customer_groups": [ + { + "id": "adults-1", + "price": "3.00", + "customer_group": { + "id": "axwrz5e6bb2a", + "name": { + "fi": "Aikuiset", + "en": "Adults", + "sv": "Vuxna" + }, + "only_for_login_methods": [] + } + }, + { + "id": "elders-1", + "price": "2.00", + "customer_group": { + "id": "axwrz5yprgpq", + "name": { + "fi": "Eläkeläiset", + "en": "Elders", + "sv": "Äldste" + }, + "only_for_login_methods": [] + } + }, + { + "id": "children-1", + "price": "1.00", + "customer_group": { + "id": "axwrz7i2rtqq", + "name": { + "fi": "Lapset", + "en": "Children", + "sv": "Barn" + }, + "only_for_login_methods": [] + } + }, + { + "id": "city-2", + "price": "0.00", + "customer_group": { + "id": "axxdgkherjra", + "name": { + "fi": "Turun kaupungin työntekijät", + "en": "City of Turku employees", + "sv": "Åbo stads anställda" + }, + "only_for_login_methods": [ + { + "login_method_id": "turku_adfs" + } + ] + } + }, + { + "id": "suomifi-2", + "price": "2.49", + "customer_group": { + "id": "axxdglu2vdla", + "name": { + "fi": "Suomi.fi", + "en": "Suomi.fi", + "sv": "Suomi.fi" + }, + "only_for_login_methods": [ + { + "login_method_id": "turku_suomifi" + } + ] + } + } + ], + "time_slot_prices": [ + { + "id": 5, + "begin": "08:00:00", + "end": "16:00:00", + "price": "1.00", + "customer_group_time_slot_prices": [] + } + ], + "price_tax_free": "0.81" + } + ], + "purposes": [ + { + "name": { + "fi": "Testikäyttötarkoitus", + "en": "Test purpose", + "sv": "Test syfte" + }, + "parent": null, + "id": "test-purpose", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Testiresurssityyppi", + "en": "Test resource type", + "sv": "Testresurs typ" + }, + "main_type": "space", + "id": "axwhvxarnyzq" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T15:50:00+03:00" + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "reserver_email_address", + "billing_email_address", + "billing_first_name", + "billing_last_name", + "billing_phone_number" + ], + "required_reservation_extra_fields": [ + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "billing_email_address", + "billing_first_name", + "billing_last_name" + ], + "included_reservation_home_municipality_fields": [], + "is_favorite": false, + "generic_terms": {}, + "payment_terms": {}, + "reservable_days_in_advance": 30, + "reservable_max_days_in_advance": 30, + "reservable_before": "2023-06-14T00:00:00+03:00", + "reservable_min_days_in_advance": 1, + "reservable_after": "2023-05-16T00:00:00+03:00", + "tags": [], + "max_price_per_hour": 0.0, + "min_price_per_hour": 0.0, + "universal_field": [], + "reservable_by_all_staff": false, + "created_at": "2022-11-02T13:22:51.023280+02:00", + "modified_at": "2023-05-12T11:25:52.651610+03:00", + "public": true, + "name": { + "fi": "Testimaksullinen 1", + "en": "Test with payments 1", + "sv": "Testa med betalningar 1" + }, + "description": { + "fi": "test", + "en": "test", + "sv": "test" + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": false, + "authentication": "weak", + "people_capacity": 5, + "area": null, + "min_period": "00:30:00", + "max_period": "00:30:00", + "cooldown": "00:00:00", + "slot_size": "00:30:00", + "max_reservations_per_user": 2, + "reservable": true, + "reservation_info": { + "fi": "Tämä tila on varattavissa." + }, + "responsible_contact_info": null, + "specific_terms": null, + "reservation_additional_information": null, + "min_price": "0.00", + "max_price": "0.00", + "price_type": "hourly", + "cash_payments_allowed": false, + "payment_requested_waiting_time": 0, + "generate_access_codes": true, + "reservation_feedback_url": "", + "external_reservation_url": null, + "is_external": false, + "unit": "axwhvvif5ydq", + "location": { + "type": "Point", + "coordinates": [ + 60.4448983, + 22.2712356 + ] + } + }, + { + "id": "axwhwd7oz27a", + "products": [ + { + "id": "axwhwjcftkiq", + "type": "extra", + "name": { + "fi": "Lounas", + "en": "Lunch", + "sv": "Lunch" + }, + "description": null, + "price": { + "type": "fixed", + "tax_percentage": "24.00", + "amount": "10.00" + }, + "max_quantity": 10, + "product_customer_groups": [], + "time_slot_prices": [], + "price_tax_free": "8.06" + }, + { + "id": "axwhwkrregba", + "type": "rent", + "name": { + "fi": "Toimiston vuokra", + "en": "Office rent", + "sv": "Kontorshyra" + }, + "description": null, + "price": { + "type": "per_period", + "tax_percentage": "14.00", + "amount": "6.00", + "period": "00:30:00" + }, + "max_quantity": 1, + "product_customer_groups": [], + "time_slot_prices": [ + { + "id": 1, + "begin": "09:00:00", + "end": "10:00:00", + "price": "7.00", + "customer_group_time_slot_prices": [] + }, + { + "id": 2, + "begin": "12:00:00", + "end": "14:00:00", + "price": "8.00", + "customer_group_time_slot_prices": [] + } + ], + "price_tax_free": "5.26" + } + ], + "purposes": [ + { + "name": { + "fi": "Testikäyttötarkoitus", + "en": "Test purpose", + "sv": "Test syfte" + }, + "parent": null, + "id": "test-purpose", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Testiresurssityyppi", + "en": "Test resource type", + "sv": "Testresurs typ" + }, + "main_type": "space", + "id": "axwhvxarnyzq" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T16:00:00+03:00" + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "reserver_email_address", + "billing_email_address", + "billing_first_name", + "billing_last_name", + "billing_phone_number" + ], + "required_reservation_extra_fields": [ + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "billing_email_address", + "billing_first_name", + "billing_last_name" + ], + "included_reservation_home_municipality_fields": [], + "is_favorite": false, + "generic_terms": { + "fi": "Tämä on testikäyttöehdot.", + "en": "This is a test terms of use.", + "sv": "Detta är ett test användarvillkor." + }, + "payment_terms": { + "fi": "Tämä on testimaksuehdot.", + "en": "This is the test payment terms.", + "sv": "Detta är testbetalningsvillkoren." + }, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "tags": [], + "max_price_per_hour": 100.0, + "min_price_per_hour": 1.0, + "universal_field": [], + "reservable_by_all_staff": false, + "created_at": "2022-11-02T13:24:18.507252+02:00", + "modified_at": "2023-05-12T11:26:37.091712+03:00", + "public": true, + "name": { + "fi": "Testiresurssi käteismaksuille", + "en": "Test resource for cash payments", + "sv": "Testresurs för kontantbetalningar" + }, + "description": { + "fi": "test", + "en": "test", + "sv": "test" + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": true, + "authentication": "strong", + "people_capacity": 5, + "area": null, + "min_period": "00:30:00", + "max_period": "04:00:00", + "cooldown": "00:00:00", + "slot_size": "00:30:00", + "max_reservations_per_user": null, + "reservable": true, + "reservation_info": null, + "responsible_contact_info": null, + "specific_terms": null, + "reservation_additional_information": null, + "min_price": "1.00", + "max_price": "100.00", + "price_type": "hourly", + "cash_payments_allowed": true, + "payment_requested_waiting_time": 0, + "generate_access_codes": true, + "reservation_feedback_url": "", + "external_reservation_url": null, + "is_external": false, + "unit": "axwhvvif5ydq", + "location": { + "type": "Point", + "coordinates": [ + 60.4703497, + 22.2340709 + ] + } + }, + { + "id": "axwhwbunrqcq", + "products": [], + "purposes": [ + { + "name": { + "fi": "Testikäyttötarkoitus", + "en": "Test purpose", + "sv": "Test syfte" + }, + "parent": null, + "id": "test-purpose", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Testiresurssityyppi", + "en": "Test resource type", + "sv": "Testresurs typ" + }, + "main_type": "space", + "id": "axwhvxarnyzq" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T16:00:00+03:00" + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "reserver_address_street", + "reserver_address_zip", + "reserver_address_city", + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "company", + "event_description", + "reserver_id", + "number_of_participants", + "reserver_email_address", + "event_subject", + "reservation_extra_questions", + "billing_email_address", + "billing_first_name", + "billing_last_name", + "billing_phone_number", + "home_municipality", + "host_name", + "participants", + "require_assistance", + "require_workstation" + ], + "required_reservation_extra_fields": [], + "included_reservation_home_municipality_fields": [], + "is_favorite": false, + "generic_terms": {}, + "payment_terms": {}, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "tags": [], + "max_price_per_hour": null, + "min_price_per_hour": null, + "universal_field": [], + "reservable_by_all_staff": false, + "created_at": "2022-11-02T13:21:41.293314+02:00", + "modified_at": "2023-04-17T08:52:52.247006+03:00", + "public": true, + "name": { + "fi": "Testiresurssi maksuton", + "en": "Test resource free", + "sv": "Testresurs gratis" + }, + "description": { + "fi": "test", + "en": "test", + "sv": "test" + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": false, + "authentication": "none", + "people_capacity": 5, + "area": null, + "min_period": "01:30:00", + "max_period": "03:00:00", + "cooldown": "00:00:00", + "slot_size": "00:30:00", + "max_reservations_per_user": null, + "reservable": true, + "reservation_info": null, + "responsible_contact_info": null, + "specific_terms": null, + "reservation_additional_information": null, + "min_price": null, + "max_price": null, + "price_type": "hourly", + "cash_payments_allowed": false, + "payment_requested_waiting_time": 0, + "generate_access_codes": true, + "reservation_feedback_url": "https://google.fi", + "external_reservation_url": null, + "is_external": false, + "unit": "axwhvvif5ydq", + "location": { + "type": "Point", + "coordinates": [ + 60.4562426, + 22.2688324 + ] + } + }, + { + "id": "axxjtm7wujha", + "products": [], + "purposes": [ + { + "name": { + "fi": "Testikäyttötarkoitus", + "en": "Test purpose", + "sv": "Test syfte" + }, + "parent": null, + "id": "test-purpose", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Testiresurssityyppi", + "en": "Test resource type", + "sv": "Testresurs typ" + }, + "main_type": "space", + "id": "axwhvxarnyzq" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T16:00:00+03:00" + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "reserver_address_street", + "reserver_address_zip", + "reserver_address_city", + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "company", + "event_description", + "reserver_id", + "number_of_participants", + "reserver_email_address", + "event_subject", + "reservation_extra_questions", + "billing_email_address", + "billing_first_name", + "billing_last_name", + "billing_phone_number", + "home_municipality", + "host_name", + "participants", + "require_assistance", + "require_workstation" + ], + "required_reservation_extra_fields": [], + "included_reservation_home_municipality_fields": [], + "is_favorite": false, + "generic_terms": {}, + "payment_terms": {}, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "tags": [], + "max_price_per_hour": null, + "min_price_per_hour": null, + "universal_field": [], + "reservable_by_all_staff": false, + "created_at": "2022-11-29T12:48:28.846451+02:00", + "modified_at": "2023-01-10T08:40:14.508539+02:00", + "public": true, + "name": { + "fi": "Testiresurssi PIN-koodeille", + "en": "Test resource for PIN codes", + "sv": "Test resource for PIN codes SV" + }, + "description": { + "fi": "test", + "en": "test", + "sv": "test" + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": false, + "authentication": "none", + "people_capacity": 5, + "area": null, + "min_period": "00:30:00", + "max_period": null, + "cooldown": "00:00:00", + "slot_size": "00:30:00", + "max_reservations_per_user": null, + "reservable": true, + "reservation_info": null, + "responsible_contact_info": null, + "specific_terms": null, + "reservation_additional_information": null, + "min_price": null, + "max_price": null, + "price_type": "hourly", + "cash_payments_allowed": false, + "payment_requested_waiting_time": 0, + "generate_access_codes": false, + "reservation_feedback_url": "", + "external_reservation_url": null, + "is_external": false, + "unit": "axwhvvif5ydq", + "location": { + "type": "Point", + "coordinates": [ + 60.4561749, + 22.2774154 + ] + } + }, + { + "id": "ax3yw54uwatq", + "products": [], + "purposes": [ + { + "name": { + "fi": "Testikäyttötarkoitus", + "en": "Test purpose", + "sv": "Test syfte" + }, + "parent": null, + "id": "test-purpose", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Testiresurssityyppi", + "en": "Test resource type", + "sv": "Testresurs typ" + }, + "main_type": "space", + "id": "axwhvxarnyzq" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T16:00:00+03:00" + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "reserver_address_street", + "reserver_address_zip", + "reserver_address_city", + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "company", + "event_description", + "reserver_id", + "number_of_participants", + "reserver_email_address", + "event_subject", + "reservation_extra_questions", + "billing_email_address", + "billing_first_name", + "billing_last_name", + "billing_phone_number", + "home_municipality", + "host_name", + "participants", + "require_assistance", + "require_workstation" + ], + "required_reservation_extra_fields": [], + "included_reservation_home_municipality_fields": [], + "is_favorite": false, + "generic_terms": {}, + "payment_terms": {}, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "tags": [], + "max_price_per_hour": null, + "min_price_per_hour": null, + "universal_field": [], + "reservable_by_all_staff": false, + "created_at": "2023-03-23T08:36:50.194673+02:00", + "modified_at": "2023-05-15T09:28:06.602717+03:00", + "public": true, + "name": { + "fi": "Testiresurssi A", + "en": "Test resource A", + "sv": "Testresurs A" + }, + "description": { + "fi": "Rajoitetut päällekkäiset varaukset", + "en": "Restricted overlapping reservations", + "sv": "Restricted overlapping reservations SV" + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": false, + "authentication": "unauthenticated", + "people_capacity": 5, + "area": null, + "min_period": "00:30:00", + "max_period": "00:30:00", + "cooldown": "00:00:00", + "slot_size": "00:30:00", + "max_reservations_per_user": null, + "reservable": true, + "reservation_info": null, + "responsible_contact_info": null, + "specific_terms": null, + "reservation_additional_information": null, + "min_price": null, + "max_price": null, + "price_type": "hourly", + "cash_payments_allowed": false, + "payment_requested_waiting_time": 0, + "generate_access_codes": true, + "reservation_feedback_url": "", + "external_reservation_url": null, + "is_external": false, + "unit": "ax3yw4zzqxqa", + "location": null + }, + { + "id": "ax32hmxdyp5q", + "products": [], + "purposes": [ + { + "name": { + "fi": "Testikäyttötarkoitus", + "en": "Test purpose", + "sv": "Test syfte" + }, + "parent": null, + "id": "test-purpose", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Testiresurssityyppi", + "en": "Test resource type", + "sv": "Testresurs typ" + }, + "main_type": "space", + "id": "axwhvxarnyzq" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T16:00:00+03:00" + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "reserver_address_street", + "reserver_address_zip", + "reserver_address_city", + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "company", + "event_description", + "reserver_id", + "number_of_participants", + "reserver_email_address", + "event_subject", + "reservation_extra_questions", + "billing_email_address", + "billing_first_name", + "billing_last_name", + "billing_phone_number", + "home_municipality", + "host_name", + "participants", + "require_assistance", + "require_workstation" + ], + "required_reservation_extra_fields": [], + "included_reservation_home_municipality_fields": [], + "is_favorite": false, + "generic_terms": {}, + "payment_terms": {}, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "tags": [], + "max_price_per_hour": null, + "min_price_per_hour": null, + "universal_field": [], + "reservable_by_all_staff": false, + "created_at": "2023-03-24T13:30:27.075289+02:00", + "modified_at": "2023-05-02T08:14:28.864268+03:00", + "public": true, + "name": { + "fi": "Testiresurssi B", + "en": "Test resource B", + "sv": "Testresurs B" + }, + "description": { + "fi": "Rajoitetut päällekkäiset varaukset", + "en": "Restricted overlapping reservations", + "sv": "Restricted overlapping reservations SV" + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": false, + "authentication": "unauthenticated", + "people_capacity": 5, + "area": null, + "min_period": "00:30:00", + "max_period": null, + "cooldown": "00:00:00", + "slot_size": "00:30:00", + "max_reservations_per_user": null, + "reservable": true, + "reservation_info": null, + "responsible_contact_info": null, + "specific_terms": null, + "reservation_additional_information": null, + "min_price": null, + "max_price": null, + "price_type": "hourly", + "cash_payments_allowed": false, + "payment_requested_waiting_time": 0, + "generate_access_codes": true, + "reservation_feedback_url": "", + "external_reservation_url": null, + "is_external": false, + "unit": "ax3yw4zzqxqa", + "location": null + }, + { + "id": "ax5cgppabkmq", + "products": [], + "purposes": [ + { + "name": { + "fi": "Testikäyttötarkoitus", + "en": "Test purpose", + "sv": "Test syfte" + }, + "parent": null, + "id": "test-purpose", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Henkilö", + "en": "Person", + "sv": "Person" + }, + "main_type": "person", + "id": "ax5cgj2pa3ba" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": null, + "closes": null + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "reserver_email_address", + "reservation_extra_questions" + ], + "required_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number" + ], + "included_reservation_home_municipality_fields": [], + "is_favorite": false, + "generic_terms": {}, + "payment_terms": {}, + "reservable_days_in_advance": 60, + "reservable_max_days_in_advance": 60, + "reservable_before": "2023-07-14T00:00:00+03:00", + "reservable_min_days_in_advance": 2, + "reservable_after": "2023-05-17T00:00:00+03:00", + "tags": [], + "max_price_per_hour": null, + "min_price_per_hour": null, + "universal_field": [ + { + "id": 2, + "field_type": "Select", + "data": null, + "description": { + "fi": "Valitse paikka, jonne haluat digineuvojan", + "en": "Valitse paikka, jonne haluat digineuvojan", + "sv": "Väljä någonting" + }, + "label": { + "fi": "Ohjauspaikka", + "en": "Ohjauspaikka", + "sv": "Handlednings plats" + }, + "resource": "ax5cgppabkmq", + "options": [ + { + "id": 4, + "text": { + "fi": "Kirjasto 1", + "en": "Kirjasto 1", + "sv": "Bibliotek 1" + } + }, + { + "id": 6, + "text": { + "fi": "Kirjasto 3", + "en": "Kirjasto 3", + "sv": "Bibliotek 3" + } + }, + { + "id": 5, + "text": { + "fi": "Kirjasto 2", + "en": "Kirjasto 2", + "sv": "Bibliotek 2" + } + } + ], + "name": "Paikkavalinta" + } + ], + "reservable_by_all_staff": true, + "created_at": "2023-04-25T09:29:12.173434+03:00", + "modified_at": "2023-05-09T13:37:01.691684+03:00", + "public": true, + "name": { + "fi": "Digineuvoja A" + }, + "description": { + "fi": "Digineuvoja A kuvausta tähän." + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": false, + "authentication": "none", + "people_capacity": 3, + "area": null, + "min_period": "01:00:00", + "max_period": "02:00:00", + "cooldown": "02:00:00", + "slot_size": "01:00:00", + "max_reservations_per_user": null, + "reservable": true, + "reservation_info": { + "fi": "Reservation info [fi]", + "en": "Reservation info [en]", + "sv": "Reservation info [sv]" + }, + "responsible_contact_info": null, + "specific_terms": null, + "reservation_additional_information": { + "fi": "Kerro mihin asiaan tarvitset tukea", + "sv": "Berätta vad du behöver stöd för" + }, + "min_price": null, + "max_price": null, + "price_type": "hourly", + "cash_payments_allowed": false, + "payment_requested_waiting_time": 0, + "generate_access_codes": true, + "reservation_feedback_url": "", + "external_reservation_url": null, + "is_external": false, + "unit": "ax5cghfdyiqq", + "location": null + } + ] +} \ No newline at end of file diff --git a/cypress/fixtures/resource_office_detail.json b/cypress/fixtures/resource_office_detail.json new file mode 100644 index 000000000..ba91079be --- /dev/null +++ b/cypress/fixtures/resource_office_detail.json @@ -0,0 +1,223 @@ +{ + "id": "axwhvvq4er3a", + "products": [], + "purposes": [ + { + "name": { + "fi": "Kokoustila", + "en": "Meeting room", + "sv": "Mötesrum" + }, + "parent": null, + "id": "meeting-room", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Testiresurssityyppi", + "en": "Test resource type", + "sv": "Testresurs typ" + }, + "main_type": "space", + "id": "axwhvxarnyzq" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T16:00:00+03:00" + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "reserver_address_street", + "reserver_address_zip", + "reserver_address_city", + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "company", + "event_description", + "reserver_id", + "number_of_participants", + "reserver_email_address", + "event_subject", + "reservation_extra_questions", + "billing_email_address", + "billing_first_name", + "billing_last_name", + "billing_phone_number", + "home_municipality", + "host_name", + "participants", + "require_assistance", + "require_workstation" + ], + "required_reservation_extra_fields": [], + "included_reservation_home_municipality_fields": [ + { + "id": "kaarina", + "name": { + "fi": "Kaarina", + "en": "Kaarina", + "sv": "S:t Karins" + } + }, + { + "id": "raisio", + "name": { + "fi": "Raisio", + "en": "Raisio", + "sv": "Reso" + } + }, + { + "id": "turku", + "name": { + "fi": "Turku", + "en": "Turku", + "sv": "Åbo" + } + } + ], + "is_favorite": false, + "generic_terms": { + "fi": "Tämä on testikäyttöehdot.", + "en": "This is a test terms of use.", + "sv": "Detta är ett test användarvillkor." + }, + "payment_terms": { + "fi": "Tämä on testimaksuehdot.", + "en": "This is the test payment terms.", + "sv": "Detta är testbetalningsvillkoren." + }, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "tags": [], + "max_price_per_hour": null, + "min_price_per_hour": null, + "universal_field": [ + { + "id": 1, + "field_type": "Select", + "data": null, + "description": { + "fi": "Valitse mihin järjestykseen toivot tilan pöytien asetettavan", + "en": "Choose the order in which you want the tables in the space to be placed", + "sv": "Välj i vilken ordning du vill att borden i utrymmet ska placeras" + }, + "label": { + "fi": "Pöytien järjestys", + "en": "Table positions", + "sv": "Ordningen på borden" + }, + "resource": "axwhvvq4er3a", + "options": [ + { + "id": 1, + "text": { + "fi": "Kolme riviä", + "en": "Three rows", + "sv": "Tre rader" + } + }, + { + "id": 2, + "text": { + "fi": "Pöydät U-muotoisesti", + "en": "Tables in U-shape", + "sv": "Bord i U-form" + } + }, + { + "id": 3, + "text": { + "fi": "Kahtena neliösaarekkeena", + "en": "In two square islands", + "sv": "På två kvadratiska öar" + } + } + ], + "name": "table positions" + } + ], + "reservable_by_all_staff": false, + "created_at": "2022-11-02T13:20:16.144927+02:00", + "modified_at": "2023-03-16T12:50:12.414393+02:00", + "public": true, + "name": { + "fi": "Toimisto 1b", + "en": "Office 1b", + "sv": "Kontor 1b" + }, + "description": { + "fi": "Tämä on toimistotilan kuvausteksti.", + "en": "This is the office space's description.", + "sv": "Detta är kontorsutrymmets beskrivning." + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": false, + "authentication": "strong", + "people_capacity": 5, + "area": null, + "min_period": "00:30:00", + "max_period": "00:30:00", + "cooldown": "00:00:00", + "slot_size": "00:30:00", + "max_reservations_per_user": null, + "reservable": true, + "reservation_info": { + "fi": "Reservation info fi", + "en": "Reservation info en", + "sv": "Reservation info sv" + }, + "responsible_contact_info": { + "fi": "Responsible contact info [fi]", + "en": "Responsible contact info [en]", + "sv": "Responsible contact info [sv]" + }, + "specific_terms": { + "fi": "Resurssin specific terms fi", + "en": "Resource specific terms en", + "sv": "Resource specific terms sv" + }, + "reservation_additional_information": { + "fi": "Reservation additional info fi", + "en": "Reservation additional info en", + "sv": "Reservation additional info sv" + }, + "min_price": "0.00", + "max_price": "100.00", + "price_type": "fixed", + "cash_payments_allowed": false, + "payment_requested_waiting_time": 0, + "generate_access_codes": true, + "reservation_feedback_url": "", + "external_reservation_url": null, + "is_external": false, + "unit": "axwhvuiljcdq", + "location": { + "type": "Point", + "coordinates": [ + 60.4436451, + 22.2441131 + ] + } +} \ No newline at end of file diff --git a/cypress/fixtures/resource_office_search.json b/cypress/fixtures/resource_office_search.json new file mode 100644 index 000000000..fa2ca8c8f --- /dev/null +++ b/cypress/fixtures/resource_office_search.json @@ -0,0 +1,230 @@ +{ + "count": 1, + "next": null, + "previous": null, + "results": [ + { + "id": "axwhvvq4er3a", + "products": [], + "purposes": [ + { + "name": { + "fi": "Kokoustila", + "en": "Meeting room", + "sv": "Mötesrum" + }, + "parent": null, + "id": "meeting-room", + "image": null + } + ], + "images": [], + "equipment": [], + "type": { + "name": { + "fi": "Testiresurssityyppi", + "en": "Test resource type", + "sv": "Testresurs typ" + }, + "main_type": "space", + "id": "axwhvxarnyzq" + }, + "opening_hours": [ + { + "date": "2023-05-15", + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T16:00:00+03:00" + } + ], + "reservations": [], + "user_permissions": { + "can_make_reservations": true, + "can_ignore_opening_hours": false, + "is_admin": false, + "is_manager": false, + "is_viewer": false, + "can_bypass_payment": false + }, + "supported_reservation_extra_fields": [ + "reserver_name", + "reserver_phone_number", + "reserver_address_street", + "reserver_address_zip", + "reserver_address_city", + "billing_address_street", + "billing_address_zip", + "billing_address_city", + "company", + "event_description", + "reserver_id", + "number_of_participants", + "reserver_email_address", + "event_subject", + "reservation_extra_questions", + "billing_email_address", + "billing_first_name", + "billing_last_name", + "billing_phone_number", + "home_municipality", + "host_name", + "participants", + "require_assistance", + "require_workstation" + ], + "required_reservation_extra_fields": [], + "included_reservation_home_municipality_fields": [ + { + "id": "kaarina", + "name": { + "fi": "Kaarina", + "en": "Kaarina", + "sv": "S:t Karins" + } + }, + { + "id": "raisio", + "name": { + "fi": "Raisio", + "en": "Raisio", + "sv": "Reso" + } + }, + { + "id": "turku", + "name": { + "fi": "Turku", + "en": "Turku", + "sv": "Åbo" + } + } + ], + "is_favorite": false, + "generic_terms": { + "fi": "Tämä on testikäyttöehdot.", + "en": "This is a test terms of use.", + "sv": "Detta är ett test användarvillkor." + }, + "payment_terms": { + "fi": "Tämä on testimaksuehdot.", + "en": "This is the test payment terms.", + "sv": "Detta är testbetalningsvillkoren." + }, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "tags": [], + "max_price_per_hour": null, + "min_price_per_hour": null, + "universal_field": [ + { + "id": 1, + "field_type": "Select", + "data": null, + "description": { + "fi": "Valitse mihin järjestykseen toivot tilan pöytien asetettavan", + "en": "Choose the order in which you want the tables in the space to be placed", + "sv": "Välj i vilken ordning du vill att borden i utrymmet ska placeras" + }, + "label": { + "fi": "Pöytien järjestys", + "en": "Table positions", + "sv": "Ordningen på borden" + }, + "resource": "axwhvvq4er3a", + "options": [ + { + "id": 1, + "text": { + "fi": "Kolme riviä", + "en": "Three rows", + "sv": "Tre rader" + } + }, + { + "id": 2, + "text": { + "fi": "Pöydät U-muotoisesti", + "en": "Tables in U-shape", + "sv": "Bord i U-form" + } + }, + { + "id": 3, + "text": { + "fi": "Kahtena neliösaarekkeena", + "en": "In two square islands", + "sv": "På två kvadratiska öar" + } + } + ], + "name": "table positions" + } + ], + "reservable_by_all_staff": false, + "created_at": "2022-11-02T13:20:16.144927+02:00", + "modified_at": "2023-03-16T12:50:12.414393+02:00", + "public": true, + "name": { + "fi": "Toimisto 1b", + "en": "Office 1b", + "sv": "Kontor 1b" + }, + "description": { + "fi": "Tämä on toimistotilan kuvausteksti.", + "en": "This is the office space's description.", + "sv": "Detta är kontorsutrymmets beskrivning." + }, + "min_age": 0, + "max_age": 0, + "need_manual_confirmation": false, + "authentication": "strong", + "people_capacity": 5, + "area": null, + "min_period": "00:30:00", + "max_period": "00:30:00", + "cooldown": "00:00:00", + "slot_size": "00:30:00", + "max_reservations_per_user": null, + "reservable": true, + "reservation_info": { + "fi": "Reservation info fi", + "en": "Reservation info en", + "sv": "Reservation info sv" + }, + "responsible_contact_info": { + "fi": "Responsible contact info [fi]", + "en": "Responsible contact info [en]", + "sv": "Responsible contact info [sv]" + }, + "specific_terms": { + "fi": "Resurssin specific terms fi", + "en": "Resource specific terms en", + "sv": "Resource specific terms sv" + }, + "reservation_additional_information": { + "fi": "Reservation additional info fi", + "en": "Reservation additional info en", + "sv": "Reservation additional info sv" + }, + "min_price": "0.00", + "max_price": "100.00", + "price_type": "fixed", + "cash_payments_allowed": false, + "payment_requested_waiting_time": 0, + "generate_access_codes": true, + "reservation_feedback_url": "", + "external_reservation_url": null, + "is_external": false, + "unit": "axwhvuiljcdq", + "location": { + "type": "Point", + "coordinates": [ + 60.4436451, + 22.2441131 + ] + } + } + ] +} \ No newline at end of file diff --git a/cypress/fixtures/unit.json b/cypress/fixtures/unit.json new file mode 100644 index 000000000..78523491b --- /dev/null +++ b/cypress/fixtures/unit.json @@ -0,0 +1,276 @@ +{ + "count": 4, + "next": null, + "previous": null, + "results": [ + { + "id": "axwhvuiljcdq", + "name": { + "fi": "Kirjasto", + "en": "Library", + "sv": "Bibliotek" + }, + "description": {}, + "street_address": { + "fi": "Tehdaskatu 32b" + }, + "www_url": { + "fi": "https://testikirjasto.fi" + }, + "picture_caption": {}, + "periods": [], + "opening_hours_today": { + "2023-05-15": [ + { + "opens": null, + "closes": null + } + ] + }, + "location": { + "type": "Point", + "coordinates": [ + 60.450621757311666, + 22.275183846562584 + ] + }, + "municipality": "turku", + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "hidden": false, + "created_at": "2022-11-02T13:05:20.802281+02:00", + "modified_at": "2022-11-02T13:26:04.438874+02:00", + "map_service_id": 148, + "time_zone": "Europe/Helsinki", + "manager_email": null, + "address_zip": "123456", + "phone": "123123123123", + "email": "testikirjastonspostieioikea@turku.fi", + "address_postal_full": null, + "picture_url": null, + "data_source": "", + "data_source_hours": "", + "disallow_overlapping_reservations": false, + "disallow_overlapping_reservations_per_user": false, + "sms_reminder": false, + "sms_reminder_delay": 1, + "payment_requested_waiting_time": 0, + "notification_template_group": null + }, + { + "id": "axwhvvif5ydq", + "name": { + "fi": "Testitoimipiste 1", + "en": "Test unit 1", + "sv": "Testenhet 1" + }, + "description": {}, + "street_address": { + "fi": "12" + }, + "www_url": {}, + "picture_caption": {}, + "periods": [], + "opening_hours_today": { + "2023-05-15": [ + { + "opens": null, + "closes": null + } + ] + }, + "location": { + "type": "Point", + "coordinates": [ + 60.45207785509154, + 22.254069497201563 + ] + }, + "municipality": null, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "hidden": false, + "created_at": "2022-11-02T13:06:27.637757+02:00", + "modified_at": "2023-04-28T11:48:36.811911+03:00", + "map_service_id": null, + "time_zone": "Europe/Helsinki", + "manager_email": null, + "address_zip": null, + "phone": null, + "email": null, + "address_postal_full": null, + "picture_url": null, + "data_source": "", + "data_source_hours": "", + "disallow_overlapping_reservations": false, + "disallow_overlapping_reservations_per_user": false, + "sms_reminder": false, + "sms_reminder_delay": 1, + "payment_requested_waiting_time": 0, + "notification_template_group": null + }, + { + "id": "ax3yw4zzqxqa", + "name": { + "fi": "Testitoimipiste 2", + "en": "Test unit 2", + "sv": "Testenhet 2" + }, + "description": {}, + "street_address": { + "fi": "Osoite 1234" + }, + "www_url": {}, + "picture_caption": {}, + "periods": [], + "opening_hours_today": { + "2023-05-15": [ + { + "opens": null, + "closes": null + } + ] + }, + "location": { + "type": "Point", + "coordinates": [ + 22.28119199475599, + 60.46663525856164 + ] + }, + "municipality": null, + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "hidden": false, + "created_at": "2023-03-23T08:33:09.194891+02:00", + "modified_at": "2023-05-02T08:15:22.374537+03:00", + "map_service_id": null, + "time_zone": "Europe/Helsinki", + "manager_email": null, + "address_zip": null, + "phone": null, + "email": null, + "address_postal_full": null, + "picture_url": null, + "data_source": "", + "data_source_hours": "", + "disallow_overlapping_reservations": true, + "disallow_overlapping_reservations_per_user": true, + "sms_reminder": false, + "sms_reminder_delay": 1, + "payment_requested_waiting_time": 0, + "notification_template_group": null + }, + { + "id": "ax5cghfdyiqq", + "name": { + "fi": "Toimipiste 3", + "en": "Unit 3", + "sv": "Enhet 3" + }, + "description": { + "fi": "Toimipiste 3 kuvaus", + "en": "Unit 3 description", + "sv": "Enhet 3 beskrivning" + }, + "street_address": { + "fi": "Jokukatu 3", + "en": "Jokukatu 3", + "sv": "Någonväg 3" + }, + "www_url": {}, + "picture_caption": {}, + "periods": [ + { + "id": 10, + "name": "alustavat", + "days": [ + { + "weekday": 0, + "opens": "08:00:00", + "closes": "18:00:00", + "closed": false + }, + { + "weekday": 1, + "opens": "08:00:00", + "closes": "18:00:00", + "closed": false + }, + { + "weekday": 2, + "opens": "08:00:00", + "closes": "18:00:00", + "closed": false + }, + { + "weekday": 3, + "opens": "08:00:00", + "closes": "18:00:00", + "closed": false + }, + { + "weekday": 4, + "opens": "08:00:00", + "closes": "18:00:00", + "closed": false + } + ], + "start": "2023-04-01", + "end": "2023-11-30", + "description": null, + "closed": false + } + ], + "opening_hours_today": { + "2023-05-15": [ + { + "opens": "2023-05-15T08:00:00+03:00", + "closes": "2023-05-15T18:00:00+03:00" + } + ] + }, + "location": { + "type": "Point", + "coordinates": [ + 22.266017130083483, + 60.44828508889576 + ] + }, + "municipality": "turku", + "reservable_days_in_advance": null, + "reservable_max_days_in_advance": null, + "reservable_before": null, + "reservable_min_days_in_advance": null, + "reservable_after": null, + "hidden": false, + "created_at": "2023-04-25T09:19:54.726231+03:00", + "modified_at": "2023-04-25T09:19:54.846725+03:00", + "map_service_id": null, + "time_zone": "Europe/Helsinki", + "manager_email": null, + "address_zip": "12345", + "phone": "0411111111", + "email": null, + "address_postal_full": "Jokukatu 3, 12345 Turku", + "picture_url": null, + "data_source": "", + "data_source_hours": "", + "disallow_overlapping_reservations": false, + "disallow_overlapping_reservations_per_user": false, + "sms_reminder": false, + "sms_reminder_delay": 1, + "payment_requested_waiting_time": 0, + "notification_template_group": null + } + ] +} \ No newline at end of file diff --git a/cypress/fixtures/user.json b/cypress/fixtures/user.json new file mode 100644 index 000000000..7667fa7d9 --- /dev/null +++ b/cypress/fixtures/user.json @@ -0,0 +1,19 @@ +{ + "last_login": "2023-04-24T09:43:15.796501+03:00", + "username": "abc123", + "email": "test@example.com", + "date_joined": "2020-10-04T13:49:26.241383+02:00", + "first_name": "Test", + "last_name": "Tester", + "uuid": "123b6480-a639-62ab-1234-111ac567j19c", + "department_name": null, + "is_staff": false, + "display_name": "Test Tester", + "ical_feed_url": "", + "staff_status": {}, + "staff_perms": {}, + "favorite_resources": [], + "preferred_language": "fi", + "birthdate": "1985-07-12", + "is_strong_auth": true +} \ No newline at end of file diff --git a/cypress/support/commands.js b/cypress/support/commands.js new file mode 100644 index 000000000..119ab03f7 --- /dev/null +++ b/cypress/support/commands.js @@ -0,0 +1,25 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add('login', (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js new file mode 100644 index 000000000..5df9c0186 --- /dev/null +++ b/cypress/support/e2e.js @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/e2e.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; + +// Alternatively you can use CommonJS syntax: +// require('./commands') diff --git a/cypress/utils/scripts.js b/cypress/utils/scripts.js new file mode 100644 index 000000000..8b38ab600 --- /dev/null +++ b/cypress/utils/scripts.js @@ -0,0 +1,66 @@ +function formatDate(date) { + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; +} + +/** + * Generates opening hours for past 7 days and the next 14 days + * @returns {Object[]} opening hours + */ +export function generateOpeningHrs() { + const openingHrs = []; + const today = new Date(); + + // Add dates from seven days ago to 14 days in the future + for (let i = -7; i <= 14; i += 1) { + const date = new Date(); + date.setDate(today.getDate() + i); + const dateString = formatDate(date); + openingHrs.push({ + date: dateString, + opens: `${dateString}T08:00:00+03:00`, + closes: `${dateString}T16:00:00+03:00`, + }); + } + + return openingHrs; +} + +/** + * Gets tomorrow's date in the format DD.MM.YYYY + * @returns {string} tomorrow's date + */ +export function getTomorrowDate() { + const today = new Date(); + const tomorrow = new Date(today); + tomorrow.setDate(today.getDate() + 1); + + const dd = String(tomorrow.getDate()).padStart(2, '0'); + const mm = String(tomorrow.getMonth() + 1).padStart(2, '0'); + const yyyy = tomorrow.getFullYear(); + + return `${dd}.${mm}.${yyyy}`; +} + +/** + * Formats date and time for begin and end in the format yyyy.mm.ddTHH:MM:SS+03:00 + * @param {string} date date in the format yyyy.mm.dd + * @param {string} beginTime time in the format HH:MM + * @param {string} endTime time in the format HH:MM + * @returns {Object} object with begin and end date and time + */ +export function formatDateTime(date, beginTime, endTime) { + const [day, month, year] = date.split('.'); + const [beginHour, beginMinute] = beginTime.split(':'); + const [endHour, endMinute] = endTime.split(':'); + + const begin = new Date(`${year}-${month}-${day}T${beginHour}:${beginMinute}:00+03:00`).toISOString(); + const end = new Date(`${year}-${month}-${day}T${endHour}:${endMinute}:00+03:00`).toISOString(); + + return { + begin, + end, + }; +} diff --git a/package-lock.json b/package-lock.json index 37b0e03a5..b4c1c95d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,11 +95,13 @@ "codecov": "3.8.2", "cookie-parser": "1.4.3", "cookie-session": "1.3.3", + "cypress": "12.12.0", "enzyme": "3.9.0", "enzyme-adapter-react-16": "~1.11.2", "eslint": "^8.30.0", "eslint-config-airbnb": "19.0.4", "eslint-import-resolver-webpack": "0.13.2", + "eslint-plugin-cypress": "2.13.3", "eslint-plugin-import": "2.25.3", "eslint-plugin-jest": "^22.3.0", "eslint-plugin-jsx-a11y": "6.7.1", @@ -2902,6 +2904,88 @@ "node": ">=0.1.95" } }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cypress/request": { + "version": "2.88.11", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", + "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.10.3", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@cypress/request/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -3715,20 +3799,6 @@ "node": ">=10" } }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@sinclair/typebox": { "version": "0.25.24", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", @@ -3888,9 +3958,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "node_modules/@types/node": { - "version": "12.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.8.tgz", - "integrity": "sha512-b8bbUOTwzIY3V5vDTY1fIJ+ePKDUBqt2hC2woVGotdQQhG/2Sh62HOKHrT7ab+VerXAcPyAiTEipPu/FsreUtg==" + "version": "14.18.46", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.46.tgz", + "integrity": "sha512-n4yVT5FuY5NCcGHCosQSGvvCT74HhowymPN2OEcsHPw6U1NuxV9dvxWbrM2dnBukWjdMYzig1WfIkWdTTQJqng==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.0", @@ -3903,6 +3973,18 @@ "integrity": "sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA==", "dev": true }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, "node_modules/@types/yargs": { "version": "15.0.5", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", @@ -3918,6 +4000,16 @@ "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", "dev": true }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -4348,6 +4440,42 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -4361,11 +4489,11 @@ } }, "node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -4394,6 +4522,26 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/are-we-there-yet": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", @@ -4587,6 +4735,24 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -4602,6 +4768,21 @@ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, "node_modules/async-foreach": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", @@ -4616,6 +4797,15 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -4687,6 +4877,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, "node_modules/axe-core": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", @@ -5142,9 +5347,23 @@ } }, "node_modules/base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/basic-auth": { "version": "2.0.1", @@ -5157,6 +5376,15 @@ "node": ">= 0.8" } }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -5165,6 +5393,18 @@ "node": "*" } }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -5343,6 +5583,39 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -5440,59 +5713,6 @@ "node": ">=10" } }, - "node_modules/cacache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/cacache/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/cacache/node_modules/ssri": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", @@ -5546,11 +5766,20 @@ "node": ">=0.10.0" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" }, @@ -5643,6 +5872,12 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, "node_modules/chain-function": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/chain-function/-/chain-function-1.0.1.tgz", @@ -5670,6 +5905,15 @@ "node": ">=10" } }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/cheerio": { "version": "1.0.0-rc.10", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", @@ -5797,65 +6041,58 @@ "node": ">=6" } }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "restore-cursor": "^3.1.0" + }, "engines": { "node": ">=8" } }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cliui/node_modules/strip-ansi": { + "node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, "node_modules/clone-deep": { @@ -5975,6 +6212,15 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -6363,169 +6609,513 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.5.tgz", "integrity": "sha512-JsTaiksRsel5n7XwqPAfB0l3TFKdpjW/kgAELf9vrb5adGA7UCPLajKK5s3nFrcFm3Rkyp/Qkgl73ENc1UY3cA==" }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "node_modules/cypress": { + "version": "12.12.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.12.0.tgz", + "integrity": "sha512-UU5wFQ7SMVCR/hyKok/KmzG6fpZgBHHfrXcHzDmPHWrT+UUetxFzQgt7cxCszlwfozckzwkd22dxMwl/vNkWRw==", "dev": true, + "hasInstallScript": true, "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "@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": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "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" }, "engines": { - "node": ">=10" + "node": "^14.0.0 || ^16.0.0 || >=18.0.0" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/cypress/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ms": "2.1.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "node_modules/cypress/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "node_modules/cypress/node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { - "node": ">=0.10" + "node": ">=8" } }, - "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "node_modules/cypress/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/deep-equal/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "node_modules/cypress/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "node_modules/cypress/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "node_modules/cypress/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/cypress/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/cypress/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/cypress/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cypress/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", @@ -6755,6 +7345,16 @@ "node": "*" } }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -6843,6 +7443,18 @@ "node": ">=0.6" } }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -7303,6 +7915,18 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-plugin-cypress": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.13.3.tgz", + "integrity": "sha512-nAPjZE5WopCsgJwl3vHm5iafpV+ZRO76Z9hMyRygWhmg5ODXDPd+9MaPl7kdJ2azj+sO87H3P1PRnggIrz848g==", + "dev": true, + "dependencies": { + "globals": "^11.12.0" + }, + "peerDependencies": { + "eslint": ">= 3.2.1" + } + }, "node_modules/eslint-plugin-import": { "version": "2.25.3", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", @@ -7905,15 +8529,6 @@ "node": ">=8.0" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -8241,18 +8856,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8406,6 +9009,12 @@ "node": ">= 0.6" } }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -8438,6 +9047,27 @@ "node": ">=6" } }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/executable/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/exenv": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", @@ -8662,6 +9292,12 @@ } ] }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -8768,6 +9404,50 @@ "node": ">=0.10.0" } }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, "node_modules/fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -8810,6 +9490,30 @@ "bser": "2.1.1" } }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -8921,21 +9625,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", @@ -8950,13 +9639,36 @@ "is-callable": "^1.1.3" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.12" } }, "node_modules/forwarded": { @@ -8987,6 +9699,30 @@ "node": ">= 0.6" } }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -9071,51 +9807,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/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==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/gaze": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", @@ -9210,6 +9901,24 @@ "node": ">=0.10.0" } }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, "node_modules/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -9253,6 +9962,21 @@ "process": "^0.11.10" } }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -9707,6 +10431,20 @@ "node": ">= 6" } }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -9763,6 +10501,26 @@ "postcss": "^8.1.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -9952,6 +10710,15 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -10251,11 +11018,11 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/is-generator-fn": { @@ -10279,6 +11046,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", @@ -10483,6 +11266,18 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", @@ -10557,6 +11352,12 @@ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, "node_modules/istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", @@ -11730,30 +12531,6 @@ "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, - "node_modules/jest/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -13275,15 +14052,6 @@ "node": ">=8.6" } }, - "node_modules/jest/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/jest/node_modules/node-notifier": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", @@ -13320,21 +14088,6 @@ "node": ">=8" } }, - "node_modules/jest/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/jest/node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -13375,33 +14128,12 @@ "node": ">= 10.14.2" } }, - "node_modules/jest/node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "node_modules/jest/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "node_modules/jest/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jest/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -13447,18 +14179,6 @@ "node": ">=0.10.0" } }, - "node_modules/jest/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest/node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -13518,18 +14238,6 @@ "node": ">=8" } }, - "node_modules/jest/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/jest/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -13632,6 +14340,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -13653,6 +14367,12 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -13664,6 +14384,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, "node_modules/json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -13678,6 +14404,42 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", @@ -13750,6 +14512,15 @@ "language-subtag-registry": "~0.3.2" } }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, "node_modules/leaflet": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.5.1.tgz", @@ -13804,6 +14575,83 @@ "uc.micro": "^1.0.1" } }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/listr2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -13822,99 +14670,259 @@ "json5": "^1.0.1" }, "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/location-origin": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/location-origin/-/location-origin-1.1.4.tgz", + "integrity": "sha1-xjQyWTMTApYmSCgZa/Mdi8jyEvo=" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" + }, + "node_modules/lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" + }, + "node_modules/lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "node_modules/lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dependencies": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, - "bin": { - "json5": "lib/cli.js" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/location-origin": { + "node_modules/log-update/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/location-origin/-/location-origin-1.1.4.tgz", - "integrity": "sha1-xjQyWTMTApYmSCgZa/Mdi8jyEvo=" - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=" - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "node_modules/lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, "dependencies": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -14250,6 +15258,15 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", @@ -14856,20 +15873,6 @@ "node": ">=10" } }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/node-gyp/node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -15414,6 +16417,21 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", @@ -15431,6 +16449,12 @@ "node": ">= 0.8.0" } }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, "node_modules/p-each-series": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", @@ -15614,6 +16638,12 @@ "isarray": "0.0.1" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -15862,6 +16892,18 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", @@ -15968,6 +17010,18 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -17170,27 +18224,6 @@ "strip-ansi": "^6.0.1" } }, - "node_modules/renderkid/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/renderkid/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", @@ -17209,6 +18242,15 @@ "node": ">=0.10" } }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -17368,6 +18410,19 @@ "node": ">=0.10.0" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -17394,6 +18449,26 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/rosie": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/rosie/-/rosie-1.6.0.tgz", @@ -17444,6 +18519,15 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -17517,14 +18601,6 @@ "node": ">=12" } }, - "node_modules/sass-graph/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/sass-graph/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -17546,65 +18622,28 @@ "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/sass-graph/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/sass-graph/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/sass-graph/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/sass-graph/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sass-graph/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==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/sass-graph/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/sass-graph/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "ansi-regex": "^5.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, + "node_modules/sass-graph/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/sass-graph/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -17953,6 +18992,53 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -18238,6 +19324,31 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stack-utils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz", @@ -18350,38 +19461,23 @@ "node": ">=10" } }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/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==", - "dev": true, + "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==", "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" } }, - "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string.prototype.matchall": { "version": "4.0.8", @@ -18442,14 +19538,14 @@ } }, "node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/strip-bom": { @@ -18687,33 +19783,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terminal-link/node_modules/ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "dependencies": { - "type-fest": "^0.11.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/terser": { "version": "5.16.5", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", @@ -18850,6 +19919,18 @@ "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "dev": true }, + "node_modules/throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, "node_modules/tiny-invariant": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.4.tgz", @@ -18868,6 +19949,18 @@ "tlds": "bin.js" } }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -18963,6 +20056,19 @@ "node": ">=0.6" } }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/tr46": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", @@ -19025,6 +20131,24 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, "node_modules/type": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/type/-/type-1.0.1.tgz", @@ -19261,6 +20385,15 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -19358,6 +20491,20 @@ "node": ">= 0.8" } }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -19683,27 +20830,6 @@ "strip-ansi": "^6.0.0" } }, - "node_modules/webpack-hot-middleware/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-hot-middleware/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/webpack-merge": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", @@ -19921,15 +21047,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -19964,47 +21081,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/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==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -20101,21 +21177,6 @@ "node": ">=6" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, "node_modules/yargs/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -20129,15 +21190,6 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/yargs/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -20195,30 +21247,14 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/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/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, "node_modules/yocto-queue": { diff --git a/package.json b/package.json index 86a5b20f7..936ae4346 100644 --- a/package.json +++ b/package.json @@ -100,11 +100,13 @@ "codecov": "3.8.2", "cookie-parser": "1.4.3", "cookie-session": "1.3.3", + "cypress": "12.12.0", "enzyme": "3.9.0", "enzyme-adapter-react-16": "~1.11.2", "eslint": "^8.30.0", "eslint-config-airbnb": "19.0.4", "eslint-import-resolver-webpack": "0.13.2", + "eslint-plugin-cypress": "2.13.3", "eslint-plugin-import": "2.25.3", "eslint-plugin-jest": "^22.3.0", "eslint-plugin-jsx-a11y": "6.7.1", @@ -135,6 +137,8 @@ "test:watch": "jest --watch", "test:coverage": "jest --collectCoverage", "test:ci": "jest --runInBand --collectCoverage", - "test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand" + "test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand", + "cypress:open": "cypress open", + "cypress:run": "cypress run" } } \ No newline at end of file diff --git a/src/index.js b/src/index.js index a4aa5512d..76c994ffa 100644 --- a/src/index.js +++ b/src/index.js @@ -28,6 +28,11 @@ const finalState = Immutable(initialStoreState).merge([initialServerState, initi deep: true, }); const store = configureStore(finalState); + +if (window.Cypress) { + window.store = store; +} + const isIEBrowser = browserName === 'IE'; if (window.location.pathname === '/silent-renew') {