From 81002192b9222fb33b18ac43bcc2ee5142314b66 Mon Sep 17 00:00:00 2001 From: James Person Date: Fri, 14 Jun 2024 18:08:37 -0400 Subject: [PATCH] ESLint Reconfiguration and Related Fixes (#3965) * Rely on eslint config & include babel parser * Move esbuild `build-assets` to ES module format * Move Cypress config & index to ES module format * ESLint changes (so many) - Cypress support files * Makefile - update compile-assets and lint * ESLint config - bonus comments * Remove redundant `npx`'s in package.json --- backend/Makefile | 4 +- backend/{build-assets.js => build-assets.mjs} | 27 +- .../{cypress.config.js => cypress.config.mjs} | 9 +- backend/cypress/e2e/audit-info-form.cy.js | 33 +- backend/cypress/e2e/check-access.cy.js | 180 ++- backend/cypress/e2e/check-eligibility.cy.js | 4 +- backend/cypress/e2e/check-ueid.cy.js | 68 +- backend/cypress/e2e/display-submissions.cy.js | 2 +- backend/cypress/e2e/workbook-uploads.cy.js | 10 +- .../cypress/plugins/{index.js => index.mjs} | 7 +- backend/cypress/support/audit-info-form.js | 23 +- backend/cypress/support/auditee-info.js | 11 +- backend/cypress/support/check-access.js | 27 +- backend/cypress/support/commands.js | 2 +- backend/cypress/support/workbook-uploads.js | 6 +- backend/eslint.config.mjs | 32 +- backend/package-lock.json | 1405 +++++++++++++---- backend/package.json | 17 +- 18 files changed, 1394 insertions(+), 473 deletions(-) rename backend/{build-assets.js => build-assets.mjs} (73%) rename backend/{cypress.config.js => cypress.config.mjs} (63%) rename backend/cypress/plugins/{index.js => index.mjs} (87%) diff --git a/backend/Makefile b/backend/Makefile index 57bdc4a8aa..fba24d34b8 100644 --- a/backend/Makefile +++ b/backend/Makefile @@ -10,7 +10,7 @@ compile: @pip-compile --generate-hashes ./requirements/requirements.in -o requirements.txt --allow-unsafe compile-assets: - @node build-assets.js + @node build-assets.mjs # Generate an updated dev-requirements.txt compile-dev: @@ -39,7 +39,7 @@ lint: @echo "djlint:" @djlint . @echo eslint - @npx eslint --ignore-path ../.gitignore static/js + @npx eslint # Run Django tests: test: diff --git a/backend/build-assets.js b/backend/build-assets.mjs similarity index 73% rename from backend/build-assets.js rename to backend/build-assets.mjs index 5a4ab57c4a..2f551962c1 100644 --- a/backend/build-assets.js +++ b/backend/build-assets.mjs @@ -1,25 +1,28 @@ -const esbuild = require('esbuild'); -const postcss = require('postcss'); -const autoprefixer = require('autoprefixer'); -const fs = require('fs'); -const glob = require('glob'); -const path = require('path'); -const { sassPlugin } = require('esbuild-sass-plugin'); +import { readFile, writeFile } from 'fs'; +import { sync } from 'glob'; +import process from 'node:process'; +import { join } from 'path'; +import postcss from 'postcss'; + +import autoprefixer from 'autoprefixer'; +import { context } from 'esbuild'; +import { sassPlugin } from 'esbuild-sass-plugin'; + (async () => { const watch = process.argv.includes('--watch'); - const jsPath = glob.sync(path.join('.', 'static', 'js', '*.js')); + const jsPath = sync(join('.', 'static', 'js', '*.js')); const runPostcss = (cssIn, cssOut) => { console.info('Running postcss'); - fs.readFile(cssIn, (err, css) => { + readFile(cssIn, (err, css) => { postcss([autoprefixer]) .process(css, { from: cssIn, to: cssOut }) .then((result) => { - fs.writeFile(cssOut, result.css, () => true); + writeFile(cssOut, result.css, () => true); if (result.map) { - fs.writeFile(cssOut + '.map', result.map.toString(), () => true); + writeFile(cssOut + '.map', result.map.toString(), () => true); } }); }); @@ -69,7 +72,7 @@ const { sassPlugin } = require('esbuild-sass-plugin'); plugins: plugins, }; - let ctx = await esbuild.context({ ...buildOptions, plugins }); + let ctx = await context({ ...buildOptions, plugins }); if (watch) { console.info('Watching assets...'); await ctx.watch(); diff --git a/backend/cypress.config.js b/backend/cypress.config.mjs similarity index 63% rename from backend/cypress.config.js rename to backend/cypress.config.mjs index 090ced65e4..eb4cf6bd36 100644 --- a/backend/cypress.config.js +++ b/backend/cypress.config.mjs @@ -1,13 +1,14 @@ -const { defineConfig } = require('cypress'); -const { downloadFile } = require('cypress-downloadfile/lib/addPlugin'); +import { defineConfig } from 'cypress'; +import { downloadFile } from 'cypress-downloadfile/lib/addPlugin.js'; +import indexTasks from './cypress/plugins/index.mjs'; -module.exports = defineConfig({ +export default defineConfig({ e2e: { // We've imported your old cypress plugins here. // You may want to clean this up later by importing these. setupNodeEvents(on, config) { on('task', {downloadFile}); - return require('./cypress/plugins/index.js')(on, config); + return indexTasks(on, config); }, baseUrl: 'http://localhost:8000/', excludeSpecPattern: ['*/*/**/sf-sac-general-info.cy.js', '*/*/**/display-submissions.cy.js'], diff --git a/backend/cypress/e2e/audit-info-form.cy.js b/backend/cypress/e2e/audit-info-form.cy.js index 776b50c9ad..de590a33ea 100644 --- a/backend/cypress/e2e/audit-info-form.cy.js +++ b/backend/cypress/e2e/audit-info-form.cy.js @@ -17,9 +17,11 @@ describe('Audit Information Form', () => { cy.get(item).click(); }); // Enter 750000 into the dollar theshold number field. - cy.get('#dollar_threshold').type('750000').blur(); + cy.get('#dollar_threshold').type('750000'); + cy.get('#dollar_threshold').blur(); // Select 0 and 1 for the multiple select agencies field. - cy.get('#agencies').select(['00', '01']).blur(); + cy.get('#agencies').select(['00', '01']); + cy.get('#agencies').blur(); } it('Page loads successfully', () => { @@ -43,27 +45,26 @@ describe('Audit Information Form', () => { describe('Number Field', () => { it('Cannot type non-int values (only allows numbers and [+-.e])', () => { - cy.get('#dollar_threshold') - .clear() - .type(`abcdfghigklmnopqrstuvwxyz=[]\;',/!@#$%^&*()_{}|:"<>?~`) - .should('have.value', ''); + cy.get('#dollar_threshold').clear(); + cy.get('#dollar_threshold').type( + `abcdfghigklmnopqrstuvwxyz=[];',/!@#$%^&*()_{}|:"<>?~` + ); + cy.get('#dollar_threshold').should('have.value', ''); }); it('Negative values are disallowed', () => { - answerAllQuestions() // Enable submit button. - cy.get('#dollar_threshold') - .clear() - .type(`-2`) - cy.get('#continue').click() + answerAllQuestions(); // Enable submit button. + cy.get('#dollar_threshold').clear(); + cy.get('#dollar_threshold').type(`-2`); + cy.get('#continue').click(); cy.url().should('include', '/audit-info/'); }); it('Decimal values are disallowed', () => { - answerAllQuestions() // Enable submit button. - cy.get('#dollar_threshold') - .clear() - .type(`777.77`) - cy.get('#continue').click() + answerAllQuestions(); // Enable submit button. + cy.get('#dollar_threshold').clear(); + cy.get('#dollar_threshold').type(`777.77`); + cy.get('#continue').click(); cy.url().should('include', '/audit-info/'); }); }); diff --git a/backend/cypress/e2e/check-access.cy.js b/backend/cypress/e2e/check-access.cy.js index 5fc0c60dce..8d648b6266 100644 --- a/backend/cypress/e2e/check-access.cy.js +++ b/backend/cypress/e2e/check-access.cy.js @@ -41,14 +41,16 @@ describe('Create New Audit', () => { describe('Auditee certifying official', () => { describe('Full name', () => { it('should display an error message when left blank', () => { - cy.get('#certifying_auditee_contact_fullname').click().blur(); + cy.get('#certifying_auditee_contact_fullname').click(); + cy.get('#certifying_auditee_contact_fullname').blur(); cy.get('#certifying_auditee_contact_fullname-not-null').should( 'be.visible' ); }); it('should disable the submit button when fields are left blank', () => { - cy.get('#certifying_auditee_contact_fullname').click().blur(); + cy.get('#certifying_auditee_contact_fullname').click(); + cy.get('#certifying_auditee_contact_fullname').blur(); cy.get('button').contains('Create').should('be.disabled'); }); @@ -66,36 +68,39 @@ describe('Create New Audit', () => { }); describe('Email Address', () => { it('should display an error message when left blank', () => { - cy.get('#certifying_auditee_contact_email').click().blur(); + cy.get('#certifying_auditee_contact_email').click(); + cy.get('#certifying_auditee_contact_email').blur(); cy.get('#certifying_auditee_contact_email-not-null').should( 'be.visible' ); }); it('should disable the submit button when fields are left blank', () => { - cy.get('#certifying_auditee_contact_email').click().blur(); + cy.get('#certifying_auditee_contact_email').click(); + cy.get('#certifying_auditee_contact_email').blur(); cy.get('button').contains('Create').should('be.disabled'); }); it('should remove the error message when input is supplied', () => { - cy.get('#certifying_auditee_contact_email') - .clear() - .type('A Name') - .blur(); + cy.get('#certifying_auditee_contact_email').clear(); + cy.get('#certifying_auditee_contact_email').type('A Name'); + cy.get('#certifying_auditee_contact_email').blur(); cy.get('#certifying_auditee_contact_email-not-null').should( 'not.be.visible' ); }); it('should display an error message when entry is invalid', () => { - cy.get('#certifying_auditee_contact_email').click().blur(); + cy.get('#certifying_auditee_contact_email').click(); + cy.get('#certifying_auditee_contact_email').blur(); cy.get('#certifying_auditee_contact_email-error-message').should( 'be.visible' ); }); it('should disable the submit button when fields are invalid', () => { - cy.get('#certifying_auditee_contact_email').click().blur(); + cy.get('#certifying_auditee_contact_email').click(); + cy.get('#certifying_auditee_contact_email').blur(); cy.get('button').contains('Create').should('be.disabled'); }); @@ -115,10 +120,11 @@ describe('Create New Audit', () => { describe('Email Address Confirmation', () => { it('should display an error message when input does not match email field', () => { addValidInfo('#certifying_auditee_contact_email'); - cy.get('#certifying_auditee_contact_re_email') - .clear() - .type('test.address-wit') - .blur(); + cy.get('#certifying_auditee_contact_re_email').clear(); + cy.get('#certifying_auditee_contact_re_email').type( + 'test.address-wit' + ); + cy.get('#certifying_auditee_contact_re_email').blur(); cy.get('#certifying_auditee_contact_re_email-must-match').should( 'be.visible' ); @@ -138,14 +144,16 @@ describe('Create New Audit', () => { describe('Full name', () => { it('should display an error message when left blank', () => { - cy.get('#certifying_auditor_contact_fullname').click().blur(); + cy.get('#certifying_auditor_contact_fullname').click(); + cy.get('#certifying_auditor_contact_fullname').blur(); cy.get('#certifying_auditor_contact_fullname-not-null').should( 'be.visible' ); }); it('should disable the submit button when fields are left blank', () => { - cy.get('#certifying_auditor_contact_fullname').click().blur(); + cy.get('#certifying_auditor_contact_fullname').click(); + cy.get('#certifying_auditor_contact_fullname').blur(); cy.get('button').contains('Create').should('be.disabled'); }); @@ -164,40 +172,43 @@ describe('Create New Audit', () => { describe('Email Address', () => { it('should display an error message when left blank', () => { - cy.get('#certifying_auditor_contact_email').click().blur(); + cy.get('#certifying_auditor_contact_email').click(); + cy.get('#certifying_auditor_contact_email').blur(); cy.get('#certifying_auditor_contact_email-not-null').should( 'be.visible' ); }); it('should disable the submit button when fields are left blank', () => { - cy.get('#certifying_auditor_contact_email').click().blur(); + cy.get('#certifying_auditor_contact_email').click(); + cy.get('#certifying_auditor_contact_email').blur(); cy.get('button').contains('Create').should('be.disabled'); }); it('should remove the error message when input is supplied', () => { - cy.get('#certifying_auditor_contact_email') - .clear() - .type('A Name') - .blur(); + cy.get('#certifying_auditor_contact_email').clear(); + cy.get('#certifying_auditor_contact_email').type('A Name'); + cy.get('#certifying_auditor_contact_email').blur(); cy.get('#certifying_auditor_contact_email-not-null').should( 'not.be.visible' ); }); it('should display an error message when entry is invalid', () => { - cy.get('#certifying_auditor_contact_email') - .clear() - .type('A Name') - .blur(); - cy.get('#certifying_auditor_contact_email').click().blur(); + cy.get('#certifying_auditor_contact_email').clear(); + cy.get('#certifying_auditor_contact_email').type('A Name'); + cy.get('#certifying_auditor_contact_email').blur(); + + cy.get('#certifying_auditor_contact_email').click(); + cy.get('#certifying_auditor_contact_email').blur(); cy.get('#certifying_auditor_contact_email-email').should( 'be.visible' ); }); it('should disable the submit button when fields are invalid', () => { - cy.get('#certifying_auditor_contact_email').click().blur(); + cy.get('#certifying_auditor_contact_email').click(); + cy.get('#certifying_auditor_contact_email').blur(); cy.get('button').contains('Create').should('be.disabled'); }); @@ -216,10 +227,11 @@ describe('Create New Audit', () => { describe('Email Address Confirmation', () => { it('should display an error message when input does not match email field', () => { addValidInfo('#certifying_auditor_contact_email') - cy.get('#certifying_auditor_contact_re_email') - .clear() - .type('test.address-wit') - .blur(); + cy.get('#certifying_auditor_contact_re_email').clear(); + cy.get('#certifying_auditor_contact_re_email').type( + 'test.address-wit' + ); + cy.get('#certifying_auditor_contact_re_email').blur(); cy.get('#certifying_auditor_contact_re_email-must-match').should( 'be.visible' ); @@ -240,14 +252,16 @@ describe('Create New Audit', () => { describe('Full name', () => { it('should display an error message when left blank', () => { - cy.get('#auditee_contacts_fullname').click().blur(); + cy.get('#auditee_contacts_fullname').click(); + cy.get('#auditee_contacts_fullname').blur(); cy.get('#auditee_contacts_fullname-not-null').should( 'be.visible' ); }); it('should disable the submit button when fields are left blank', () => { - cy.get('#auditee_contacts_fullname').click().blur(); + cy.get('#auditee_contacts_fullname').click(); + cy.get('#auditee_contacts_fullname').blur(); cy.get('button').contains('Create').should('be.disabled'); }); @@ -266,22 +280,28 @@ describe('Create New Audit', () => { describe('Email Address', () => { it('should display an error message when left blank', () => { - cy.get('#auditee_contacts_email').click().blur(); + cy.get('#auditee_contacts_email').click(); + cy.get('#auditee_contacts_email').blur(); cy.get('#auditee_contacts_email-not-null').should('be.visible'); }); it('should disable the submit button when fields are left blank', () => { - cy.get('#auditee_contacts_email').click().blur(); + cy.get('#auditee_contacts_email').click(); + cy.get('#auditee_contacts_email').blur(); cy.get('button').contains('Create').should('be.disabled'); }); it('should remove the error message when input is supplied', () => { - cy.get('#auditee_contacts_email').clear().type('A Name').blur(); + cy.get('#auditee_contacts_email').clear(); + cy.get('#auditee_contacts_email').type('A Name'); + cy.get('#auditee_contacts_email').blur(); cy.get('#auditee_contacts_email-not-null').should('not.be.visible'); }); it('should display an error message when entry is invalid', () => { - cy.get('#auditee_contacts_email').clear().type('A Name').blur(); + cy.get('#auditee_contacts_email').clear(); + cy.get('#auditee_contacts_email').type('A Name'); + cy.get('#auditee_contacts_email').blur(); cy.get('#auditee_contacts_email-email').should('be.visible'); }); @@ -295,10 +315,9 @@ describe('Create New Audit', () => { it('should display an error message when input does not match email field', () => { addValidInfo('#auditee_contacts_email') - cy.get('#auditee_contacts_re_email') - .clear() - .type('test.address-wit') - .blur(); + cy.get('#auditee_contacts_re_email').clear(); + cy.get('#auditee_contacts_re_email').type('test.address-wit'); + cy.get('#auditee_contacts_re_email').blur(); cy.get('#auditee_contacts_re_email-must-match').should('be.visible'); }); @@ -332,14 +351,18 @@ describe('Create New Audit', () => { cy.get('.auditee_contacts').within(() => { cy.get('button').click(); cy.get('.grid-row').should('have.length', 4); - cy.get('input[id*="auditee_contacts_email"]') - .eq(1) - .clear() - .type('test.address-with+features@test.gsa.gov'); - cy.get('input[id*="auditee_contacts_re_email"]') - .eq(1) - .clear() - .type('test.address-with+features@test.gsa.gov'); + + cy.get('input[id*="auditee_contacts_email"]').eq(1); + cy.get('input[id*="auditee_contacts_email"]').clear(); + cy.get('input[id*="auditee_contacts_email"]').type( + 'test.address-with+features@test.gsa.gov' + ); + + cy.get('input[id*="auditee_contacts_re_email"]').eq(1); + cy.get('input[id*="auditee_contacts_re_email"]').clear(); + cy.get('input[id*="auditee_contacts_re_email"]').type( + 'test.address-with+features@test.gsa.gov' + ); }); }); }); @@ -348,14 +371,16 @@ describe('Create New Audit', () => { describe('Full name', () => { it('should display an error message when left blank', () => { - cy.get('#auditor_contacts_fullname').click().blur(); + cy.get('#auditor_contacts_fullname').click(); + cy.get('#auditor_contacts_fullname').blur(); cy.get('#auditor_contacts_fullname-not-null').should( 'be.visible' ); }); it('should disable the submit button when fields are left blank', () => { - cy.get('#auditor_contacts_fullname').click().blur(); + cy.get('#auditor_contacts_fullname').click(); + cy.get('#auditor_contacts_fullname').blur(); cy.get('button').contains('Create').should('be.disabled'); }); @@ -374,27 +399,35 @@ describe('Create New Audit', () => { describe('Email Address', () => { it('should display an error message when left blank', () => { - cy.get('#auditor_contacts_email').click().blur(); + cy.get('#auditor_contacts_email').click(); + cy.get('#auditor_contacts_email').blur(); cy.get('#auditor_contacts_email-not-null').should('be.visible'); }); it('should disable the submit button when fields are left blank', () => { - cy.get('#auditor_contacts_email').click().blur(); + cy.get('#auditor_contacts_email').click(); + cy.get('#auditor_contacts_email').blur(); cy.get('button').contains('Create').should('be.disabled'); }); it('should remove the error message when input is supplied', () => { - cy.get('#auditor_contacts_email').clear().type('A Name').blur(); + cy.get('#auditor_contacts_email').clear(); + cy.get('#auditor_contacts_email').type('A Name'); + cy.get('#auditor_contacts_email').blur(); cy.get('#auditor_contacts_email-not-null').should('not.be.visible'); }); it('should display an error message when entry is invalid', () => { - cy.get('#auditor_contacts_email').clear().type('A Name').blur(); + cy.get('#auditor_contacts_email').clear(); + cy.get('#auditor_contacts_email').type('A Name'); + cy.get('#auditor_contacts_email').blur(); cy.get('#auditor_contacts_email-email').should('be.visible'); }); it('should disable the submit button when fields are invalid', () => { - cy.get('#auditor_contacts_email').clear().type('A Name').blur(); + cy.get('#auditor_contacts_email').clear(); + cy.get('#auditor_contacts_email').type('A Name'); + cy.get('#auditor_contacts_email').blur(); cy.get('button').contains('Create').should('be.disabled'); }); @@ -411,12 +444,11 @@ describe('Create New Audit', () => { describe('Email Address Confirmation', () => { it('should display an error message when input does not match email field', () => { - addValidInfo('#auditor_contacts_email') + addValidInfo('#auditor_contacts_email'); - cy.get('#auditor_contacts_re_email') - .clear() - .type('test.address-wit') - .blur(); + cy.get('#auditor_contacts_re_email').clear(); + cy.get('#auditor_contacts_re_email').type('test.address-wit'); + cy.get('#auditor_contacts_re_email').blur(); cy.get('#auditor_contacts_re_email-must-match').should('be.visible'); }); @@ -450,18 +482,18 @@ describe('Create New Audit', () => { cy.get('.auditor_contacts').within(() => { cy.get('button').click(); cy.get('.grid-row').should('have.length', 4); - cy.get('input[id*="auditor_contacts_fullname"]') - .eq(1) - .clear() - .type('A Name'); - cy.get('input[id*="auditor_contacts_email"]') - .eq(1) - .clear() - .type('test.address-with+features@test.gsa.gov'); - cy.get('input[id*="auditor_contacts_re_email"]') - .eq(1) - .clear() - .type('test.address-with+features@test.gsa.gov'); + cy.get('input[id*="auditor_contacts_fullname"]').eq(1).clear(); + cy.get('input[id*="auditor_contacts_fullname"]').type('A Name'); + + cy.get('input[id*="auditor_contacts_email"]').eq(1).clear(); + cy.get('input[id*="auditor_contacts_email"]').type( + 'test.address-with+features@test.gsa.gov' + ); + + cy.get('input[id*="auditor_contacts_re_email"]').eq(1).clear(); + cy.get('input[id*="auditor_contacts_re_email"]').type( + 'test.address-with+features@test.gsa.gov' + ); }); }); }); diff --git a/backend/cypress/e2e/check-eligibility.cy.js b/backend/cypress/e2e/check-eligibility.cy.js index 957692ec4f..1698ccba19 100644 --- a/backend/cypress/e2e/check-eligibility.cy.js +++ b/backend/cypress/e2e/check-eligibility.cy.js @@ -1,4 +1,4 @@ -import { selectValidEntries } from '../support/check-eligibility.js'; +import { selectValidEntries, testValidEligibility } from '../support/check-eligibility.js'; describe('Create New Audit', () => { beforeEach(() => { @@ -78,7 +78,7 @@ describe('Create New Audit', () => { }); it('should navigate to next step after successful submission', () => { - testValidEligbility(); + testValidEligibility(); }); }); diff --git a/backend/cypress/e2e/check-ueid.cy.js b/backend/cypress/e2e/check-ueid.cy.js index 9102218634..872fe6f3a0 100644 --- a/backend/cypress/e2e/check-ueid.cy.js +++ b/backend/cypress/e2e/check-ueid.cy.js @@ -25,7 +25,8 @@ describe('Create New Audit', () => { describe('Auditee UEID', () => { function leaveUeiBlank() { - cy.get('#auditee_uei').click().blur(); + cy.get('#auditee_uei').click(); + cy.get('#auditee_uei').blur(); } it('should display an error message when left blank', () => { @@ -39,22 +40,28 @@ describe('Create New Audit', () => { }); it('should remove the error message when input is supplied', () => { - cy.get('#auditee_uei').type('ASDF').blur(); + cy.get('#auditee_uei').type('ASDF'); + cy.get('#auditee_uei').blur(); cy.get('#auditee_uei-not-null').should('not.be.visible'); }); it('should indicate when the supplied input is too short', () => { - cy.get('#auditee_uei').type('ASDF').blur(); + cy.get('#auditee_uei').type('ASDF'); + cy.get('#auditee_uei').blur(); cy.get('#auditee_uei-length').should('be.visible'); }); it('should indicate when the supplied input is too long', () => { - cy.get('#auditee_uei').clear().type('ASDFASDFASDFA').blur(); + cy.get('#auditee_uei').clear(); + cy.get('#auditee_uei').type('THIRTEENLONG0'); + cy.get('#auditee_uei').blur(); cy.get('#auditee_uei-length').should('be.visible'); }); it('should remove the error message when the input is correct', () => { - cy.get('#auditee_uei').clear().type('ASDFASDFASDF').blur(); + cy.get('#auditee_uei').clear(); + cy.get('#auditee_uei').type('TWELVELONG01'); + cy.get('#auditee_uei').blur(); cy.get('#auditee_uei-length').should('not.be.visible'); }); @@ -65,12 +72,14 @@ describe('Create New Audit', () => { describe('Fiscal Year Start Validation', () => { function leaveFyStartBlank() { - cy.get('#auditee_fiscal_period_end').click().blur(); + cy.get('#auditee_fiscal_period_end').click(); + cy.get('#auditee_fiscal_period_end').blur(); } it('should display an error message when left blank', () => { leaveFyStartBlank(); - cy.get('#auditee_fiscal_period_start').click().blur(); + cy.get('#auditee_fiscal_period_start').click(); + cy.get('#auditee_fiscal_period_start').blur(); cy.get('#auditee_fiscal_period_start-not-null').should('be.visible'); }); @@ -84,7 +93,8 @@ describe('Create New Audit', () => { leaveFyStartBlank(); // act - cy.get('#auditee_fiscal_period_start').type('01/01/2022').blur(); + cy.get('#auditee_fiscal_period_start').type('01/01/2022'); + cy.get('#auditee_fiscal_period_start').blur(); // assert cy.get('#auditee_fiscal_period_start-not-null').should( @@ -98,14 +108,16 @@ describe('Create New Audit', () => { }); it('should not show an error if the user enters a date after 12/31/2015', () => { - cy.get('#auditee_fiscal_period_start').clear().type('1/1/2016'); + cy.get('#auditee_fiscal_period_start').clear(); + cy.get('#auditee_fiscal_period_start').type('1/1/2016'); cy.get('#fy-error-message li').should('have.length', 0); }); }); describe('Fiscal Year End Validation', () => { function leaveFyEndBlank() { - cy.get('#auditee_fiscal_period_end').click().blur(); + cy.get('#auditee_fiscal_period_end').click(); + cy.get('#auditee_fiscal_period_end').blur(); } it('should display an error message when left blank', () => { @@ -119,18 +131,22 @@ describe('Create New Audit', () => { }); it('should remove the error message when input is supplied', () => { - cy.get('#auditee_fiscal_period_end').type('01/31/2022').blur(); + cy.get('#auditee_fiscal_period_end').type('01/31/2022'); + cy.get('#auditee_fiscal_period_end').blur(); cy.get('#auditee_fiscal_period_end-not-null').should('not.be.visible'); }); it('should ensure that the end date is later than the start date', () => { - cy.get('#auditee_fiscal_period_start').type('12/31/2022').blur(); - cy.get('#auditee_fiscal_period_end').type('11/31/2022').blur(); + cy.get('#auditee_fiscal_period_start').type('12/31/2022'); + cy.get('#auditee_fiscal_period_start').blur(); + cy.get('#auditee_fiscal_period_end').type('11/31/2022'); + cy.get('#auditee_fiscal_period_end').blur(); cy.get('#auditee_fiscal_period_end-date-order').should('be.visible'); }); it('should remove the error message when valid end date is supplied', () => { - cy.get('#auditee_fiscal_period_end').type('01/31/2023').blur(); + cy.get('#auditee_fiscal_period_end').type('01/31/2023'); + cy.get('#auditee_fiscal_period_end').blur(); cy.get('#auditee_fiscal_period_end-date-order').should( 'not.be.visible' ); @@ -139,7 +155,9 @@ describe('Create New Audit', () => { describe('UEI Validation via API', () => { beforeEach(() => { - cy.get('#auditee_uei').clear().type('ASDFASDFASDF').blur(); + cy.get('#auditee_uei').clear(); + cy.get('#auditee_uei').type('ASDFASDFASDF'); + cy.get('#auditee_uei').blur(); cy.get('#auditee_uei-btn').as('searchButton'); cy.get('.usa-modal__footer button.primary').as('primaryButton'); cy.get('.usa-modal__footer button.secondary').as('secondaryButton'); @@ -268,7 +286,9 @@ describe('Create New Audit', () => { describe('Add Auditee UEID', () => { it('should add auditee UEI', () => { - cy.get('#auditee_uei').clear().type('CMBSGK6P7BE1').blur(); + cy.get('#auditee_uei').clear(); + cy.get('#auditee_uei').type('CMBSGK6P7BE1'); + cy.get('#auditee_uei').blur(); }); }); @@ -306,11 +326,13 @@ describe('Create New Audit', () => { describe('ADD Fiscal start/end dates', () => { it('Enter expected start date', () => { - cy.get('#auditee_fiscal_period_start').clear().type('05/08/2023'); + cy.get('#auditee_fiscal_period_start').clear(); + cy.get('#auditee_fiscal_period_start').type('05/08/2023'); cy.get('#fy-error-message li').should('have.length', 0); }); it('Enter expected end date', () => { - cy.get('#auditee_fiscal_period_end').clear().type('05/08/2024'); + cy.get('#auditee_fiscal_period_end').clear(); + cy.get('#auditee_fiscal_period_end').type('05/08/2024'); cy.get('#fy-error-message li').should('have.length', 0); }); }); @@ -318,12 +340,16 @@ describe('Create New Audit', () => { describe('Auditee info validation via API', () => { function completeFormWithValidInfo() { - cy.get('#auditee_uei').clear().type('CMBSGK6P7BE1S').blur(); + cy.get('#auditee_uei').clear(); + cy.get('#auditee_uei').type('CMBSGK6P7BE1S'); + cy.get('#auditee_uei').blur(); cy.get('#auditee_uei-btn').as('searchButton'); cy.get('.usa-modal__footer button.primary').as('primaryButton'); cy.get('.usa-modal__footer button.secondary').as('secondaryButton'); - cy.get('#auditee_fiscal_period_start').clear().type('05/08/2023'); - cy.get('#auditee_fiscal_period_end').clear().type('05/08/2024'); + cy.get('#auditee_fiscal_period_start').clear(); + cy.get('#auditee_fiscal_period_start').type('05/08/2023'); + cy.get('#auditee_fiscal_period_end').clear(); + cy.get('#auditee_fiscal_period_end').type('05/08/2024'); } xit('should return auditee info errors from the remote server', () => { diff --git a/backend/cypress/e2e/display-submissions.cy.js b/backend/cypress/e2e/display-submissions.cy.js index d855d86d0d..7a86f3c4d1 100644 --- a/backend/cypress/e2e/display-submissions.cy.js +++ b/backend/cypress/e2e/display-submissions.cy.js @@ -19,7 +19,7 @@ describe('Display my audit submissions', () => { { body: [] } ).as('hasNoData'); cy.visit('/submissions/'); - cy.wait('@hasNoData').then((interception) => { + cy.wait('@hasNoData').then(() => { cy.get('.usa-table-container') .should('have.attr', 'class') .and('contain', 'display-none'); diff --git a/backend/cypress/e2e/workbook-uploads.cy.js b/backend/cypress/e2e/workbook-uploads.cy.js index 7aba6229cd..306999ad42 100644 --- a/backend/cypress/e2e/workbook-uploads.cy.js +++ b/backend/cypress/e2e/workbook-uploads.cy.js @@ -53,7 +53,7 @@ describe('Workbook upload successful', () => { 'fed-awards-invalid.xlsx' ); cy.wait('@uploadFail').its('response.statusCode').should('eq', 400); - cy.wait(2000).get('#info_box').should('contain', 'A field is missing'); + cy.get('#info_box').should('contain', 'A field is missing'); }); it('unsuccessful upload audit findings', () => { @@ -66,7 +66,7 @@ describe('Workbook upload successful', () => { 'find-uni-invalid.xlsx' ); cy.wait('@uploadFail').its('response.statusCode').should('eq', 400); - cy.wait(2000).get('#info_box').should('contain', 'A field is missing'); + cy.get('#info_box').should('contain', 'A field is missing'); }); it('unsuccessful upload audit findings text', () => { @@ -79,7 +79,7 @@ describe('Workbook upload successful', () => { 'find-text-invalid.xlsx' ); cy.wait('@uploadFail').its('response.statusCode').should('eq', 400); - cy.wait(2000).get('#info_box').should('contain', 'A field is missing'); + cy.get('#info_box').should('contain', 'A field is missing'); }); it('unsuccessful upload CAP', () => { @@ -90,7 +90,7 @@ describe('Workbook upload successful', () => { cy.visit(`/report_submission/CAP/${reportTestId}`); cy.get('#file-input-CAP-xlsx').attachFile('cap-invalid.xlsx'); cy.wait('@uploadFail').its('response.statusCode').should('eq', 400); - cy.wait(2000) + cy .get('#info_box') .should('have.text', 'Field Error: undefined'); }); @@ -103,7 +103,7 @@ describe('Workbook upload successful', () => { cy.visit(`/report_submission/additional-ueis/${reportTestId}`); cy.get('#file-input-additional-ueis-xlsx').attachFile('cap-invalid.xlsx'); cy.wait('@uploadFail').its('response.statusCode').should('eq', 400); - cy.wait(2000).get('#info_box').should('contain', 'A field is missing'); + cy.get('#info_box').should('contain', 'A field is missing'); }); }); }); diff --git a/backend/cypress/plugins/index.js b/backend/cypress/plugins/index.mjs similarity index 87% rename from backend/cypress/plugins/index.js rename to backend/cypress/plugins/index.mjs index 139f4c51c3..c5dda3d72b 100644 --- a/backend/cypress/plugins/index.js +++ b/backend/cypress/plugins/index.mjs @@ -1,4 +1,3 @@ -/// // *********************************************************** // This example plugins/index.js can be used to load plugins // @@ -12,13 +11,15 @@ // This function is called when a project is opened or re-opened (e.g. due to // the project's config changing) +import generateOTP from "cypress-otp"; + /** * @type {Cypress.PluginConfig} */ // eslint-disable-next-line no-unused-vars -module.exports = (on, config) => { +export default (on, config) => { on("task", { - generateOTP: require("cypress-otp"), + generateOTP: generateOTP, log(message) { console.log(message) diff --git a/backend/cypress/support/audit-info-form.js b/backend/cypress/support/audit-info-form.js index c51d34acf9..241e5908b9 100644 --- a/backend/cypress/support/audit-info-form.js +++ b/backend/cypress/support/audit-info-form.js @@ -5,33 +5,38 @@ export function testAuditInformationForm() { // Select everything for the GAAP multiple choice checkboxes. // Will pop the three conditional non-GAAP questions. cy.get('[id^=gaap_results--]').each((item) => { - cy.get(item).click({force: true}); + cy.get(item).click({ force: true }); }); // Select everything for question i cy.get('[id^=sp_framework_basis--]').each((item) => { - cy.get(item).click({force: true}); + cy.get(item).click({ force: true }); }); // Question ii is a true/false, and is covered below // Select everything for question iii cy.get('[id^=sp_framework_opinions--]').each((item) => { - cy.get(item).click({force: true}); + cy.get(item).click({ force: true }); }); // Answer 'Yes' to all Yes/No questions. cy.get('[id$=--true]').each((item) => { - cy.get(item).click({force: true}); + cy.get(item).click({ force: true }); }); // Enter 750000 into the dollar theshold number field. - cy.get('#dollar_threshold').type('750000').blur(); + cy.get('#dollar_threshold').type('750000'); + cy.get('#dollar_threshold').blur(); // Select 0 and 1 for the multiple select agencies field. - cy.get('#agencies').select(['00', '01']).blur(); + cy.get('#agencies').select(['00', '01']); + cy.get('#agencies').blur(); - cy.get('.usa-button').contains('Save and continue').click({force: true}); + cy.get('.usa-button').contains('Save and continue').click({ force: true }); - cy.url().should('match', /\/audit\/submission-progress\/[0-9]{4}-[0-9]{2}-GSAFAC-[0-9]{10}/); -}; + cy.url().should( + 'match', + /\/audit\/submission-progress\/[0-9]{4}-[0-9]{2}-GSAFAC-[0-9]{10}/ + ); +} diff --git a/backend/cypress/support/auditee-info.js b/backend/cypress/support/auditee-info.js index b5bf6a5272..e4d1645f13 100644 --- a/backend/cypress/support/auditee-info.js +++ b/backend/cypress/support/auditee-info.js @@ -3,22 +3,23 @@ export function testValidAuditeeInfo() { cy.intercept('api/sac/ueivalidation', { fixture: 'sam-gov-api-mock.json', - }).as('uei_check_success') + }).as('uei_check_success'); // Hard-coding some UEI which may eventually become unregistered // This UEI needs to match up with the UEI in the workbooks. cy.get('#auditee_uei').type('D7A4J33FUMJ1'); - cy.get('#auditee_uei-btn').click().wait('@uei_check_success'); + cy.get('#auditee_uei-btn').click(); + cy.wait('@uei_check_success'); // modal search result box needs "Continue" to be clicked cy.get('button[data-close-modal]').contains('Continue').click(); // Now fill in the audit dates - cy.get('#auditee_fiscal_period_start').type("01/01/2022"); - cy.get('#auditee_fiscal_period_end').type("12/31/2022"); + cy.get('#auditee_fiscal_period_start').type('01/01/2022'); + cy.get('#auditee_fiscal_period_end').type('12/31/2022'); // and click continue cy.get('.usa-button').contains('Continue').click(); // and assert on the URL we end up at cy.url().should('match', /\/report_submission\/accessandsubmission\/$/); -}; +} diff --git a/backend/cypress/support/check-access.js b/backend/cypress/support/check-access.js index d10b94afac..992676eaa0 100644 --- a/backend/cypress/support/check-access.js +++ b/backend/cypress/support/check-access.js @@ -1,19 +1,28 @@ // reusable code for the accessandsubmission page const accessFields = [ - '#certifying_auditee_contact_fullname', '#certifying_auditee_contact_email', '#certifying_auditee_contact_re_email', - '#certifying_auditor_contact_fullname', '#certifying_auditor_contact_email', '#certifying_auditor_contact_re_email', - '#auditee_contacts_fullname', '#auditee_contacts_email', '#auditee_contacts_re_email', - '#auditor_contacts_fullname', '#auditor_contacts_email', '#auditor_contacts_re_email', + '#certifying_auditee_contact_fullname', + '#certifying_auditee_contact_email', + '#certifying_auditee_contact_re_email', + '#certifying_auditor_contact_fullname', + '#certifying_auditor_contact_email', + '#certifying_auditor_contact_re_email', + '#auditee_contacts_fullname', + '#auditee_contacts_email', + '#auditee_contacts_re_email', + '#auditor_contacts_fullname', + '#auditor_contacts_email', + '#auditor_contacts_re_email', ]; export function addValidInfo(field) { const fieldType = field.split('_').pop(); - const email = field.includes('auditee') ? Cypress.env('LOGIN_TEST_EMAIL_AUDITEE') : Cypress.env('LOGIN_TEST_EMAIL'); + const email = field.includes('auditee') + ? Cypress.env('LOGIN_TEST_EMAIL_AUDITEE') + : Cypress.env('LOGIN_TEST_EMAIL'); - cy.get(field) - .clear() - .type(fieldType === 'email' ? email : 'Percy A. Person') - .blur(); + cy.get(field).clear(); + cy.get(field).type(fieldType === 'email' ? email : 'Percy A. Person'); + cy.get(field).blur(); } export function testValidAccess() { diff --git a/backend/cypress/support/commands.js b/backend/cypress/support/commands.js index 521fd4969f..c64457cd7f 100644 --- a/backend/cypress/support/commands.js +++ b/backend/cypress/support/commands.js @@ -26,7 +26,7 @@ import 'cypress-file-upload'; import { testLoginGovLogin } from './login-gov.js'; import { testLogoutGov } from './logout-gov.js'; -require('cypress-downloadfile/lib/downloadFileCommand'); +import 'cypress-downloadfile/lib/downloadFileCommand'; Cypress.Commands.add('login', () => { testLoginGovLogin(); diff --git a/backend/cypress/support/workbook-uploads.js b/backend/cypress/support/workbook-uploads.js index c619bb7b30..d078331fbe 100644 --- a/backend/cypress/support/workbook-uploads.js +++ b/backend/cypress/support/workbook-uploads.js @@ -13,9 +13,9 @@ function testWorkbookUpload(interceptUrl, uploadSelector, filename, will_interce cy.get(uploadSelector).attachFile(filename); // Upload url (POST /audit/excel/workbookname) returns a redirect to "/" on successful upload. So, 302. - cy.wait('@uploadSuccess').should(({request, response}) => { - expect(response.statusCode, 'Response status code').to.equal(302); - }); + cy.wait('@uploadSuccess').then((interception) => { + expect(interception.response.statusCode, 'Response status code').to.equal(302); + }) cy.get('#info_box', { timeout: 10000 }) .should( 'have.text', diff --git a/backend/eslint.config.mjs b/backend/eslint.config.mjs index e4d6817812..dd2a86dd8e 100644 --- a/backend/eslint.config.mjs +++ b/backend/eslint.config.mjs @@ -1,13 +1,14 @@ import pluginJs from '@eslint/js'; import pluginCypress from 'eslint-plugin-cypress/flat'; import eslintConfigPrettier from 'eslint-config-prettier'; +import babelParser from '@babel/eslint-parser'; // Exported rules included later will override rules included earlier. // As in, the Cypress ruleset will override those from Prettier, which overrides those from the eslint recommended. export default [ pluginJs.configs.recommended, - eslintConfigPrettier, pluginCypress.configs.recommended, + eslintConfigPrettier, { rules: { // Cypress plugin rule options defined at https://github.com/cypress-io/eslint-plugin-cypress/tree/master/docs/rules @@ -15,11 +16,24 @@ export default [ }, }, { - ignores: - [ - "static/compiled/*", - "staticfiles/*", - "node_modules/*" - ] - } -]; \ No newline at end of file + languageOptions: { + // ESLint's parser only officially supports the latest final ECMAScript standard. + // To validate fun and exciting features such as `?.`, we use an outside parser like Babel. + parser: babelParser, + parserOptions: { + requireConfigFile: false, + babelOptions: { + babelrc: false, + configFile: false, + }, + }, + }, + }, + { + ignores: [ + 'static/compiled/*', // Generated by ESBuild + 'staticfiles/*', // Generated by Django's collectstatic + 'node_modules/*', // Generated by NPM + ], + }, +]; diff --git a/backend/package-lock.json b/backend/package-lock.json index e5e1c8dcd5..999bf430c2 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -20,6 +20,7 @@ }, "devDependencies": { "@4tw/cypress-drag-drop": "^2.2.5", + "@babel/eslint-parser": "^7.24.7", "@eslint/js": "^9.4.0", "cypress": "^13.11.0", "cypress-axe": "^1.5.0", @@ -50,118 +51,353 @@ "cypress": "2 - 13" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", - "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.24.6", + "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", - "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", + "node_modules/@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", "dev": true, + "peer": true, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", - "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", + "node_modules/@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", "dev": true, + "peer": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.24.6", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@babel/eslint-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.7.tgz", + "integrity": "sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" }, "engines": { - "node": ">=4" + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dev": true, + "peer": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", "dev": true, + "peer": true, "dependencies": { - "color-name": "1.1.3" + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, "engines": { - "node": ">=0.8.0" + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, + "peer": true, "dependencies": { - "has-flag": "^3.0.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "dev": true, + "peer": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@bufbuild/protobuf": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.9.0.tgz", - "integrity": "sha512-W7gp8Q/v1NlCZLsv8pQ3Y0uCu/SHgXOVFK+eUluUKWXmsb6VHkpNx0apdOWWcDbB9sJoKeP8uPrjmehJz6xETQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", + "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", "peer": true }, "node_modules/@colors/colors": { @@ -668,10 +904,22 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -832,6 +1080,68 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "dependencies": { + "eslint-scope": "5.1.1" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -950,9 +1260,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", "dev": true, "optional": true, "dependencies": { @@ -1075,18 +1385,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1096,17 +1394,14 @@ } }, "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==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/anymatch": { @@ -1402,9 +1697,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "funding": [ { "type": "opencollective", @@ -1420,10 +1715,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -1550,9 +1845,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001624", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001624.tgz", - "integrity": "sha512-0dWnQG87UevOCPYaOR49CBcLBwoZLpws+k6W37nLjWUhumP1Isusj0p2u+3KhjNloRWK9OKMgjBBzPujQHw4nA==", + "version": "1.0.30001632", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001632.tgz", + "integrity": "sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==", "funding": [ { "type": "opencollective", @@ -1575,31 +1870,16 @@ "dev": true }, "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/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, + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/check-more-types": { @@ -1730,6 +2010,36 @@ "node": ">=12" } }, + "node_modules/cliui/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/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/cliui/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/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -1747,20 +2057,17 @@ } }, "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==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "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==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/colord": { "version": "2.9.3", @@ -1809,6 +2116,13 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "peer": true + }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -2039,6 +2353,103 @@ "otplib": "12.0.1" } }, + "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": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "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": ">=8" + } + }, + "node_modules/cypress/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cypress/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cypress/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -2106,9 +2517,9 @@ "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==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -2260,9 +2671,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.783", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.783.tgz", - "integrity": "sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ==" + "version": "1.4.796", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.796.tgz", + "integrity": "sha512-NglN/xprcM+SHD2XCli4oC6bWe6kHoytcyLKCWXmRL854F0qhPhaYgUswUsglnPxYaNQIg2uMY4BvaomIf3kLA==" }, "node_modules/element-closest": { "version": "2.0.2", @@ -2485,15 +2896,11 @@ } }, "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, "node_modules/eslint": { @@ -2586,6 +2993,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint-plugin-cypress/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-prettier": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", @@ -2617,28 +3036,99 @@ } }, "node_modules/eslint-scope": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", - "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "estraverse": "^4.1.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/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://opencollective.com/eslint" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/eslint/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/eslint/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/eslint/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/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", + "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -2656,6 +3146,36 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/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/eslint/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/espree": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", @@ -2697,6 +3217,15 @@ "node": ">=0.10" } }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -2709,7 +3238,7 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { + "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -2718,6 +3247,15 @@ "node": ">=4.0" } }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2894,15 +3432,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -2915,19 +3444,6 @@ "node": ">=16.0.0" } }, - "node_modules/file-entry-cache/node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -2956,17 +3472,16 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -3111,6 +3626,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3311,6 +3836,16 @@ "which": "bin/which" } }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", @@ -3385,11 +3920,11 @@ } }, "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==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/has-property-descriptors": { @@ -3956,9 +4491,9 @@ "dev": true }, "node_modules/jackspeak": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", - "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -3996,6 +4531,19 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -4037,6 +4585,19 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -4115,9 +4676,9 @@ } }, "node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "engines": { "node": ">=14" }, @@ -4158,6 +4719,39 @@ } } }, + "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", @@ -4252,6 +4846,76 @@ "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", @@ -4270,6 +4934,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -4302,11 +4999,13 @@ } }, "node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "engines": { - "node": "14 || >=16.14" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^3.0.2" } }, "node_modules/map-obj": { @@ -4415,6 +5114,18 @@ "node": ">=10" } }, + "node_modules/meow/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/meow/node_modules/type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", @@ -4427,6 +5138,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/meow/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4652,43 +5369,6 @@ "node": ">= 4" } }, - "node_modules/npm-run-all/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/npm-run-all/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, "node_modules/npm-run-all/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -4704,22 +5384,6 @@ "node": ">=4.8" } }, - "node_modules/npm-run-all/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/npm-run-all/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -4755,17 +5419,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm-run-all/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/npm-run-all/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -5003,6 +5656,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-type": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", @@ -5533,6 +6194,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/read-pkg-up/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", @@ -5545,6 +6218,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/read-pkg-up/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -6215,16 +6894,37 @@ "node": ">=14.0.0" } }, + "node_modules/sass-embedded/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==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass-embedded/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==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/set-function-length": { @@ -6332,6 +7032,39 @@ "node": ">=8" } }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", @@ -6720,6 +7453,20 @@ "node": ">=12.0.0" } }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/stylelint/node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -6759,17 +7506,14 @@ } }, "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==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=4" } }, "node_modules/supports-hyperlinks": { @@ -6785,6 +7529,15 @@ "node": ">=14.18" } }, + "node_modules/supports-hyperlinks/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/supports-hyperlinks/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6847,9 +7600,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", - "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", @@ -6862,6 +7615,39 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/table/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/table/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/table/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/table/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -6929,6 +7715,16 @@ "node": ">=14.14" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -6983,9 +7779,9 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/tunnel-agent": { "version": "0.6.0", @@ -7018,9 +7814,9 @@ } }, "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "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" @@ -7344,6 +8140,36 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -7441,15 +8267,16 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "peer": true }, "node_modules/yaml": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", - "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "bin": { "yaml": "bin.mjs" }, diff --git a/backend/package.json b/backend/package.json index 753bc4f6b2..845c27546f 100644 --- a/backend/package.json +++ b/backend/package.json @@ -9,21 +9,22 @@ }, "scripts": { "build": "run-p build:*", - "build:esbuild": "node build-assets.js", - "dev": "node build-assets.js --watch", - "check:eslint": "npx eslint --ignore-pattern ../.gitignore static/js", - "fix:eslint": "npx eslint --fix --ignore-pattern ../.gitignore static/js", - "check:stylelint": "npx stylelint './static/scss'", - "fix:stylelint": "npx stylelint --fix './static/scss'", + "build:esbuild": "node build-assets.mjs", + "dev": "node build-assets.mjs --watch", + "check:eslint": "eslint", + "fix:eslint": "eslint --fix", + "check:stylelint": "stylelint './static/scss'", + "fix:stylelint": "stylelint --fix './static/scss'", "check-all": "run-p check:*", "fix-all": "run-p fix:*", - "test:a11y:cypress": "npx cypress run --spec 'cypress/e2e/accessibility.cy.js'", - "test:e2e:ci": "npx cypress run" + "test:a11y:cypress": "cypress run --spec 'cypress/e2e/accessibility.cy.js'", + "test:e2e:ci": "cypress run" }, "author": "", "license": "ISC", "devDependencies": { "@4tw/cypress-drag-drop": "^2.2.5", + "@babel/eslint-parser": "^7.24.7", "@eslint/js": "^9.4.0", "cypress": "^13.11.0", "cypress-axe": "^1.5.0",