From 029cc01fb3cd7199f35c6f822d80cc63345231f9 Mon Sep 17 00:00:00 2001 From: Anna Topalidi <60363870+antopalidi@users.noreply.github.com> Date: Wed, 22 May 2024 16:57:22 +0200 Subject: [PATCH] Upgrade 0.28 (#78) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add census type radio buttons * fix lint * fix transformLocales * createion elections with cencus permissions * add batch queue * add verification methods for voting * remove whenever, add info to readme * update the vocdoni census after delete authorization * add internal_census field * change readme * change views vote * add helper method * add modal window, add internal census logic to voting * add loginModal * fix login modal, fix wallet generation * create election without verification_types * create election without voters * fix erb linter * refactoring, add system tests for internsl census * change titles in census form * fix preview, fix tests * fix missink keys * fix use doublequote quotes * add spec for job * fic create internal command, add tests * add spec for cell * add spec for form * add spec for controller * add spec for AuthorizationsData model * add spec for AuthorizationExtensions * add system test for vote online * fix lint * add spec for voter model * remove the unnecessary method * fix new-vote.js * fix CensusPermissionsForm * update ruby * add wrapper for node * Use a Sdk service for running sdk actions * clean js * add election to sdk runner * fix create wallet test * update create census test * create an election from the backend * Create the election using node * normalize locales * fix wizard test * make tests deterministic * fix factories * start elections * use values for results * remove unused test * fix erb file * fix unit tests * fix syntac error * fix more tests * fix tests * fix tests * fix tests * fix wrong method for translated * avoid external library * better management of the case auto_start * fix test * debug sdk * prevent comunitaction with api * add the test log to artifacts * use expect to wait for ajax * handle & update results * message acording election start mode * linting * Merge node-wrapper branch * remove js * fix npm lint * fix rubocop * fix census controller * fix test * change census view * change voter_verified? * change voter_verified? * fix voter_verified? for empty required_authorizations * update sdk * Refactor deterministicWallet method to align with JS implementation and enhance security * fix tests * fix test * fix updating of voting statistics * change logic: creating technical_voter when no one is authorized for selected authorization types; add spec * fix test * Update README.md Co-authored-by: Ivan Vergés * Update README.md Co-authored-by: Ivan Vergés * fix translata of authorizations handler_name * Save the census wallet for later use. Allow to send updated census * test script for census change * fix test using mjs for node wrapper * fix script * script working * update census job, add information on the need to update the census * add census traking * fix non_voters method, fix job * fix job * refactor the job, add new services * fix rubocop, locale * npm update, fix BigInt * fix erblint * refactor steps controller, add flash, permissions * change chrome version for test * change chrome version for test * change chrome version for test * change chrome version for test * change chromedriver version for test * change chromedriver version 121 for test * change chromedriver version 121 for test * fix tests * add tests * fix locale keys * update chromedriver config * add ajax for update census info * Add text to the voting page when the voter is not yet listed in the census * fix translate missing * fix tests * delete test * fix erb lint * remove the code * fix ajax * add tests * improve census view * fix tests * fix tests * change massage in the setup form for internal census * improve the census update view * replace flash message to ajax * change texts for check census * add helpers * add helper methods * remove code * remove code * remove migration, remove AuthorizationsData * delete override * destroy tech voter after census update * fix test * fix ajax: update census * fix erb linter * ensure user is redirected to where the action started * change the users context for the internal census form Co-authored-by: Ivan Vergés * refactoring VotesController * change text for update census result * remove cron task * Update README.md Co-authored-by: Ivan Vergés * add DECIDIM_COMPAT_VERSION Co-authored-by: Ivan Vergés * update gemspec * refactoring: dynamic_census attribute is not used * add custom version number, add info to readme * bundle * add credit renewal flow, add tests * add comments * fix erb linter, fix test * add test * initial upgrade * fix icons: elections index page * register new icons, change buttons, titles * redesign the setup election page * tabs, tables * change styles for elections, questions, answers * shange census page * change calendar page * change publish page, forms * fix buttons for steps * change cells, elections index public page (processing) * merge main, resolve conflicts * chanfe show election page * change election show page - questions * change election results * fix babel error: remove webpacker override from Rakefile * cp babel.config.json * change census-authorization-modal * change check census, new question * change elections -> new vote * change Real-time voting results * change preview * change results table * change vote statistics * change published results * fix rubocop * fix erblint * fix some tests * fix admin tests * fix cells, tests * fix rubocop * upgrade vocdoni version to 0.8 * fix serching, fix filtering * fis tabs styles * update lock file * update lock file * Add Linux platform to Gemfile.lock * fix rubocop * fix results online spec * fix append_stylesheet_pack_tag * fix selected answers * add ContentSecurityPolicy * fix tests * fix versions * fix vote without a user * fix bullet errors * fix rubocop * fix i18n * fix test * fix wallet inpet * fix time format in the test * fix button text * fix test * fix accordion * fix npm lint * fix erb lint * Update README.md Co-authored-by: Ivan Vergés * Update package.json Co-authored-by: Ivan Vergés * styles for election aside * i18n-tasks * remove extra code * fix tests * remove empty link * add comment to Rakefile * fix rubocop * add null: false to migration --------- Co-authored-by: Ivan Vergés --- .github/workflows/lint.yml | 6 +- .github/workflows/test-rails.yml | 4 +- .rubocop_ruby.yml | 3 +- .ruby-version | 2 +- Gemfile | 19 +- Gemfile.lock | 637 ++- README.md | 5 +- Rakefile | 3 +- .../internal_census.erb | 3 +- .../census_authorization_modal/show.erb | 22 +- .../census_authorization_modal_cell.rb | 4 +- app/cells/decidim/vocdoni/election_cell.rb | 4 +- .../{election_m => election_g}/data.erb | 0 .../decidim/vocdoni/election_g/footer.erb | 5 + app/cells/decidim/vocdoni/election_g/show.erb | 20 + .../{election_m => election_g}/tags.erb | 0 ...{election_m_cell.rb => election_g_cell.rb} | 17 +- .../decidim/vocdoni/election_m/footer.erb | 5 - .../decidim/vocdoni/election_metadata_cell.rb | 58 + .../decidim/vocdoni/election_preview/show.erb | 51 +- .../vocdoni/election_results/progress_bar.erb | 20 +- .../decidim/vocdoni/election_results/show.erb | 50 +- .../election_results_realtime/show.erb | 33 +- .../vocdoni/election_vote_cta/show.erb | 77 +- .../decidim/vocdoni/election_vote_cta_cell.rb | 6 +- .../vocdoni/remaining_time_callout/show.erb | 4 +- .../vocdoni/voting_step_navigation/show.erb | 43 +- .../vocdoni/voting_step_navigation_cell.rb | 2 +- .../decidim/vocdoni/admin/create_wallet.rb | 4 +- .../vocdoni/admin/update_election_calendar.rb | 2 +- .../vocdoni/content_security_policy.rb | 27 + .../concerns/decidim/vocdoni/has_vote_flow.rb | 4 +- .../concerns/decidim/vocdoni/orderable.rb | 36 + .../vocdoni/admin/answers_controller.rb | 23 +- .../vocdoni/admin/application_controller.rb | 2 + .../vocdoni/admin/census_controller.rb | 10 +- .../admin/election_calendar_controller.rb | 4 +- .../vocdoni/admin/elections_controller.rb | 46 +- .../vocdoni/admin/questions_controller.rb | 22 +- .../decidim/vocdoni/admin/steps_controller.rb | 16 +- .../decidim/vocdoni/application_controller.rb | 1 + .../decidim/vocdoni/elections_controller.rb | 39 +- .../decidim/vocdoni/votes_controller.rb | 16 +- .../decidim/vocdoni/admin/steps_helper.rb | 10 +- .../vocdoni/admin/steps_wizard_helper.rb | 2 +- .../decidim/vocdoni/application_helper.rb | 23 + app/helpers/decidim/vocdoni/votes_helper.rb | 4 +- .../decidim/vocdoni/vocdoni_api_utils.rb | 2 +- app/models/decidim/vocdoni/answer.rb | 2 +- .../decidim/vocdoni/csv_census/status.rb | 6 +- app/models/decidim/vocdoni/election.rb | 26 + app/models/decidim/vocdoni/voter.rb | 6 +- .../admin/decidim_vocdoni_admin.js | 12 +- .../admin/decidim_vocdoni_admin.scss | 1 + .../admin/decidim_vocdoni_admin_stylesheet.js | 2 - app/packs/entrypoints/decidim_vocdoni.scss | 1 + .../entrypoints/decidim_vocdoni_elections.js | 2 + .../decidim_vocdoni_elections.scss | 1 + .../decidim/vocdoni/admin/steps/results.js | 35 +- .../vocdoni/admin/steps/update_census.js | 2 +- .../src/decidim/vocdoni/vocdoni_admin.js | 9 + .../src/decidim/vocdoni/voter/new-vote.js | 18 +- .../vocdoni/voter/vote_questions.component.js | 18 +- .../decidim/vocdoni/admin/vocdoni.scss | 87 +- .../decidim/vocdoni/elections/elections.scss | 168 + .../decidim/vocdoni/focus/_accordion.scss | 18 +- .../decidim/vocdoni/focus/_evote.scss | 217 +- .../decidim/vocdoni/focus/_focus.scss | 101 +- .../decidim/vocdoni/vocdoni_admin.scss | 2 + ...{vocdoni.scss => vocdoni_application.scss} | 5 +- app/services/decidim/vocdoni/sdk.rb | 2 +- .../vocdoni/admin/answers/_form.html.erb | 36 +- .../vocdoni/admin/answers/edit.html.erb | 20 +- .../vocdoni/admin/answers/index.html.erb | 26 +- .../vocdoni/admin/answers/new.html.erb | 18 +- .../census/_decidim_permissions_form.html.erb | 27 +- .../admin/census/_upload_form.html.erb | 14 +- .../vocdoni/admin/census/index.html.erb | 65 +- .../admin/election_calendar/edit.html.erb | 77 +- .../vocdoni/admin/elections/_form.html.erb | 24 +- .../vocdoni/admin/elections/edit.html.erb | 19 +- .../vocdoni/admin/elections/index.html.erb | 32 +- .../vocdoni/admin/elections/new.html.erb | 40 +- .../admin/elections/publish_page.html.erb | 44 +- .../vocdoni/admin/questions/_form.html.erb | 30 +- .../vocdoni/admin/questions/edit.html.erb | 19 +- .../vocdoni/admin/questions/index.html.erb | 106 +- .../vocdoni/admin/questions/new.html.erb | 18 +- .../admin/shared/_election_title.html.erb | 4 +- .../vocdoni/admin/shared/_tab_links.html.erb | 13 +- .../admin/steps/_action_buttons.html.erb | 18 +- .../admin/steps/_available_credits.html.erb | 66 +- .../vocdoni/admin/steps/_canceled.html.erb | 2 +- .../admin/steps/_create_election.html.erb | 19 +- .../vocdoni/admin/steps/_created.html.erb | 2 +- .../vocdoni/admin/steps/_danger_zone.html.erb | 17 +- .../vocdoni/admin/steps/_paused.html.erb | 2 +- .../admin/steps/_results_published.html.erb | 6 +- .../admin/steps/_results_stats.html.erb | 6 +- .../admin/steps/_update_census.html.erb | 8 +- .../admin/steps/_vocdoni_logo.html.erb | 11 +- .../vocdoni/admin/steps/_vote.html.erb | 2 +- .../vocdoni/admin/steps/_vote_ended.html.erb | 2 +- .../vocdoni/admin/steps/_vote_stats.html.erb | 69 +- .../admin/steps/_wallet_address.html.erb | 19 + .../vocdoni/admin/steps/index.html.erb | 18 +- .../vocdoni/admin/wallets/new.html.erb | 9 +- .../vocdoni/elections/_elections.html.erb | 18 +- .../decidim/vocdoni/elections/index.html.erb | 27 +- .../decidim/vocdoni/elections/index.js.erb | 5 + .../decidim/vocdoni/elections/show.html.erb | 81 +- .../vocdoni/votes/_check_census.html.erb | 2 - .../vocdoni/votes/_focus_header.html.erb | 4 +- .../decidim/vocdoni/votes/_login.html.erb | 30 +- .../vocdoni/votes/_login_fields.html.erb | 4 +- .../vocdoni/votes/_new_confirm_step.html.erb | 79 +- .../votes/_new_confirm_step_footer.html.erb | 40 +- .../vocdoni/votes/_new_question.html.erb | 30 +- .../votes/_new_question_modal.html.erb | 39 +- .../votes/_new_submitting_step.html.erb | 1 - .../vocdoni/votes/_show_failed.html.erb | 13 +- .../votes/_show_vote_cast_step.html.erb | 71 +- app/views/decidim/vocdoni/votes/new.html.erb | 120 +- .../decidim/_vocdoni_votes_header.html.erb | 4 +- babel.config.json | 16 +- bin/dev | 6 + bin/{webpack => shakapacker} | 2 +- ...pack-dev-server => shakapacker-dev-server} | 2 +- config/assets.rb | 6 +- config/i18n-tasks.yml | 22 +- config/locales/en.yml | 22 + ...ensus_data_to_decidim_vocdoni_elections.rb | 4 +- ...wers_count_to_decidim_vocdoni_questions.rb | 7 + decidim-vocdoni.gemspec | 5 +- lib/decidim/api/vocdoni_elections_type.rb | 2 +- lib/decidim/vocdoni/admin_engine.rb | 7 + lib/decidim/vocdoni/component.rb | 12 +- .../vocdoni/election_status_changer.rb | 2 +- lib/decidim/vocdoni/engine.rb | 7 + lib/decidim/vocdoni/test/factories.rb | 40 +- lib/decidim/vocdoni/version.rb | 6 +- package-lock.json | 4724 +++++++++++------ package.json | 19 +- .../census_authorization_modal_cell_spec.rb | 6 +- .../decidim/vocdoni/election_cell_spec.rb | 5 +- ...m_cell_spec.rb => election_g_cell_spec.rb} | 24 +- .../election_results_realtime_cell_spec.rb | 6 +- .../vocdoni/admin/create_answer_spec.rb | 14 +- .../vocdoni/admin/create_census_data_spec.rb | 6 +- .../vocdoni/admin/create_election_spec.rb | 14 +- .../admin/create_internal_census_spec.rb | 8 +- .../vocdoni/admin/create_question_spec.rb | 12 +- .../vocdoni/admin/create_wallet_spec.rb | 10 +- .../vocdoni/admin/destroy_answer_spec.rb | 12 +- .../vocdoni/admin/destroy_election_spec.rb | 8 +- .../vocdoni/admin/destroy_question_spec.rb | 10 +- .../vocdoni/admin/publish_election_spec.rb | 4 +- .../vocdoni/admin/save_results_spec.rb | 22 +- .../vocdoni/admin/setup_election_spec.rb | 18 +- .../vocdoni/admin/unpublish_election_spec.rb | 2 +- .../vocdoni/admin/update_answer_spec.rb | 16 +- .../admin/update_election_calendar_spec.rb | 14 +- .../vocdoni/admin/update_election_spec.rb | 6 +- .../admin/update_election_status_spec.rb | 8 +- .../vocdoni/admin/update_question_spec.rb | 12 +- .../vocdoni/admin/answers_controller_spec.rb | 14 +- .../election_calendar_controller_spec.rb | 6 +- .../admin/elections_controller_spec.rb | 10 +- .../vocdoni/admin/wallets_controller_spec.rb | 12 +- .../vocdoni/elections_controller_spec.rb | 12 +- .../decidim/vocdoni/votes_controller_spec.rb | 12 +- .../vocdoni/election_published_event_spec.rb | 4 +- .../decidim/vocdoni/admin/answer_form_spec.rb | 12 +- .../vocdoni/admin/census_data_form_spec.rb | 2 +- .../admin/census_permissions_form_spec.rb | 12 +- .../admin/election_calendar_form_spec.rb | 14 +- .../vocdoni/admin/election_form_spec.rb | 14 +- .../admin/election_status_form_spec.rb | 4 +- .../vocdoni/admin/question_form_spec.rb | 10 +- .../decidim/vocdoni/admin/setup_form_spec.rb | 18 +- .../vocdoni/admin/steps_helper_spec.rb | 6 +- .../vocdoni/admin/steps_wizard_helper_spec.rb | 10 +- .../decidim/vocdoni/votes_helper_spec.rb | 4 +- .../admin/create_voter_wallets_job_spec.rb | 4 +- .../admin/update_election_census_job_spec.rb | 4 +- .../vocdoni/election_status_changer_spec.rb | 8 +- .../lib/decidim/vocdoni/module_config_spec.rb | 4 +- spec/models/decidim/vocdoni/answer_spec.rb | 18 +- .../decidim/vocdoni/csv_census/data_spec.rb | 5 +- spec/models/decidim/vocdoni/election_spec.rb | 64 +- spec/models/decidim/vocdoni/question_spec.rb | 66 +- spec/models/decidim/vocdoni/voter_spec.rb | 14 +- .../decidim/vocdoni/admin/permissions_spec.rb | 34 +- .../decidim/vocdoni/permissions_spec.rb | 26 +- .../admin_log/election_presenter_spec.rb | 2 +- .../admin_log/wallet_presenter_spec.rb | 2 +- .../vocdoni/election_presenter_spec.rb | 2 +- .../vocdoni/census_updater_service_spec.rb | 2 +- spec/services/decidim/vocdoni/sdk_spec.rb | 6 +- spec/shared/vote_examples.rb | 27 +- .../admin/admin_creates_wallet_spec.rb | 42 +- .../admin/admin_manages_census_spec.rb | 87 +- .../admin_manages_election_steps_spec.rb | 94 +- .../admin/election_setup_wizard_spec.rb | 104 +- spec/system/decidim/explore_elections_spec.rb | 28 +- .../decidim/preview_vote_online_spec.rb | 37 +- spec/system/decidim/results_online_spec.rb | 42 +- spec/system/decidim/vote_online_spec.rb | 96 +- spec/types/integration_schema_spec.rb | 2 +- 209 files changed, 6005 insertions(+), 3752 deletions(-) rename app/cells/decidim/vocdoni/{election_m => election_g}/data.erb (100%) create mode 100644 app/cells/decidim/vocdoni/election_g/footer.erb create mode 100644 app/cells/decidim/vocdoni/election_g/show.erb rename app/cells/decidim/vocdoni/{election_m => election_g}/tags.erb (100%) rename app/cells/decidim/vocdoni/{election_m_cell.rb => election_g_cell.rb} (84%) delete mode 100644 app/cells/decidim/vocdoni/election_m/footer.erb create mode 100644 app/cells/decidim/vocdoni/election_metadata_cell.rb create mode 100644 app/controllers/concerns/decidim/vocdoni/content_security_policy.rb create mode 100644 app/controllers/concerns/decidim/vocdoni/orderable.rb create mode 100644 app/packs/entrypoints/admin/decidim_vocdoni_admin.scss delete mode 100644 app/packs/entrypoints/admin/decidim_vocdoni_admin_stylesheet.js create mode 100644 app/packs/entrypoints/decidim_vocdoni.scss create mode 100644 app/packs/entrypoints/decidim_vocdoni_elections.js create mode 100644 app/packs/entrypoints/decidim_vocdoni_elections.scss create mode 100644 app/packs/src/decidim/vocdoni/vocdoni_admin.js create mode 100644 app/packs/stylesheets/decidim/vocdoni/elections/elections.scss create mode 100644 app/packs/stylesheets/decidim/vocdoni/vocdoni_admin.scss rename app/packs/stylesheets/decidim/vocdoni/{vocdoni.scss => vocdoni_application.scss} (78%) create mode 100644 app/views/decidim/vocdoni/admin/steps/_wallet_address.html.erb create mode 100644 app/views/decidim/vocdoni/elections/index.js.erb create mode 100755 bin/dev rename bin/{webpack => shakapacker} (77%) rename bin/{webpack-dev-server => shakapacker-dev-server} (70%) create mode 100644 db/migrate/20240516163557_add_answers_count_to_decidim_vocdoni_questions.rb rename spec/cells/decidim/vocdoni/{election_m_cell_spec.rb => election_g_cell_spec.rb} (61%) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a400b9fe..b7662587 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -7,8 +7,8 @@ on: pull_request: env: - RUBY_VERSION: 3.0.6 - NODE_VERSION: 16.9.1 + RUBY_VERSION: 3.1.1 + NODE_VERSION: 18.17.1 jobs: lint-report: @@ -49,4 +49,4 @@ jobs: name: Lint Ruby files - run: bundle exec erblint app/**/*.erb - name: Lint ERB files \ No newline at end of file + name: Lint ERB files diff --git a/.github/workflows/test-rails.yml b/.github/workflows/test-rails.yml index a648ef5c..0a548260 100644 --- a/.github/workflows/test-rails.yml +++ b/.github/workflows/test-rails.yml @@ -8,8 +8,8 @@ on: env: CI: "true" - RUBY_VERSION: 3.0.6 - NODE_VERSION: 16.9.1 + RUBY_VERSION: 3.1.1 + NODE_VERSION: 18.17.1 CODECOV_TOKEN: 3dc89116-a8ed-4df4-bf06-812fc0d8854d jobs: diff --git a/.rubocop_ruby.yml b/.rubocop_ruby.yml index ecce0861..042f55af 100644 --- a/.rubocop_ruby.yml +++ b/.rubocop_ruby.yml @@ -67,7 +67,7 @@ AllCops: # If a value is specified for TargetRubyVersion then it is used. # Else if .ruby-version exists and it contains an MRI version it is used. # Otherwise we fallback to the oldest officially supported Ruby version (2.0). - TargetRubyVersion: 3.0 + TargetRubyVersion: 3.1 # RSpec: # Patterns: @@ -1762,4 +1762,3 @@ Faker/DeprecatedArguments: questions: - number - supplemental - diff --git a/.ruby-version b/.ruby-version index 818bd47a..94ff29cc 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.0.6 +3.1.1 diff --git a/Gemfile b/Gemfile index c7b3d5e3..37c36af1 100644 --- a/Gemfile +++ b/Gemfile @@ -4,23 +4,32 @@ source "https://rubygems.org" ruby RUBY_VERSION -DECIDIM_VERSION = "0.27.6" +# Inside the development app, the relative require has to be one level up, as +# the Gemfile is copied to the development_app folder (almost) as is. +base_path = "" +base_path = "../" if File.basename(__dir__) == "development_app" +require_relative "#{base_path}lib/decidim/vocdoni/version" + +DECIDIM_VERSION = Decidim::Vocdoni::DECIDIM_VERSION gem "decidim", DECIDIM_VERSION gem "decidim-vocdoni", path: "." gem "bootsnap", "~> 1.7" -gem "faker", "~> 2.14" -gem "puma", "~> 5.6.2" +gem "faker", "~> 3.2" +gem "puma", "~> 6.3.1" group :development, :test do gem "byebug", "~> 11.0", platform: :mri + # se if we can skip this version lock in the future, related to this + # https://github.com/decidim/decidim/pull/12629 + gem "bullet", "~> 7.0", "< 7.1.0" gem "decidim-dev", DECIDIM_VERSION end group :development do - gem "i18n-tasks", "~> 0.9.37" + gem "i18n-tasks", "~> 1.0" gem "letter_opener_web", "~> 2.0" gem "listen", "~> 3.1" gem "rubocop-faker", "~> 1.1" @@ -30,5 +39,5 @@ group :development do end group :test do - gem "codecov", "~> 0.6.0", require: false + gem "codecov", require: false end diff --git a/Gemfile.lock b/Gemfile.lock index edccc2f7..28392098 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,47 +1,48 @@ PATH remote: . specs: - decidim-vocdoni (1.0) - decidim-core (>= 0.27) + decidim-vocdoni (2.0) + decidim-admin (>= 0.28.0, < 0.29) + decidim-core (>= 0.28.0, < 0.29) node-runner (~> 1.1) GEM remote: https://rubygems.org/ specs: - actioncable (6.1.7.6) - actionpack (= 6.1.7.6) - activesupport (= 6.1.7.6) + actioncable (6.1.7.7) + actionpack (= 6.1.7.7) + activesupport (= 6.1.7.7) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.1.7.6) - actionpack (= 6.1.7.6) - activejob (= 6.1.7.6) - activerecord (= 6.1.7.6) - activestorage (= 6.1.7.6) - activesupport (= 6.1.7.6) + actionmailbox (6.1.7.7) + actionpack (= 6.1.7.7) + activejob (= 6.1.7.7) + activerecord (= 6.1.7.7) + activestorage (= 6.1.7.7) + activesupport (= 6.1.7.7) mail (>= 2.7.1) - actionmailer (6.1.7.6) - actionpack (= 6.1.7.6) - actionview (= 6.1.7.6) - activejob (= 6.1.7.6) - activesupport (= 6.1.7.6) + actionmailer (6.1.7.7) + actionpack (= 6.1.7.7) + actionview (= 6.1.7.7) + activejob (= 6.1.7.7) + activesupport (= 6.1.7.7) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.1.7.6) - actionview (= 6.1.7.6) - activesupport (= 6.1.7.6) + actionpack (6.1.7.7) + actionview (= 6.1.7.7) + activesupport (= 6.1.7.7) rack (~> 2.0, >= 2.0.9) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (6.1.7.6) - actionpack (= 6.1.7.6) - activerecord (= 6.1.7.6) - activestorage (= 6.1.7.6) - activesupport (= 6.1.7.6) + actiontext (6.1.7.7) + actionpack (= 6.1.7.7) + activerecord (= 6.1.7.7) + activestorage (= 6.1.7.7) + activesupport (= 6.1.7.7) nokogiri (>= 1.8.5) - actionview (6.1.7.6) - activesupport (= 6.1.7.6) + actionview (6.1.7.7) + activesupport (= 6.1.7.7) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -49,52 +50,40 @@ GEM active_link_to (1.0.5) actionpack addressable - activejob (6.1.7.6) - activesupport (= 6.1.7.6) + activejob (6.1.7.7) + activesupport (= 6.1.7.7) globalid (>= 0.3.6) - activemodel (6.1.7.6) - activesupport (= 6.1.7.6) - activerecord (6.1.7.6) - activemodel (= 6.1.7.6) - activesupport (= 6.1.7.6) - activestorage (6.1.7.6) - actionpack (= 6.1.7.6) - activejob (= 6.1.7.6) - activerecord (= 6.1.7.6) - activesupport (= 6.1.7.6) + activemodel (6.1.7.7) + activesupport (= 6.1.7.7) + activerecord (6.1.7.7) + activemodel (= 6.1.7.7) + activesupport (= 6.1.7.7) + activestorage (6.1.7.7) + actionpack (= 6.1.7.7) + activejob (= 6.1.7.7) + activerecord (= 6.1.7.7) + activesupport (= 6.1.7.7) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (6.1.7.6) + activesupport (6.1.7.7) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) zeitwerk (~> 2.3) - acts_as_list (0.9.19) - activerecord (>= 3.0) + acts_as_list (1.1.0) + activerecord (>= 4.2) addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) ast (2.4.2) - axe-core-api (4.9.0) - dumb_delegator - virtus - axe-core-rspec (4.1.0) - axe-core-api - dumb_delegator - virtus - axiom-types (0.1.1) - descendants_tracker (~> 0.0.4) - ice_nine (~> 0.11.0) - thread_safe (~> 0.3, >= 0.3.1) base64 (0.2.0) batch-loader (1.5.0) bcrypt (3.1.20) - better_html (1.0.16) - actionview (>= 4.0) - activesupport (>= 4.0) + better_html (2.1.1) + actionview (>= 6.0) + activesupport (>= 6.0) ast (~> 2.0) erubi (~> 1.4) - html_tokenizer (~> 0.0.6) parser (>= 2.4) smart_properties bigdecimal (3.1.8) @@ -103,6 +92,9 @@ GEM msgpack (~> 1.2) browser (2.7.1) builder (3.2.4) + bullet (7.0.7) + activesupport (>= 3.0.0) + uniform_notifier (~> 1.11) byebug (11.1.3) capybara (3.40.0) addressable @@ -113,7 +105,7 @@ GEM rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) - carrierwave (2.2.5) + carrierwave (2.2.6) activemodel (>= 5.0.0) activesupport (>= 5.0.0) addressable (~> 2.6) @@ -133,85 +125,73 @@ GEM actionpack (>= 5.0) cells (>= 4.1.6, < 5.0.0) charlock_holmes (0.7.7) - chef-utils (18.4.12) - concurrent-ruby - childprocess (4.1.0) - codecov (0.6.0) - simplecov (>= 0.15, < 0.22) - coercible (1.0.0) - descendants_tracker (~> 0.0.1) - coffee-rails (5.0.0) - coffee-script (>= 2.2.0) - railties (>= 5.2.0) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.12.2) + childprocess (5.0.0) + codecov (0.2.12) + json + simplecov commonmarker (0.23.10) concurrent-ruby (1.2.3) crack (1.0.0) bigdecimal rexml crass (1.0.6) - css_parser (1.16.0) + css_parser (1.17.1) addressable date (3.3.4) date_validator (0.12.0) activemodel (>= 3) activesupport (>= 3) - db-query-matchers (0.10.0) - activesupport (>= 4.0, < 7) - rspec (~> 3.0) - decidim (0.27.6) - decidim-accountability (= 0.27.6) - decidim-admin (= 0.27.6) - decidim-api (= 0.27.6) - decidim-assemblies (= 0.27.6) - decidim-blogs (= 0.27.6) - decidim-budgets (= 0.27.6) - decidim-comments (= 0.27.6) - decidim-core (= 0.27.6) - decidim-debates (= 0.27.6) - decidim-forms (= 0.27.6) - decidim-generators (= 0.27.6) - decidim-meetings (= 0.27.6) - decidim-pages (= 0.27.6) - decidim-participatory_processes (= 0.27.6) - decidim-proposals (= 0.27.6) - decidim-sortitions (= 0.27.6) - decidim-surveys (= 0.27.6) - decidim-system (= 0.27.6) - decidim-templates (= 0.27.6) - decidim-verifications (= 0.27.6) - decidim-accountability (0.27.6) - decidim-comments (= 0.27.6) - decidim-core (= 0.27.6) - decidim-admin (0.27.6) + decidim (0.28.1) + decidim-accountability (= 0.28.1) + decidim-admin (= 0.28.1) + decidim-api (= 0.28.1) + decidim-assemblies (= 0.28.1) + decidim-blogs (= 0.28.1) + decidim-budgets (= 0.28.1) + decidim-comments (= 0.28.1) + decidim-core (= 0.28.1) + decidim-debates (= 0.28.1) + decidim-forms (= 0.28.1) + decidim-generators (= 0.28.1) + decidim-meetings (= 0.28.1) + decidim-pages (= 0.28.1) + decidim-participatory_processes (= 0.28.1) + decidim-proposals (= 0.28.1) + decidim-sortitions (= 0.28.1) + decidim-surveys (= 0.28.1) + decidim-system (= 0.28.1) + decidim-templates (= 0.28.1) + decidim-verifications (= 0.28.1) + decidim-accountability (0.28.1) + decidim-comments (= 0.28.1) + decidim-core (= 0.28.1) + decidim-admin (0.28.1) active_link_to (~> 1.0) - decidim-core (= 0.27.6) + decidim-core (= 0.28.1) devise (~> 4.7) devise-i18n (~> 1.2) devise_invitable (~> 2.0, >= 2.0.9) - decidim-api (0.27.6) - decidim-core (= 0.27.6) - graphql (~> 1.12, < 1.13) - graphql-docs (~> 2.1.0) + decidim-api (0.28.1) + commonmarker (~> 0.23.0, >= 0.23.9) + decidim-core (= 0.28.1) + graphql (~> 2.0.0) + graphql-docs (~> 3.0.1) rack-cors (~> 1.0) - decidim-assemblies (0.27.6) - decidim-core (= 0.27.6) - decidim-blogs (0.27.6) - decidim-admin (= 0.27.6) - decidim-comments (= 0.27.6) - decidim-core (= 0.27.6) - decidim-budgets (0.27.6) - decidim-comments (= 0.27.6) - decidim-core (= 0.27.6) - decidim-comments (0.27.6) - decidim-core (= 0.27.6) + decidim-assemblies (0.28.1) + decidim-core (= 0.28.1) + decidim-blogs (0.28.1) + decidim-admin (= 0.28.1) + decidim-comments (= 0.28.1) + decidim-core (= 0.28.1) + decidim-budgets (0.28.1) + decidim-comments (= 0.28.1) + decidim-core (= 0.28.1) + decidim-comments (0.28.1) + decidim-core (= 0.28.1) redcarpet (~> 3.5, >= 3.5.1) - decidim-core (0.27.6) + decidim-core (0.28.1) active_link_to (~> 1.0) - acts_as_list (~> 0.9) + acts_as_list (~> 1.0) batch-loader (~> 1.2) browser (~> 2.7) carrierwave (~> 2.2.5, >= 2.2.5) @@ -220,9 +200,9 @@ GEM charlock_holmes (~> 0.7) date_validator (~> 0.12.0) devise (~> 4.7) - devise-i18n (~> 1.2) + devise-i18n (~> 1.2, < 1.11.1) diffy (~> 3.3) - doorkeeper (~> 5.1) + doorkeeper (~> 5.6, >= 5.6.6) doorkeeper-i18n (~> 4.0) file_validators (~> 3.0) fog-local (~> 0.6) @@ -231,114 +211,114 @@ GEM hashdiff (>= 0.4.0, < 2.0.0) invisible_captcha (~> 0.12) kaminari (~> 1.2, >= 1.2.1) - loofah (~> 2.19.0) + loofah (~> 2.19, >= 2.19.1) mime-types (>= 1.16, < 4.0) mini_magick (~> 4.9) + net-smtp (~> 0.3.1) omniauth (~> 2.0) omniauth-facebook (~> 5.0) omniauth-google-oauth2 (~> 1.0) omniauth-rails_csrf_protection (~> 1.0) omniauth-twitter (~> 1.4) paper_trail (~> 12.0) - pg (~> 1.1.4, < 2) + pg (~> 1.4.0, < 2) pg_search (~> 2.2) premailer-rails (~> 1.10) - rack (~> 2.2, >= 2.2.3) + psych (~> 4.0) + rack (~> 2.2, >= 2.2.6.4) rack-attack (~> 6.0) - rails (~> 6.1.0) + rails (~> 6.1.7, >= 6.1.7.4) rails-i18n (~> 6.0) - ransack (~> 2.4.1) + ransack (~> 3.2.1) redis (~> 4.1) request_store (~> 1.5.0) rubyXL (~> 3.4) rubyzip (~> 2.0) seven_zip_ruby (~> 1.3) - social-share-button (~> 1.2, >= 1.2.1) - valid_email2 (~> 2.1) - webpacker (= 6.0.0.rc.5) - webpush (~> 1.1) + shakapacker (~> 7.1.0) + valid_email2 (~> 4.0) + web-push (~> 3.0) wisper (~> 2.0) - decidim-debates (0.27.6) - decidim-comments (= 0.27.6) - decidim-core (= 0.27.6) - decidim-dev (0.27.6) - axe-core-rspec (~> 4.1.0) + decidim-debates (0.28.1) + decidim-comments (= 0.28.1) + decidim-core (= 0.28.1) + decidim-dev (0.28.1) + bullet (~> 7.0) byebug (~> 11.0) - capybara (~> 3.24) - db-query-matchers (~> 0.10.0) - decidim (= 0.27.6) - erb_lint (~> 0.0.35) - factory_bot_rails (~> 4.8) - i18n-tasks (~> 0.9.18) - mdl (~> 0.5) - nokogiri (~> 1.13) - parallel_tests (~> 3.7) - puma (~> 5.0) + capybara (~> 3.39) + decidim (= 0.28.1) + erb_lint (~> 0.4.0) + factory_bot_rails (~> 6.2) + faker (~> 3.2) + i18n-tasks (~> 1.0) + nokogiri (~> 1.14, >= 1.14.3) + parallel_tests (~> 4.2) + puma (~> 6.2, >= 6.3.1) rails-controller-testing (~> 1.0) + rspec (~> 3.12) rspec-cells (~> 0.3.7) - rspec-html-matchers (~> 0.9.1) - rspec-rails (~> 4.0) + rspec-html-matchers (~> 0.10) + rspec-rails (~> 6.0) rspec-retry (~> 0.6.2) - rspec_junit_formatter (~> 0.3.0) - rubocop (~> 1.28.0) - rubocop-rails (~> 2.14) - rubocop-rspec (~> 2.10) - selenium-webdriver (~> 4.1.0) - simplecov (~> 0.21.0) + rspec_junit_formatter (~> 0.6.0) + rubocop (~> 1.50.0) + rubocop-faker (~> 1.1) + rubocop-rails (~> 2.19) + rubocop-rspec (~> 2.20) + selenium-webdriver (~> 4.9) + simplecov (~> 0.22.0) simplecov-cobertura (~> 2.1.0) w3c_rspec_validators (~> 0.3.0) - webmock (~> 3.6) + webmock (~> 3.18) wisper-rspec (~> 1.0) - decidim-forms (0.27.6) - decidim-core (= 0.27.6) + decidim-forms (0.28.1) + decidim-core (= 0.28.1) wicked_pdf (~> 2.1) wkhtmltopdf-binary (~> 0.12) - decidim-generators (0.27.6) - decidim-core (= 0.27.6) - decidim-meetings (0.27.6) - decidim-core (= 0.27.6) - decidim-forms (= 0.27.6) + decidim-generators (0.28.1) + decidim-core (= 0.28.1) + decidim-meetings (0.28.1) + decidim-core (= 0.28.1) + decidim-forms (= 0.28.1) icalendar (~> 2.5) - decidim-pages (0.27.6) - decidim-core (= 0.27.6) - decidim-participatory_processes (0.27.6) - decidim-core (= 0.27.6) - decidim-proposals (0.27.6) - decidim-comments (= 0.27.6) - decidim-core (= 0.27.6) - doc2text (~> 0.4.5) + decidim-pages (0.28.1) + decidim-core (= 0.28.1) + decidim-participatory_processes (0.28.1) + decidim-core (= 0.28.1) + decidim-proposals (0.28.1) + decidim-comments (= 0.28.1) + decidim-core (= 0.28.1) + doc2text (~> 0.4.6) redcarpet (~> 3.5, >= 3.5.1) - decidim-sortitions (0.27.6) - decidim-admin (= 0.27.6) - decidim-comments (= 0.27.6) - decidim-core (= 0.27.6) - decidim-proposals (= 0.27.6) - decidim-surveys (0.27.6) - decidim-core (= 0.27.6) - decidim-forms (= 0.27.6) - decidim-system (0.27.6) + decidim-sortitions (0.28.1) + decidim-admin (= 0.28.1) + decidim-comments (= 0.28.1) + decidim-core (= 0.28.1) + decidim-proposals (= 0.28.1) + decidim-surveys (0.28.1) + decidim-core (= 0.28.1) + decidim-forms (= 0.28.1) + decidim-system (0.28.1) active_link_to (~> 1.0) - decidim-core (= 0.27.6) + decidim-core (= 0.28.1) devise (~> 4.7) devise-i18n (~> 1.2) devise_invitable (~> 2.0, >= 2.0.9) - decidim-templates (0.27.6) - decidim-core (= 0.27.6) - decidim-forms (= 0.27.6) - decidim-verifications (0.27.6) - decidim-core (= 0.27.6) + decidim-templates (0.28.1) + decidim-core (= 0.28.1) + decidim-forms (= 0.28.1) + decidim-verifications (0.28.1) + decidim-core (= 0.28.1) declarative-builder (0.1.0) declarative-option (< 0.2.0) declarative-option (0.1.0) - descendants_tracker (0.0.4) - thread_safe (~> 0.3, >= 0.3.1) - devise (4.9.3) + devise (4.9.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) - devise-i18n (1.12.0) + devise-i18n (1.11.0) devise (>= 4.9.0) devise_invitable (2.0.9) actionmailer (>= 5.0) @@ -349,14 +329,12 @@ GEM nokogiri (>= 1.13.2, < 1.17.0) rubyzip (~> 2.3.0) docile (1.4.0) - doorkeeper (5.6.8) + doorkeeper (5.6.9) railties (>= 5) doorkeeper-i18n (4.0.1) - dumb_delegator (1.0.0) - erb_lint (0.0.37) + erb_lint (0.4.0) activesupport - better_html (~> 1.0.7) - html_tokenizer + better_html (>= 2.0.1) parser (>= 2.7.1.4) rainbow rubocop @@ -364,17 +342,16 @@ GEM erbse (0.1.4) temple erubi (1.12.0) - escape_utils (1.3.0) - excon (0.109.0) - execjs (2.9.1) + escape_utils (1.2.2) + excon (0.110.0) extended-markdown-filter (0.7.0) html-pipeline (~> 2.9) - factory_bot (4.11.1) - activesupport (>= 3.0.0) - factory_bot_rails (4.11.1) - factory_bot (~> 4.11.1) - railties (>= 3.0.0) - faker (2.23.0) + factory_bot (6.4.6) + activesupport (>= 5.0.0) + factory_bot_rails (6.4.3) + factory_bot (~> 6.4) + railties (>= 5.0.0) + faker (3.3.1) i18n (>= 1.8.11, < 2) faraday (2.9.0) faraday-net_http (>= 2.0, < 3.2) @@ -401,47 +378,47 @@ GEM geocoder (1.8.2) globalid (1.2.1) activesupport (>= 6.1) - graphql (1.12.24) - graphql-docs (2.1.0) + graphql (2.0.29) + base64 + graphql-docs (3.0.1) commonmarker (~> 0.16) - escape_utils (~> 1.2) + escape_utils (~> 1.2.2) extended-markdown-filter (~> 0.4) gemoji (~> 3.0) - graphql (~> 1.12) + graphql (~> 2.0) html-pipeline (~> 2.9) sass (~> 3.4) hashdiff (1.1.0) hashie (5.0.0) highline (3.0.1) - hkdf (0.3.0) html-pipeline (2.14.3) activesupport (>= 2) nokogiri (>= 1.4) - html_tokenizer (0.0.8) htmlentities (4.3.4) - i18n (1.14.1) + i18n (1.14.5) concurrent-ruby (~> 1.0) - i18n-tasks (0.9.37) + i18n-tasks (1.0.13) activesupport (>= 4.0.2) ast (>= 2.1.0) + better_html (>= 1.0, < 3.0) erubi highline (>= 2.0.0) i18n - parser (>= 2.2.3.0) + parser (>= 3.2.2.1) rails-i18n rainbow (>= 2.2.2, < 4.0) terminal-table (>= 1.5.1) icalendar (2.10.1) ice_cube (~> 0.16) ice_cube (0.16.4) - ice_nine (0.11.2) image_processing (1.12.2) mini_magick (>= 4.9.5, < 5) ruby-vips (>= 2.0.17, < 3) invisible_captcha (0.13.0) rails (>= 3.2.0) json (2.7.2) - jwt (2.7.1) + jwt (2.8.1) + base64 kaminari (1.2.2) activesupport (>= 4.1.0) kaminari-actionview (= 1.2.2) @@ -454,50 +431,36 @@ GEM activerecord kaminari-core (= 1.2.2) kaminari-core (1.2.2) - kramdown (2.4.0) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - launchy (2.5.2) + launchy (3.0.0) addressable (~> 2.8) - letter_opener (1.8.1) - launchy (>= 2.2, < 3) + childprocess (~> 5.0) + letter_opener (1.10.0) + launchy (>= 2.2, < 4) letter_opener_web (2.0.0) actionmailer (>= 5.2) letter_opener (~> 1.7) railties (>= 5.2) rexml - listen (3.8.0) + listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - loofah (2.19.1) + loofah (2.22.0) crass (~> 1.0.2) - nokogiri (>= 1.5.9) + nokogiri (>= 1.12.0) mail (2.8.1) mini_mime (>= 0.1.1) net-imap net-pop net-smtp - marcel (1.0.2) + marcel (1.0.4) matrix (0.4.2) - mdl (0.13.0) - kramdown (~> 2.3) - kramdown-parser-gfm (~> 1.1) - mixlib-cli (~> 2.1, >= 2.1.1) - mixlib-config (>= 2.2.1, < 4) - mixlib-shellout - method_source (1.0.0) + method_source (1.1.0) mime-types (3.5.2) mime-types-data (~> 3.2015) - mime-types-data (3.2023.1205) + mime-types-data (3.2024.0305) mini_magick (4.12.0) mini_mime (1.1.5) - minitest (5.22.0) - mixlib-cli (2.1.8) - mixlib-config (3.0.27) - tomlrb - mixlib-shellout (3.2.7) - chef-utils + minitest (5.22.3) msgpack (1.7.2) multi_xml (0.6.0) net-http (0.4.1) @@ -509,15 +472,15 @@ GEM net-protocol net-protocol (0.2.2) timeout - net-smtp (0.4.0.1) + net-smtp (0.3.4) net-protocol - nio4r (2.7.0) - node-runner (1.1.0) - nokogiri (1.14.5-arm64-darwin) + nio4r (2.7.3) + node-runner (1.2.0) + nokogiri (1.16.4-arm64-darwin) racc (~> 1.4) - nokogiri (1.14.5-x86_64-darwin) + nokogiri (1.16.4-x86_64-darwin) racc (~> 1.4) - nokogiri (1.14.5-x86_64-linux) + nokogiri (1.16.4-x86_64-linux) racc (~> 1.4) oauth (1.1.0) oauth-tty (~> 1.0, >= 1.0.1) @@ -538,11 +501,11 @@ GEM rack-protection omniauth-facebook (5.0.0) omniauth-oauth2 (~> 1.2) - omniauth-google-oauth2 (1.1.1) + omniauth-google-oauth2 (1.1.2) jwt (>= 2.0) - oauth2 (~> 2.0.6) + oauth2 (~> 2.0) omniauth (~> 2.0) - omniauth-oauth2 (~> 1.8.0) + omniauth-oauth2 (~> 1.8) omniauth-oauth (1.2.0) oauth omniauth (>= 1.0, < 3) @@ -555,21 +518,22 @@ GEM omniauth-twitter (1.4.0) omniauth-oauth (~> 1.1) rack + openssl (3.2.0) orm_adapter (0.5.0) paper_trail (12.3.0) activerecord (>= 5.2) request_store (~> 1.1) parallel (1.24.0) - parallel_tests (3.13.0) + parallel_tests (4.7.1) parallel parser (3.3.0.5) ast (~> 2.4.1) racc - pg (1.1.4) + pg (1.4.6) pg_search (2.3.6) activerecord (>= 5.2) activesupport (>= 5.2) - premailer (1.22.0) + premailer (1.23.0) addressable css_parser (>= 1.12.0) htmlentities (>= 4.0.0) @@ -577,11 +541,13 @@ GEM actionmailer (>= 3) net-smtp premailer (~> 1.7, >= 1.7.9) - public_suffix (5.0.4) - puma (5.6.8) + psych (4.0.6) + stringio + public_suffix (5.0.5) + puma (6.3.1) nio4r (~> 2.0) racc (1.7.3) - rack (2.2.8) + rack (2.2.9) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-cors (1.1.1) @@ -593,20 +559,20 @@ GEM rack rack-test (2.1.0) rack (>= 1.3) - rails (6.1.7.6) - actioncable (= 6.1.7.6) - actionmailbox (= 6.1.7.6) - actionmailer (= 6.1.7.6) - actionpack (= 6.1.7.6) - actiontext (= 6.1.7.6) - actionview (= 6.1.7.6) - activejob (= 6.1.7.6) - activemodel (= 6.1.7.6) - activerecord (= 6.1.7.6) - activestorage (= 6.1.7.6) - activesupport (= 6.1.7.6) + rails (6.1.7.7) + actioncable (= 6.1.7.7) + actionmailbox (= 6.1.7.7) + actionmailer (= 6.1.7.7) + actionpack (= 6.1.7.7) + actiontext (= 6.1.7.7) + actionview (= 6.1.7.7) + activejob (= 6.1.7.7) + activemodel (= 6.1.7.7) + activerecord (= 6.1.7.7) + activestorage (= 6.1.7.7) + activesupport (= 6.1.7.7) bundler (>= 1.15.0) - railties (= 6.1.7.6) + railties (= 6.1.7.7) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) @@ -616,22 +582,23 @@ GEM activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.5.0) - loofah (~> 2.19, >= 2.19.1) + rails-html-sanitizer (1.6.0) + loofah (~> 2.21) + nokogiri (~> 1.14) rails-i18n (6.0.0) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 7) - railties (6.1.7.6) - actionpack (= 6.1.7.6) - activesupport (= 6.1.7.6) + railties (6.1.7.7) + actionpack (= 6.1.7.7) + activesupport (= 6.1.7.7) method_source rake (>= 12.2) thor (~> 1.0) rainbow (3.1.1) - rake (13.1.0) - ransack (2.4.2) - activerecord (>= 5.2.4) - activesupport (>= 5.2.4) + rake (13.2.1) + ransack (3.2.1) + activerecord (>= 6.1.5) + activesupport (>= 6.1.5) i18n rb-fsevent (0.11.2) rb-inotify (0.10.1) @@ -657,49 +624,60 @@ GEM rspec-expectations (3.13.0) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-html-matchers (0.9.4) + rspec-html-matchers (0.10.0) nokogiri (~> 1) - rspec (>= 3.0.0.a, < 4) + rspec (>= 3.0.0.a) rspec-mocks (3.13.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-rails (4.1.2) - actionpack (>= 4.2) - activesupport (>= 4.2) - railties (>= 4.2) - rspec-core (~> 3.10) - rspec-expectations (~> 3.10) - rspec-mocks (~> 3.10) - rspec-support (~> 3.10) + rspec-rails (6.1.2) + actionpack (>= 6.1) + activesupport (>= 6.1) + railties (>= 6.1) + rspec-core (~> 3.13) + rspec-expectations (~> 3.13) + rspec-mocks (~> 3.13) + rspec-support (~> 3.13) rspec-retry (0.6.2) rspec-core (> 3.3) rspec-support (3.13.1) - rspec_junit_formatter (0.3.0) + rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (1.28.2) + rubocop (1.50.2) + json (~> 2.3) parallel (~> 1.10) - parser (>= 3.1.0.0) + parser (>= 3.2.0.0) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) - rexml - rubocop-ast (>= 1.17.0, < 2.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.30.0) - parser (>= 3.2.1.0) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.2) + parser (>= 3.3.0.4) + rubocop-capybara (2.20.0) + rubocop (~> 1.41) + rubocop-factory_bot (2.25.1) + rubocop (~> 1.41) rubocop-faker (1.1.0) faker (>= 2.12.0) rubocop (>= 0.82.0) - rubocop-rails (2.15.2) + rubocop-rails (2.24.1) activesupport (>= 4.2.0) rack (>= 1.1) - rubocop (>= 1.7.0, < 2.0) - rubocop-rspec (2.11.1) - rubocop (~> 1.19) + rubocop (>= 1.33.0, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + rubocop-rspec (2.29.2) + rubocop (~> 1.40) + rubocop-capybara (~> 2.17) + rubocop-factory_bot (~> 2.22) + rubocop-rspec_rails (~> 2.28) + rubocop-rspec_rails (2.28.3) + rubocop (~> 1.40) ruby-progressbar (1.13.0) - ruby-vips (2.2.0) + ruby-vips (2.2.1) ffi (~> 1.12) - rubyXL (3.4.25) + rubyXL (3.4.27) nokogiri (>= 1.10.8) rubyzip (>= 1.3.0) rubyzip (2.3.2) @@ -708,13 +686,19 @@ GEM sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - selenium-webdriver (4.1.0) - childprocess (>= 0.5, < 5.0) + selenium-webdriver (4.21.0) + base64 (~> 0.2) rexml (~> 3.2, >= 3.2.5) - rubyzip (>= 1.2.2) + rubyzip (>= 1.2.2, < 3.0) + websocket (~> 1.0) semantic_range (3.0.0) seven_zip_ruby (1.3.0) - simplecov (0.21.2) + shakapacker (7.1.0) + activesupport (>= 5.2) + rack-proxy (>= 0.6.1) + railties (>= 5.2) + semantic_range (>= 2.3.0) + simplecov (0.22.0) docile (~> 1.1) simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) @@ -727,8 +711,6 @@ GEM snaky_hash (2.0.1) hashie version_gem (~> 1.1, >= 1.1.1) - social-share-button (1.2.4) - coffee-rails spring (2.1.1) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) @@ -741,27 +723,23 @@ GEM activesupport (>= 5.2) sprockets (>= 3.0.0) ssrf_filter (1.1.2) + stringio (3.1.0) temple (0.10.3) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) - thor (1.3.0) - thread_safe (0.3.6) + thor (1.3.1) tilt (2.3.0) timeout (0.4.1) - tomlrb (2.0.3) tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) unicode-display_width (2.5.0) + uniform_notifier (1.16.0) uri (0.13.0) - valid_email2 (2.3.1) + valid_email2 (4.0.6) activemodel (>= 3.2) mail (~> 2.5) - version_gem (1.1.3) - virtus (2.0.0) - axiom-types (~> 0.1) - coercible (~> 1.0) - descendants_tracker (~> 0.0, >= 0.0.3) + version_gem (1.1.4) w3c_rspec_validators (0.3.0) rails rspec @@ -777,18 +755,14 @@ GEM activemodel (>= 6.0.0) bindex (>= 0.4.0) railties (>= 6.0.0) + web-push (3.0.1) + jwt (~> 2.0) + openssl (~> 3.0) webmock (3.23.0) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) - webpacker (6.0.0.rc.5) - activesupport (>= 5.2) - rack-proxy (>= 0.6.1) - railties (>= 5.2) - semantic_range (>= 2.3.0) - webpush (1.1.0) - hkdf (~> 0.2) - jwt (~> 2.0) + websocket (1.2.10) websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) @@ -802,31 +776,30 @@ GEM zeitwerk (2.6.13) PLATFORMS - arm64-darwin-22 arm64-darwin-23 - x86_64-darwin-22 - x86_64-darwin-23 + x86_64-darwin x86_64-linux DEPENDENCIES bootsnap (~> 1.7) + bullet (~> 7.0, < 7.1.0) byebug (~> 11.0) - codecov (~> 0.6.0) - decidim (= 0.27.6) - decidim-dev (= 0.27.6) + codecov + decidim (= 0.28.1) + decidim-dev (= 0.28.1) decidim-vocdoni! - faker (~> 2.14) - i18n-tasks (~> 0.9.37) + faker (~> 3.2) + i18n-tasks (~> 1.0) letter_opener_web (~> 2.0) listen (~> 3.1) - puma (~> 5.6.2) + puma (~> 6.3.1) rubocop-faker (~> 1.1) spring (~> 2.0) spring-watcher-listen (~> 2.0.0) web-console (~> 4.2) RUBY VERSION - ruby 3.0.6p216 + ruby 3.1.1p18 BUNDLED WITH - 2.4.22 + 2.5.10 diff --git a/README.md b/README.md index 88fc6181..ca082676 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,8 @@ Depending on your Decidim version, you can choose the corresponding version to e | Version | Compatible Decidim versions | |---------|-----------------------------| | 1.x | 0.27.x | +| 2.x | 0.28.x | + ## Cron based tasks @@ -103,8 +105,7 @@ The usage of the Vocdoni platform has some economic costs, as its using a Blockc For using it in a production environment with guaranties, you may contact with the maintaners of this plugin [PokeCode](https://pokecode.net) asking for a pricing. Costs will vary depending on your census size and the number of elections you want to perform. -As there could be other resellers and not only the PokeCode, this needs to be configured through the ENV -variables: VOCDONI_RESELLER_NAME, VOCDONI_RESELLER_EMAIL +As there could be other resellers and not only PokeCode, contact information can be configured by using the ENV variables VOCDONI_RESELLER_NAME and VOCDONI_RESELLER_EMAIL (see the [configuration](#configuration) for more information) ## Configuration diff --git a/Rakefile b/Rakefile index 4f0c2451..58f7480a 100644 --- a/Rakefile +++ b/Rakefile @@ -3,6 +3,8 @@ require "decidim/dev/common_rake" def install_module(path) + # The Vocdoni SDK needs custom babel plugins not included in the default Decidim version of this file + FileUtils.cp("babel.config.json", "#{path}/babel.config.json") Dir.chdir(path) do system("bin/rails decidim_vocdoni:install:migrations") system("bin/rails db:migrate") @@ -25,7 +27,6 @@ desc "Generates a dummy app for testing" task test_app: "decidim:generate_external_test_app" do ENV["RAILS_ENV"] = "test" install_module("spec/decidim_dummy_app") - override_webpacker_config_files("spec/decidim_dummy_app") end desc "Generates a development app" diff --git a/app/cells/decidim/vocdoni/census_authorization_modal/internal_census.erb b/app/cells/decidim/vocdoni/census_authorization_modal/internal_census.erb index a20e33a7..55c9ee24 100644 --- a/app/cells/decidim/vocdoni/census_authorization_modal/internal_census.erb +++ b/app/cells/decidim/vocdoni/census_authorization_modal/internal_census.erb @@ -1,5 +1,6 @@

<%= not_authorized_explanation(authorized_method) %>

<%= link_to authorize_link_text(authorized_method), - authorized_method.root_path(redirect_url: redirect_url), class: "button" %> + authorized_method.root_path(redirect_url: redirect_url), + class: "button button__lg button__secondary mt-4" %>
diff --git a/app/cells/decidim/vocdoni/census_authorization_modal/show.erb b/app/cells/decidim/vocdoni/census_authorization_modal/show.erb index 507bf30e..141f7c33 100644 --- a/app/cells/decidim/vocdoni/census_authorization_modal/show.erb +++ b/app/cells/decidim/vocdoni/census_authorization_modal/show.erb @@ -1,11 +1,13 @@ - + + <% end %> + diff --git a/app/cells/decidim/vocdoni/election_results/progress_bar.erb b/app/cells/decidim/vocdoni/election_results/progress_bar.erb index b5907fbe..cdfc814d 100644 --- a/app/cells/decidim/vocdoni/election_results/progress_bar.erb +++ b/app/cells/decidim/vocdoni/election_results/progress_bar.erb @@ -1,16 +1,22 @@ -
-
-
-
-
+
+
+
+
-
+
<%= t("decidim.vocdoni.elections.results.percentage", count: votes_percentage) %>
-
+
<%= t("decidim.vocdoni.elections.results.votes", count: votes) %>
diff --git a/app/cells/decidim/vocdoni/election_results/show.erb b/app/cells/decidim/vocdoni/election_results/show.erb index 1692ae8d..f12e23c3 100644 --- a/app/cells/decidim/vocdoni/election_results/show.erb +++ b/app/cells/decidim/vocdoni/election_results/show.erb @@ -1,30 +1,30 @@ -
-
-

<%= t("decidim.vocdoni.elections.results.title") %>

+
+ <%= icon "bar-chart-box-line" %> +

<%= t("decidim.vocdoni.elections.results.title") %>

+
-

<%= t("decidim.vocdoni.elections.results.description") %>

+

<%= t("decidim.vocdoni.elections.results.description") %>

-
    - <% model.questions.each_with_index do |question, i| %> -
  • " data-accordion-item> - <%= translated_attribute(question.title) %> +
      + <% model.questions.each_with_index do |question, ix| %> +
    • + -
      - <% question.answers.each do |answer| %> -
      -

      - <%= translated_attribute(answer.title) %> -

      + -
    • - <% end %> -
    -
-
+ <% end %> +
+ + <% end %> + diff --git a/app/cells/decidim/vocdoni/election_results_realtime/show.erb b/app/cells/decidim/vocdoni/election_results_realtime/show.erb index ab41f3ef..74a89916 100644 --- a/app/cells/decidim/vocdoni/election_results_realtime/show.erb +++ b/app/cells/decidim/vocdoni/election_results_realtime/show.erb @@ -1,20 +1,29 @@ <% vote_stats_scope = "decidim.vocdoni.admin.steps" %> +
+ <%= icon "bar-chart-box-line" %> +

<%= t("vote_stats.title", scope: vote_stats_scope) %>

+
+ +

<%= t("description", scope: "decidim.vocdoni.elections.show") %>

+
-

<%= t("vote_stats.title", scope: vote_stats_scope) %>

-

<%= t("description", scope: "decidim.vocdoni.elections.show") %>

-
    +
      <% model.questions.each_with_index do |question, question_index| %> -
    • " data-accordion-item> - <%= t("vote_stats.question", scope: vote_stats_scope) %>: <%= translated_attribute(question.title) %> -
      -
      +
    • + + +
      +
      + <% if allowed_to?(:index, :census, election: election) && election.ready_for_census_form? %> + <%= link_to t("next_button", scope: "decidim.vocdoni.admin.elections.new"), election_census_path(election), class: "button button__sm button__secondary" %> <% end %>
      -
      - <% if allowed_to?(:index, :census, election: election) && election.ready_for_census_form? %> - <%= link_to t("next_button", scope: "decidim.vocdoni.admin.elections.new"), election_census_path(election), class: "button form-general-submit" %> - <% end %> -
      -<%= stylesheet_pack_tag "decidim_vocdoni_admin_stylesheet" %> +<%= append_javascript_pack_tag "decidim_vocdoni_admin" %> diff --git a/app/views/decidim/vocdoni/admin/questions/new.html.erb b/app/views/decidim/vocdoni/admin/questions/new.html.erb index 2f5a8c2c..88e2e0c4 100644 --- a/app/views/decidim/vocdoni/admin/questions/new.html.erb +++ b/app/views/decidim/vocdoni/admin/questions/new.html.erb @@ -2,11 +2,17 @@ <%= render partial: "decidim/vocdoni/admin/shared/election_title" %> <%= render partial: "decidim/vocdoni/admin/shared/tab_links", locals: { active_class: "questions", election: election } %> -<%= decidim_form_for([election, @form], html: { class: "form new_question" }) do |f| %> - <%= render partial: "form", object: f, locals: { title: t(".title") } %> +
      +
      + <%= decidim_form_for([election, @form], html: { class: "form new_question form-defaults" }) do |f| %> + <%= render partial: "form", object: f, locals: { title: t(".title") } %> -
      - <%= f.submit t(".create") %> +
      +
      + <%= f.submit t(".create"), class: "button button__sm button__secondary" %> +
      +
      + <% end %>
      -<% end %> -<%= stylesheet_pack_tag "decidim_vocdoni_admin_stylesheet" %> +
      +<%= append_javascript_pack_tag "decidim_vocdoni_admin" %> diff --git a/app/views/decidim/vocdoni/admin/shared/_election_title.html.erb b/app/views/decidim/vocdoni/admin/shared/_election_title.html.erb index bf668ad2..a247f8f1 100644 --- a/app/views/decidim/vocdoni/admin/shared/_election_title.html.erb +++ b/app/views/decidim/vocdoni/admin/shared/_election_title.html.erb @@ -1,7 +1,7 @@ <%# add_decidim_page_title(translated_attribute(election.title)) %> -
      -

      +
      +

      <%= t("title", scope: "decidim.vocdoni.admin.elections.edit") %> "<%= translated_attribute(election&.title) %>"

      diff --git a/app/views/decidim/vocdoni/admin/shared/_tab_links.html.erb b/app/views/decidim/vocdoni/admin/shared/_tab_links.html.erb index 50c48a97..b6c292ca 100644 --- a/app/views/decidim/vocdoni/admin/shared/_tab_links.html.erb +++ b/app/views/decidim/vocdoni/admin/shared/_tab_links.html.erb @@ -1,8 +1,13 @@ -
      -
        +<%= append_stylesheet_pack_tag "decidim_vocdoni_admin" %> +
        +
          <% tabs_info.each do |tab_name, info| %> -
        • - <%= link_to t(info[:translation], scope: "decidim.vocdoni.admin.elections.new"), info[:path], class: tab_link_class(tab_name, election) %> +
        • "> + <% + link_classes = tab_link_class(tab_name, election) + tab_name == active_class ? link_classes += " text-gray-8" : link_classes += " hover:bg-blue-7 hover:text-white" unless link_classes.include?("disabled") + %> + <%= link_to t(info[:translation], scope: "decidim.vocdoni.admin.elections.new"), info[:path], class: link_classes %>
        • <% end %>
        diff --git a/app/views/decidim/vocdoni/admin/steps/_action_buttons.html.erb b/app/views/decidim/vocdoni/admin/steps/_action_buttons.html.erb index be616a31..5d080420 100644 --- a/app/views/decidim/vocdoni/admin/steps/_action_buttons.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_action_buttons.html.erb @@ -1,10 +1,14 @@ -<%= link_to resource_locator(election).path, class: "button primary" do %> - <%= icon "eye", role: "img", aria_label: t("actions.preview", scope: "decidim.vocdoni"), target: :blank %> - <%= t("view", scope: "decidim.vocdoni.admin.steps.created") %> -<% end %> +
        + <%= link_to resource_locator(election).path, class: "button button__sm button__secondary" do %> + <%= icon "eye-line", role: "img", aria_label: t("actions.preview", scope: "decidim.vocdoni"), target: :blank %> + <%= t("view", scope: "decidim.vocdoni.admin.steps.created") %> + <% end %> -<%= link_to election.explorer_vote_url, class: "js-vocdoni-explorer-url button primary hollow", target: :blank, rel: "noopener noreferrer" do %> - <%= t("explorer_vote", scope: "decidim.vocdoni.admin.steps.created") %> -<% end %> + <%= link_to election.explorer_vote_url, + class: "js-vocdoni-explorer-url button button__sm button__transparent-secondary", + target: :blank, rel: "noopener noreferrer" do %> + <%= t("explorer_vote", scope: "decidim.vocdoni.admin.steps.created") %> + <% end %> +
        diff --git a/app/views/decidim/vocdoni/admin/steps/_available_credits.html.erb b/app/views/decidim/vocdoni/admin/steps/_available_credits.html.erb index 9fe72263..5aa2626c 100644 --- a/app/views/decidim/vocdoni/admin/steps/_available_credits.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_available_credits.html.erb @@ -1,11 +1,15 @@ -
        -

        - <%= icon "credit-card", role: "img", "aria-hidden": true %>  - <%= t("available", scope: "decidim.vocdoni.admin.steps.credits") %>:  - - - -

        +<%= append_javascript_pack_tag "decidim_vocdoni_admin" %> +<%= append_stylesheet_pack_tag "decidim_vocdoni_admin" %> +
        +
        + <%= icon "bank-card-line", role: "img", "aria-hidden": true %>  +

        + <%= t("available", scope: "decidim.vocdoni.admin.steps.credits") %>:  + + + +

        +
        @@ -17,42 +21,24 @@
        <% if Decidim::Vocdoni.api_endpoint_env == "prod" %> -
        -

        - <%= t("decidim.vocdoni.admin.steps.credits.prod_mode_html", +

        +

        + <%= t("decidim.vocdoni.admin.steps.credits.prod_mode_html", reseller_name: Decidim::Vocdoni.vocdoni_reseller_name, reseller_email: Decidim::Vocdoni.vocdoni_reseller_email, wallet_address: @current_vocdoni_wallet.private_key).html_safe %> -

        -
        - -
        - -
        -
        -
        +

        + <%= render(partial: "wallet_address") %> +
        <% else %> -
        -

        - <%= t("dev_mode", scope: "decidim.vocdoni.admin.steps.credits", env: "#{Decidim::Vocdoni.api_endpoint_env}").html_safe %> -

        -
        +
        +

        + <%= t("dev_mode", scope: "decidim.vocdoni.admin.steps.credits", env: "#{Decidim::Vocdoni.api_endpoint_env}").html_safe %> +

        +
        <% end %> - <% unless Decidim::Vocdoni.api_endpoint_env == "prod" %> - <%= link_to credits_election_path(election), method: :remote, class: "button primary js-vocdoni-credits-collect-faucet-tokens" do %> - <%= icon "euro", role: "img", "aria-hidden": true %>  - <%= t("get_more", scope: "decidim.vocdoni.admin.steps.credits") %> - <% end %> + <%= link_to credits_election_path(election), method: :remote, class: "button button__lg button__secondary js-vocdoni-credits-collect-faucet-tokens" do %> + <%= icon "coin-line", role: "img", "aria-hidden": true %>  + <%= t("get_more", scope: "decidim.vocdoni.admin.steps.credits") %> <% end %>
        diff --git a/app/views/decidim/vocdoni/admin/steps/_canceled.html.erb b/app/views/decidim/vocdoni/admin/steps/_canceled.html.erb index c21fa255..246e2f0d 100644 --- a/app/views/decidim/vocdoni/admin/steps/_canceled.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_canceled.html.erb @@ -1,6 +1,6 @@
        -

        <%= t("title", scope: "decidim.vocdoni.admin.steps.canceled") %>

        +

        <%= t("title", scope: "decidim.vocdoni.admin.steps.canceled") %>

        diff --git a/app/views/decidim/vocdoni/admin/steps/_create_election.html.erb b/app/views/decidim/vocdoni/admin/steps/_create_election.html.erb index c0899123..9e78462f 100644 --- a/app/views/decidim/vocdoni/admin/steps/_create_election.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_create_election.html.erb @@ -1,6 +1,6 @@
        -

        <%= t(".title") %>

        +

        <%= t(".title") %>

        <% unless @form.invalid? %> @@ -27,22 +27,25 @@
        - - - <% form.messages.each do |key, value| %> +
        + + <% form.messages.each.with_index do |(key, value), index| %> <% if form.errors.include?(key) %> <% Array(form.errors[key]).each do |error| %> - - + + <% end %> <% else %> - - + + <% end %> <% end %>
        <%= icon "x", class: "text-alert", role: "img", "aria-hidden": true %> <%= error.to_s.html_safe %><%= fix_it_button_with_icon(value[:link], "wrench") %> + <%= icon "close-line", class: "text-alert w-6 h-6", role: "img", "aria-hidden": true %> <%= error.to_s.html_safe %><%= fix_it_button_with_icon(value[:link], "tools-line") %><%= icon "check", class: "text-success", role: "img", "aria-hidden": true %> <%= value[:message].html_safe %> + <%= icon "check-line", class: "text-success w-6 h-6", role: "img", "aria-hidden": true %> <%= value[:message].html_safe %>
        +
        diff --git a/app/views/decidim/vocdoni/admin/steps/_created.html.erb b/app/views/decidim/vocdoni/admin/steps/_created.html.erb index 0a63fb14..7671c66f 100644 --- a/app/views/decidim/vocdoni/admin/steps/_created.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_created.html.erb @@ -1,6 +1,6 @@
        -

        <%= t(".title") %>

        +

        <%= t(".title") %>

        diff --git a/app/views/decidim/vocdoni/admin/steps/_danger_zone.html.erb b/app/views/decidim/vocdoni/admin/steps/_danger_zone.html.erb index 076b6120..b51564c6 100644 --- a/app/views/decidim/vocdoni/admin/steps/_danger_zone.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_danger_zone.html.erb @@ -1,6 +1,6 @@
        ">
        -

        <%= t("title", scope: "decidim.vocdoni.admin.steps.danger_zone") %>

        +

        <%= t("title", scope: "decidim.vocdoni.admin.steps.danger_zone") %>

        <% @@ -16,7 +16,7 @@ %>

        <%= t(action, scope: "decidim.vocdoni.admin.steps.danger_zone.messages") %>

        -
        +
        <%= f.hidden_field :status, value: action %> <%= danger_zone_submit(f, action) %>
        @@ -26,19 +26,22 @@ <% if election.interruptible? %>

        <%= t("cancel_end_html", scope: "decidim.vocdoni.admin.steps.danger_zone.messages") %>

        -
        +
        - <%= link_to election_step_path(election, :cancel, status: :canceled), method: :patch, class: "button alert js-button-submit", + <%= link_to election_step_path(election, :cancel, status: :canceled), method: :patch, + class: "button button__sm button__alert js-button-submit", data: { status: "canceled", confirm: t("confirm", scope: "decidim.vocdoni.admin.steps.danger_zone") } do %> - <%= icon("x", class: "icon--before") %> + <%= icon("close-circle-line", class: "icon--before") %> <%= t("cancel", scope: "decidim.vocdoni.admin.steps.danger_zone.action") %> <% end %> - <%= link_to election_step_path(election, :end, status: :end), method: :patch, class: "button alert js-button-submit", + <%= link_to election_step_path(election, :end, status: :end), method: :patch, + class: "button button__sm button__alert js-button-submit", data: { status: "end", confirm: t("confirm", scope: "decidim.vocdoni.admin.steps.danger_zone") } do %> - <%= icon("media-stop", class: "icon--before") %> + <%= icon("stop-circle-line", class: "icon--before") %> <%= t("end", scope: "decidim.vocdoni.admin.steps.danger_zone.action") %> <% end %>
        <% end %>
        +<%= append_javascript_pack_tag "decidim_vocdoni_admin" %> diff --git a/app/views/decidim/vocdoni/admin/steps/_paused.html.erb b/app/views/decidim/vocdoni/admin/steps/_paused.html.erb index b85fe7de..55b56e89 100644 --- a/app/views/decidim/vocdoni/admin/steps/_paused.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_paused.html.erb @@ -1,6 +1,6 @@
        -

        <%= t("title", scope: "decidim.vocdoni.admin.steps.paused") %>

        +

        <%= t("title", scope: "decidim.vocdoni.admin.steps.paused") %>

        diff --git a/app/views/decidim/vocdoni/admin/steps/_results_published.html.erb b/app/views/decidim/vocdoni/admin/steps/_results_published.html.erb index 505068d5..1bbe957b 100644 --- a/app/views/decidim/vocdoni/admin/steps/_results_published.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_results_published.html.erb @@ -1,8 +1,8 @@
        -
        -

        +
        +

        <%= t(".title") %> -

        +

        <%= render partial: "results_stats" %> diff --git a/app/views/decidim/vocdoni/admin/steps/_results_stats.html.erb b/app/views/decidim/vocdoni/admin/steps/_results_stats.html.erb index 184fd146..c80c2ab4 100644 --- a/app/views/decidim/vocdoni/admin/steps/_results_stats.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_results_stats.html.erb @@ -1,13 +1,13 @@ -
          " +
            " data-accordion data-multi-expand="true" data-allow-all-closed="true"> <% election.questions.each_with_index do |question, i| %>
          • " data-accordion-item> - <%= t(".question") %>: <%= translated_attribute(question.title) %> + <%= t(".question") %>: <%= translated_attribute(question.title) %>
            - +
            diff --git a/app/views/decidim/vocdoni/admin/steps/_update_census.html.erb b/app/views/decidim/vocdoni/admin/steps/_update_census.html.erb index 565d9d77..ce8cddf4 100644 --- a/app/views/decidim/vocdoni/admin/steps/_update_census.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_update_census.html.erb @@ -1,7 +1,7 @@
            -

            <%= t("title", scope: "decidim.vocdoni.admin.steps.census") %>

            +

            <%= t("title", scope: "decidim.vocdoni.admin.steps.census") %>

            @@ -20,8 +20,8 @@

            <%= t("description", scope: "decidim.vocdoni.admin.steps.census") %>

            -
            - +<%= append_javascript_pack_tag "decidim_vocdoni_admin" %> diff --git a/app/views/decidim/vocdoni/admin/steps/_vocdoni_logo.html.erb b/app/views/decidim/vocdoni/admin/steps/_vocdoni_logo.html.erb index 218acd74..891ff582 100644 --- a/app/views/decidim/vocdoni/admin/steps/_vocdoni_logo.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_vocdoni_logo.html.erb @@ -1,8 +1,7 @@ -
            - <%= link_to "https://vocdoni.io", target: "_blank", rel: "noopener noreferrer" do %> - <%= image_pack_tag "media/images/vocdoni_logo.png", alt: "Vocdoni logo", class: "vocdoni-logo" %> +<%= append_javascript_pack_tag "decidim_vocdoni_admin" %> +
            + <%= link_to "https://vocdoni.io", target: "_blank", rel: "noopener noreferrer", data: { external_link: false } do %> + <%= image_pack_tag "media/images/vocdoni_logo.png", alt: "Vocdoni logo", class: "vocdoni-logo mx-auto mt-8 mb-8" %> <% end %> -

            <%= t("steps.powered_by_html", scope: "decidim.vocdoni.admin") %>

            +

            <%= t("steps.powered_by_html", scope: "decidim.vocdoni.admin") %>

            - -<%= stylesheet_pack_tag "decidim_vocdoni_admin_stylesheet", media: "all" %> diff --git a/app/views/decidim/vocdoni/admin/steps/_vote.html.erb b/app/views/decidim/vocdoni/admin/steps/_vote.html.erb index 222e1dfb..fe43f902 100644 --- a/app/views/decidim/vocdoni/admin/steps/_vote.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_vote.html.erb @@ -1,6 +1,6 @@
            -

            <%= t("title", scope: "decidim.vocdoni.admin.steps.vote") %>

            +

            <%= t("title", scope: "decidim.vocdoni.admin.steps.vote") %>

            diff --git a/app/views/decidim/vocdoni/admin/steps/_vote_ended.html.erb b/app/views/decidim/vocdoni/admin/steps/_vote_ended.html.erb index a7efebdd..4ba0294f 100644 --- a/app/views/decidim/vocdoni/admin/steps/_vote_ended.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_vote_ended.html.erb @@ -1,6 +1,6 @@
            -

            <%= t(".title") %>

            +

            <%= t(".title") %>

            diff --git a/app/views/decidim/vocdoni/admin/steps/_vote_stats.html.erb b/app/views/decidim/vocdoni/admin/steps/_vote_stats.html.erb index 78891520..8a636b8a 100644 --- a/app/views/decidim/vocdoni/admin/steps/_vote_stats.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/_vote_stats.html.erb @@ -1,39 +1,50 @@
            -

            +

            <%= t(".title") %>

            -
            <%= t(".answer") %>
            - - - - - - - - <% question.answers.each do |answer| %> - - - - - <% end %> - -
            <%= t(".answer") %><%= t(".result") %>
            <%= translated_attribute(answer.title) %>
            -
            +
              + <% election.questions.each_with_index do |question, idx| %> +
            • + +
              "> +
              + + + + + + + + + <% question.answers.each do |answer| %> + + + + + <% end %> + +
              <%= t(".answer") %><%= t(".result") %>
              <%= translated_attribute(answer.title) %> + +
              -
            • - <% end %> +
            +
          • + <% end %>
        diff --git a/app/views/decidim/vocdoni/admin/steps/_wallet_address.html.erb b/app/views/decidim/vocdoni/admin/steps/_wallet_address.html.erb new file mode 100644 index 00000000..e0de8a5f --- /dev/null +++ b/app/views/decidim/vocdoni/admin/steps/_wallet_address.html.erb @@ -0,0 +1,19 @@ +
        +
        + + +
        +
        diff --git a/app/views/decidim/vocdoni/admin/steps/index.html.erb b/app/views/decidim/vocdoni/admin/steps/index.html.erb index ab4b469c..50412103 100644 --- a/app/views/decidim/vocdoni/admin/steps/index.html.erb +++ b/app/views/decidim/vocdoni/admin/steps/index.html.erb @@ -1,5 +1,7 @@ <% add_decidim_page_title(translated_attribute(election.title)) %> <% add_decidim_page_title(t(".title")) %> +<%= append_javascript_pack_tag "decidim_vocdoni_admin" %> +<%= append_stylesheet_pack_tag "decidim_vocdoni_admin" %>
        -
        -

        - <%= link_to translated_attribute(election.title), elections_path %> > +
        +

        + <%= link_to translated_attribute(election.title), elections_path, class: "contents" %> > <%= t("index.title", scope: "decidim.vocdoni.admin.steps") %>

        -
        +
          <% steps(current_step).each_with_index do |step, i| %>
        1. - <%= t("steps.#{step.first}.title", scope: "decidim.vocdoni.admin") %> + <%= t("steps.#{step.first}.title", scope: "decidim.vocdoni.admin") %>
        2. <% end %>
        @@ -42,8 +44,8 @@ <%= f.hidden_field :current_step %> <% if @form.main_button? %> -
        "> - <%= f.button type: :submit, class: "button", disabled: @form.invalid? do %> +
        "> + <%= f.button type: :submit, class: "button button__lg button__secondary", disabled: @form.invalid? do %> <%= t("steps.#{current_step}.submit", scope: "decidim.vocdoni.admin") %> <% end %>
        @@ -55,6 +57,4 @@
        <% end %> -<%= javascript_pack_tag "decidim_vocdoni_admin" %> - <%= render partial: "vocdoni_logo" %> diff --git a/app/views/decidim/vocdoni/admin/wallets/new.html.erb b/app/views/decidim/vocdoni/admin/wallets/new.html.erb index a8e702ad..1e53a68a 100644 --- a/app/views/decidim/vocdoni/admin/wallets/new.html.erb +++ b/app/views/decidim/vocdoni/admin/wallets/new.html.erb @@ -1,8 +1,9 @@ <% add_decidim_page_title(t(".title")) %> +<%= append_javascript_pack_tag "decidim_vocdoni_admin" %>
        -
        -

        <%= t(".title") %>

        +
        +

        <%= t(".title") %>

        @@ -12,8 +13,8 @@

        <%= t("help.p2", scope: "decidim.vocdoni.admin.wallets.form") %>

        -
        - <%= link_to t(".create"), wallets_path, method: :remote, class: "button primary" %> +
        + <%= link_to t(".create"), wallets_path, method: :remote, class: "button button__lg button__tertiary" %>
        diff --git a/app/views/decidim/vocdoni/elections/_elections.html.erb b/app/views/decidim/vocdoni/elections/_elections.html.erb index 5d1c8a3e..58461f52 100644 --- a/app/views/decidim/vocdoni/elections/_elections.html.erb +++ b/app/views/decidim/vocdoni/elections/_elections.html.erb @@ -1,9 +1,17 @@ <% if elections.none? %> -
        - <%= t("decidim.vocdoni.warnings.no_elections_warning") %> -
        + <%= cell("decidim/announcement", t("decidim.vocdoni.warnings.no_elections_warning"), callout_class: "warning") %> +<% elsif scheduled_elections.none? %> + <%= cell("decidim/announcement", t("decidim.vocdoni.warnings.no_scheduled_elections_warning"), callout_class: "warning") %> <% end %> -
        - <%= render elections %> +

        <%= t("elections_count", scope: "decidim.vocdoni.elections.count", count: paginated_elections.total_count) %>

        + +<%= order_selector available_orders, i18n_scope: "decidim.vocdoni.elections.orders" %> + +
        + <% paginated_elections.each do |election| %> + <%= card_for election, from: election %> + <% end %>
        + +<%= decidim_paginate paginated_elections %> diff --git a/app/views/decidim/vocdoni/elections/index.html.erb b/app/views/decidim/vocdoni/elections/index.html.erb index 9667f6ee..c21adf92 100644 --- a/app/views/decidim/vocdoni/elections/index.html.erb +++ b/app/views/decidim/vocdoni/elections/index.html.erb @@ -1,17 +1,14 @@ -<%= render partial: "decidim/shared/component_announcement" %> +<% content_for :aside do %> +

        <%= component_name %>

        + <%= render layout: "decidim/shared/filters", locals: { filter_sections: , search_variable: :search_text_cont, skip_to_id: "elections" } do %> + <%= hidden_field_tag :order, order, id: nil, class: "order_filter" %> + <% end %> +<% end %> -
        -
        -
        -

        - <%= render partial: "count" %> -

        -
        +<%= render layout: "layouts/decidim/shared/layout_two_col" do %> + <%= render partial: "decidim/shared/component_announcement" %> -
        -
        - <%= render partial: "elections" %> -
        -
        -
        -
        +
        + <%= render partial: "elections" %> +
        +<% end %> diff --git a/app/views/decidim/vocdoni/elections/index.js.erb b/app/views/decidim/vocdoni/elections/index.js.erb new file mode 100644 index 00000000..08365217 --- /dev/null +++ b/app/views/decidim/vocdoni/elections/index.js.erb @@ -0,0 +1,5 @@ +var $elections = $('#elections'); +var $orderFilterInput = $('.order_filter'); + +$elections.html('<%= j(render partial: "elections").strip.html_safe %>'); +$orderFilterInput.val('<%= order %>'); diff --git a/app/views/decidim/vocdoni/elections/show.html.erb b/app/views/decidim/vocdoni/elections/show.html.erb index 50b924c2..d1b8ab34 100644 --- a/app/views/decidim/vocdoni/elections/show.html.erb +++ b/app/views/decidim/vocdoni/elections/show.html.erb @@ -12,50 +12,57 @@ edit_link( ) %> -<%= render partial: "decidim/shared/component_announcement" %> +<%= append_javascript_pack_tag "decidim_vocdoni_elections" %> +<%= append_stylesheet_pack_tag "decidim_vocdoni_elections" %> -
        -
        +<% content_for :aside do %> + <%= cell("decidim/vocdoni/election_vote_cta", election) %> +<% end %> +<%= render layout: "layouts/decidim/shared/layout_item" do %> +
        <% unless single? %> - <%= link_to :elections, class: "small hollow" do %> - <%= icon "caret-left", class: "icon--small" %> - <%= t(".back") %> - <% end %> +
        + <%= icon "arrow-left-s-fill", class: "icon--small" %> + <%= link_to t("decidim.vocdoni.elections.show.back"), elections_path %> +
        <% end %> + <%= render partial: "decidim/shared/component_announcement" %> -

        - <%== present(election).title %> -

        -
        - <%= cell "decidim/vocdoni/remaining_time_callout", election %> -
        -

        - <% unless election.manual_start? %> - <%= t(".voting_period_status.#{election.voting_period_status}", - start_time: "#{l(election.start_time, format: :long)}", - end_time: "#{l election.end_time, format: :long}").html_safe %> - <% end %> -

        -
        -
        -
        - <% if election.attachments.first.present? && election.attachments.first.image? %> -
        - -
        - <% end %> -
        -
        -

        <%= decidim_sanitize_editor(simple_format(translated_attribute(election.description))) %>

        + <%= cell "decidim/vocdoni/remaining_time_callout", election %> + <% unless election.manual_start? %> + <%= cell("decidim/announcement", t("voting_period_status.#{election.voting_period_status}", + scope: "decidim.vocdoni.elections.show", + start_time: "#{l election.start_time, format: :long}", + end_time: "#{l election.end_time, format: :long}").html_safe) %> + <% end %> + +

        <%== present(election).title %>

        + - <%= cell("decidim/vocdoni/election_vote_cta", election) %> +
        +
        + <%= decidim_sanitize_editor_admin(translated_attribute(election.description)) %>
        -
        -
        + -<%= cell("decidim/vocdoni/election_preview", election) %> + <%= attachments_for election %> -<%= cell("decidim/vocdoni/election_results_realtime", election, election_data: @election_data) if @election_data %> + <% unless election.finished? %> +
        + <%= cell("decidim/vocdoni/election_preview", election) %> +
        + <% end %> + + <% if @election_data %> +
        + <%= cell("decidim/vocdoni/election_results_realtime", election, election_data: @election_data) %> +
        + <% end %> -<%= cell("decidim/vocdoni/election_results", election) %> + <% if election.results_published? %> +
        + <%= cell("decidim/vocdoni/election_results", election) %> +
        + <% end %> +<% end %> diff --git a/app/views/decidim/vocdoni/votes/_check_census.html.erb b/app/views/decidim/vocdoni/votes/_check_census.html.erb index 10cb493d..892c50bf 100644 --- a/app/views/decidim/vocdoni/votes/_check_census.html.erb +++ b/app/views/decidim/vocdoni/votes/_check_census.html.erb @@ -1,5 +1,3 @@ -<%= render("focus_header", header_title: t("decidim.vocdoni.votes.header.login")) %> -
        <%= identification_title(election) %> diff --git a/app/views/decidim/vocdoni/votes/_focus_header.html.erb b/app/views/decidim/vocdoni/votes/_focus_header.html.erb index 3069598b..7a79d5bb 100644 --- a/app/views/decidim/vocdoni/votes/_focus_header.html.erb +++ b/app/views/decidim/vocdoni/votes/_focus_header.html.erb @@ -1,8 +1,8 @@
        <%= header_title %>
        -
        +

        <%= translated_attribute(election.title) %> -

        +

        diff --git a/app/views/decidim/vocdoni/votes/_login.html.erb b/app/views/decidim/vocdoni/votes/_login.html.erb index c26a1953..8d598405 100644 --- a/app/views/decidim/vocdoni/votes/_login.html.erb +++ b/app/views/decidim/vocdoni/votes/_login.html.erb @@ -1,20 +1,18 @@ -<%= decidim_form_for(@form, url: "#", html: { class: "form", autocomplete: "off" }) do |f| %> +<%= decidim_form_for(@form, url: "#", html: { class: "form form-defaults", autocomplete: "off" }) do |f| %> <% scope = "decidim.vocdoni.votes.check_census" %> -
        -

      -
      +
      <% ordered_answers(question).each do |answer| %> - <%= label_tag nil, data: { "disabled-by": "#check-nota" }, class: "evote__check evote__card" do %> - <%= radio_button_tag question.slug, answer.slug, false, class: "answer_input", value: answer.value, data: { answer: "answer-#{answer.id}" } %> + <%= label_tag nil, data: { "disabled-by": "check-nota" }, class: "election-question" do %> + <%= radio_button_tag question.slug, answer.slug, false, class: "answer_input mr-2", value: answer.value, data: { answer: "answer-#{answer.id}" } %> - - <%= translated_attribute(answer.title) %> - <% if more_information?(answer) %> - - - - <% end %> - + <%= translated_attribute(answer.title) %> + + <% if more_information?(answer) %> + + <% end %> <% end %> - <%= render("new_question_modal", answer: answer) if more_information?(answer) %> + <%= render("new_question_modal", answer:) if more_information?(answer) %> <% end %> - <%= render partial: "vocdoni_logo" %>
      diff --git a/app/views/decidim/vocdoni/votes/_new_question_modal.html.erb b/app/views/decidim/vocdoni/votes/_new_question_modal.html.erb index 6fc36cc5..d2c510ae 100644 --- a/app/views/decidim/vocdoni/votes/_new_question_modal.html.erb +++ b/app/views/decidim/vocdoni/votes/_new_question_modal.html.erb @@ -1,32 +1,31 @@ -
      -
      -

      <%= translated_attribute(answer.title) %>

      - -
      -
      -
      +<%= decidim_modal id: "show-focus-modal-#{answer.slug}", class: "election-question__modal" do %> +
      + <%= icon "arrow-right-line" %> + +

      + <%= translated_attribute(answer.title) %> +

      + +
      <% if answer.photos.any? %> -
      +
      <% answer.photos.each do |photo| %> - <%= image_tag photo.thumbnail_url, class:"thumbnail", alt: strip_tags(translated_attribute(photo.title)) %> + <%= image_tag photo.thumbnail_url, alt: strip_tags(translated_attribute(photo.title)) %> <% end %>
      <% end %> + <% if answer.description %> -
      +
      <%== translated_attribute(answer.description) %>
      <% end %>
      -
      -
      - -
      + +
      +
      -
      +<% end %> diff --git a/app/views/decidim/vocdoni/votes/_new_submitting_step.html.erb b/app/views/decidim/vocdoni/votes/_new_submitting_step.html.erb index c6260480..31d04967 100644 --- a/app/views/decidim/vocdoni/votes/_new_submitting_step.html.erb +++ b/app/views/decidim/vocdoni/votes/_new_submitting_step.html.erb @@ -1,4 +1,3 @@ -<%= render("focus_header", header_title: t("decidim.vocdoni.votes.header.submitting")) %>

      diff --git a/app/views/decidim/vocdoni/votes/_show_failed.html.erb b/app/views/decidim/vocdoni/votes/_show_failed.html.erb index bb2f28d3..75e6b264 100644 --- a/app/views/decidim/vocdoni/votes/_show_failed.html.erb +++ b/app/views/decidim/vocdoni/votes/_show_failed.html.erb @@ -1,10 +1,11 @@ -<%= render("focus_header", header_title: t("decidim.vocdoni.votes.header.failed")) %> +
      +

      + <%= t("decidim.vocdoni.votes.failed.header") %> +

      +
      -
      +
      -

      - <%= t("decidim.vocdoni.votes.failed.header") %> -

      <%= t("decidim.vocdoni.votes.failed.lead") %>

      @@ -18,7 +19,7 @@
      - <%= link_to new_election_vote_path(election), class: "button" do %> + <%= link_to new_election_vote_path(election), class: "button button__lg button__secondary" do %> <%= t("decidim.vocdoni.votes.failed.try_again") %> <% end %>
      diff --git a/app/views/decidim/vocdoni/votes/_show_vote_cast_step.html.erb b/app/views/decidim/vocdoni/votes/_show_vote_cast_step.html.erb index 39aadca0..d802961b 100644 --- a/app/views/decidim/vocdoni/votes/_show_vote_cast_step.html.erb +++ b/app/views/decidim/vocdoni/votes/_show_vote_cast_step.html.erb @@ -1,44 +1,45 @@ -<%= render("focus_header", header_title: t("decidim.vocdoni.votes.header.vote_cast")) %> -
      -
      -

      - <%= t("header", scope: "decidim.vocdoni.votes.vote_cast") %> -

      +
      +

      + <%= t("header", scope: "decidim.vocdoni.votes.vote_cast") %> +

      +
      -
      -

      <%= t("description", scope: "decidim.vocdoni.votes.vote_cast") %>

      -

      - <%= t("vote_receipt", scope: "decidim.vocdoni.votes.vote_cast") %> +

      +
      +

      <%= t("description", scope: "decidim.vocdoni.votes.vote_cast") %>

      +

      <%= t("vote_receipt", scope: "decidim.vocdoni.votes.vote_cast") %>

      -
      - " readonly> -
      - -
      -
      +
      + " + readonly> + +
      -

      - <%= link_to t("verify", scope: "decidim.vocdoni.votes.vote_cast"), "#", class: "verify_ballot", target: "_blank", rel: "noopener noreferrer" %> -

      +

      <%= link_to t("verify", scope: "decidim.vocdoni.votes.vote_cast"), "#", class: "verify_ballot", target: "_blank", rel: "noopener noreferrer" %>

      +

      <%= t("or", scope: "decidim.vocdoni.votes.vote_cast") %>

      -

      - <%= t("or", scope: "decidim.vocdoni.votes.vote_cast") %> -

      + <%= link_to election_path(election), class: "button button__secondary button__lg" do %> + <%= t("exit", scope: "decidim.vocdoni.votes.vote_cast") %> + <% end %> +

      +
      - <%= link_to election_path(election), class: "button" do %> - <%= t("exit", scope: "decidim.vocdoni.votes.vote_cast") %> - <% end %> -

      +
      +
      + <%= render partial: "vocdoni_logo" %>
      - - <%= render partial: "vocdoni_logo" %>
      diff --git a/app/views/decidim/vocdoni/votes/new.html.erb b/app/views/decidim/vocdoni/votes/new.html.erb index 402dc6bb..2b066085 100644 --- a/app/views/decidim/vocdoni/votes/new.html.erb +++ b/app/views/decidim/vocdoni/votes/new.html.erb @@ -1,82 +1,70 @@ -
      +<%= append_stylesheet_pack_tag "decidim_vocdoni_elections" %> +<%= append_javascript_pack_tag "decidim_vocdoni_elections" %> +<%= render("focus_header", header_title: t("decidim.vocdoni.votes.new.question_steps", current_step: session[:current_step] + 1, total_steps: questions_count)) %> +<%= render layout: "layouts/decidim/shared/layout_center" do %> +
      -
      - <%= render("check_census") %> -
      +
      + <%= render("check_census") %> +
      - <% questions.each_with_index do |step_question, step_index| %> -
      -
      -
      -
      - - <%= t("decidim.vocdoni.votes.new.question_steps", current_step: step_index + 1, total_steps: questions_count) %> - + <% questions.each_with_index do |step_question, step_index| %> + - -<% content_for :js_content do %> - <%= javascript_pack_tag "decidim_vocdoni_voter_new_vote" %> <% end %> diff --git a/app/views/layouts/decidim/_vocdoni_votes_header.html.erb b/app/views/layouts/decidim/_vocdoni_votes_header.html.erb index abfe4225..49d04b2e 100644 --- a/app/views/layouts/decidim/_vocdoni_votes_header.html.erb +++ b/app/views/layouts/decidim/_vocdoni_votes_header.html.erb @@ -1,12 +1,12 @@ <% if preview_mode? %> -
      <%= icon :warning %> <%= t("decidim.vocdoni.votes.new.preview_alert") %>
      +
      <%= icon "error-warning-line" %> <%= t("decidim.vocdoni.votes.new.preview_alert") %>
      <% end %>
      <%= render partial: "layouts/decidim/logo", locals: { organization: current_organization } %> <%= link_to exit_path, class: "focus__exit" do %> - + <%= t(".exit") %> <% end %>
      diff --git a/babel.config.json b/babel.config.json index 551d4bec..8c976bbb 100644 --- a/babel.config.json +++ b/babel.config.json @@ -2,15 +2,16 @@ "presets": [ [ "@babel/preset-env", { - "forceAllTransforms": true, - "useBuiltIns": "entry", - "corejs": 3, - "modules": false - } + "forceAllTransforms": true, + "useBuiltIns": "entry", + "corejs": 3, + "modules": false + } ], ["@babel/preset-react"] ], "plugins": [ + "@babel/plugin-transform-class-properties", "@babel/plugin-transform-classes", [ "@babel/plugin-transform-runtime", @@ -20,9 +21,6 @@ "corejs": false } ], - [ "@babel/plugin-transform-regenerator", { "async": false }], - [ "@babel/plugin-proposal-private-property-in-object", { "loose": true }], - ["@babel/plugin-proposal-private-methods", { "loose": true }], - ["@babel/plugin-proposal-class-properties", { "loose": true }] + ["@babel/plugin-transform-regenerator", { "async": false }] ] } diff --git a/bin/dev b/bin/dev new file mode 100755 index 00000000..65279bce --- /dev/null +++ b/bin/dev @@ -0,0 +1,6 @@ +#!/usr/bin/env sh +# frozen_string_literal: true + +cd development_app + +./bin/dev diff --git a/bin/webpack b/bin/shakapacker similarity index 77% rename from bin/webpack rename to bin/shakapacker index c2297e5f..86aefe83 100755 --- a/bin/webpack +++ b/bin/shakapacker @@ -3,4 +3,4 @@ Dir.chdir("development_app") -load "bin/webpack" +load "bin/shakapacker" diff --git a/bin/webpack-dev-server b/bin/shakapacker-dev-server similarity index 70% rename from bin/webpack-dev-server rename to bin/shakapacker-dev-server index 471298aa..0226ffec 100755 --- a/bin/webpack-dev-server +++ b/bin/shakapacker-dev-server @@ -3,4 +3,4 @@ Dir.chdir("development_app") -load "bin/webpack-dev-server" +load "bin/shakapacker-dev-server" diff --git a/config/assets.rb b/config/assets.rb index 72c0555f..2675f0d5 100644 --- a/config/assets.rb +++ b/config/assets.rb @@ -19,15 +19,17 @@ # SCSS files within the entrypoints, they become available for inclusion using # `stylesheet_pack_tag`. Decidim::Webpacker.register_entrypoints( + decidim_vocdoni: "#{base_path}/app/packs/entrypoints/decidim_vocdoni.js", decidim_vocdoni_admin: "#{base_path}/app/packs/entrypoints/admin/decidim_vocdoni_admin.js", + decidim_vocdoni_elections: "#{base_path}/app/packs/entrypoints/decidim_vocdoni_elections.js", decidim_vocdoni_update_results: "#{base_path}/app/packs/entrypoints/decidim_vocdoni_update-results.js", - decidim_vocdoni_admin_stylesheet: "#{base_path}/app/packs/entrypoints/admin/decidim_vocdoni_admin_stylesheet.js", + decidim_vocdoni_admin_stylesheet: "#{base_path}/app/packs/entrypoints/admin/decidim_vocdoni_admin.js", decidim_vocdoni_voter_new_vote: "#{base_path}/app/packs/entrypoints/decidim_vocdoni_voter_new-vote.js", decidim_vocdoni_voter_setup_preview: "#{base_path}/app/packs/entrypoints/decidim_vocdoni_voter_setup-preview.js", decidim_vocdoni_voter_setup_vote: "#{base_path}/app/packs/entrypoints/decidim_vocdoni_voter_setup-vote.js" ) -Decidim::Webpacker.register_stylesheet_import("stylesheets/decidim/vocdoni/vocdoni") +Decidim::Webpacker.register_stylesheet_import("stylesheets/decidim/vocdoni/vocdoni_application") # If you want to import some extra SCSS files in the Decidim main SCSS file # without adding any extra stylesheet inclusion tags, you can use the following diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml index 97765cd2..01dfd91a 100644 --- a/config/i18n-tasks.yml +++ b/config/i18n-tasks.yml @@ -1,7 +1,7 @@ --- base_locale: en -locales: [en] +locales: [ en ] ignore_unused: - "activemodel.attributes.election.{description,end_time,secret_until_the_end,start_time,stream_uri,title}" @@ -30,6 +30,26 @@ ignore_unused: - "decidim.vocdoni.admin.elections.new.questions" - "decidim.vocdoni.admin.elections.new.results" - "decidim.vocdoni.admin.steps.danger_zone.action.{paused,start,created,vote}" + - "decidim.vocdoni.admin.steps.danger_zone.messages.created" + - "decidim.vocdoni.admin.steps.danger_zone.messages.paused" + - "decidim.vocdoni.admin.steps.danger_zone.messages.vote" + - "decidim.vocdoni.elections.election_m.badge_name.canceled" + - "decidim.vocdoni.elections.election_m.badge_name.finished" + - "decidim.vocdoni.elections.election_m.badge_name.ongoing" + - "decidim.vocdoni.elections.election_m.badge_name.paused" + - "decidim.vocdoni.elections.election_m.badge_name.upcoming" + - "decidim.vocdoni.elections.elections.filters.canceled" + - "decidim.vocdoni.elections.elections.filters.date" + - "decidim.vocdoni.elections.elections.filters.paused" + - "decidim.vocdoni.elections.orders.label" + - "decidim.vocdoni.elections.orders.older" + - "decidim.vocdoni.elections.orders.recent" + - "decidim.vocdoni.votes.confirm.answer" + - "decidim.vocdoni.votes.header.confirm" + - "decidim.vocdoni.votes.header.failed" + - "decidim.vocdoni.votes.header.login" + - "decidim.vocdoni.votes.header.submitting" + - "decidim.vocdoni.votes.header.vote_cast" # To be removed once the header image is no longer necessary by the Vocdoni SDK - "decidim.admin.shared.gallery.gallery_legend" diff --git a/config/locales/en.yml b/config/locales/en.yml index 962d461e..d938144f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -438,6 +438,26 @@ en: elections_count: one: "%{count} election" other: "%{count} elections" + election_m: + badge_name: + canceled: Canceled + finished: Finished + ongoing: Active + paused: Paused + upcoming: Upcoming + elections: + filters: + active: Active + all: All + canceled: Canceled + date: Date + finished: Finished + paused: Paused + upcoming: Upcoming + orders: + label: Orders + older: Older + recent: Recent preview: available_answers: 'Available answers:' description: 'These are the questions for this voting process:' @@ -567,6 +587,8 @@ en: continue: Next warnings: no_elections_warning: There isn't any election scheduled. + no_scheduled_elections_warning: Currently, there are no scheduled elections, + but here you can find all the past elections listed. layouts: decidim: vocdoni_votes_header: diff --git a/db/migrate/20231107142971_add_census_data_to_decidim_vocdoni_elections.rb b/db/migrate/20231107142971_add_census_data_to_decidim_vocdoni_elections.rb index 274e9b07..f151b89b 100644 --- a/db/migrate/20231107142971_add_census_data_to_decidim_vocdoni_elections.rb +++ b/db/migrate/20231107142971_add_census_data_to_decidim_vocdoni_elections.rb @@ -2,11 +2,11 @@ class AddCensusDataToDecidimVocdoniElections < ActiveRecord::Migration[6.1] def change - add_column :decidim_vocdoni_elections, :internal_census, :boolean, default: false + add_column :decidim_vocdoni_elections, :internal_census, :boolean, default: false, null: false add_column :decidim_vocdoni_elections, :verification_types, :string, array: true, default: [] add_column :decidim_vocdoni_elections, :census_attributes, :jsonb, default: {} add_column :decidim_vocdoni_elections, :last_census_update_records_added, :integer add_column :decidim_vocdoni_elections, :census_last_updated_at, :datetime - add_column :decidim_vocdoni_voters, :in_vocdoni_census, :boolean, default: false + add_column :decidim_vocdoni_voters, :in_vocdoni_census, :boolean, default: false, null: false end end diff --git a/db/migrate/20240516163557_add_answers_count_to_decidim_vocdoni_questions.rb b/db/migrate/20240516163557_add_answers_count_to_decidim_vocdoni_questions.rb new file mode 100644 index 00000000..c8c90544 --- /dev/null +++ b/db/migrate/20240516163557_add_answers_count_to_decidim_vocdoni_questions.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddAnswersCountToDecidimVocdoniQuestions < ActiveRecord::Migration[6.1] + def change + add_column :decidim_vocdoni_questions, :answers_count, :integer, default: 0, null: false + end +end diff --git a/decidim-vocdoni.gemspec b/decidim-vocdoni.gemspec index 44e299aa..0bcbe390 100644 --- a/decidim-vocdoni.gemspec +++ b/decidim-vocdoni.gemspec @@ -10,14 +10,15 @@ Gem::Specification.new do |s| s.email = ["andreslucena@gmail.com", "anna@pokecode.net", "ivan@pokecode.net"] s.license = "AGPL-3.0" s.homepage = "https://github.com/decidim-vocdoni/decidim-module-vocdoni" - s.required_ruby_version = ">= 3.0" + s.required_ruby_version = ">= 3.1" s.name = "decidim-vocdoni" s.summary = "A decidim vocdoni module" s.description = "An elections component for decidim's participatory spaces based on the Vocdoni SDK." - s.files = Dir["{app,db,config,lib}/**/*", "LICENSE-AGPLv3.txt", "Rakefile", "README.md"] + s.files = Dir["{app,db,config,lib,node-wrapper}/**/*", "package.json", "package-lock.json", "LICENSE-AGPLv3.txt", "Rakefile", "README.md"] + s.add_dependency "decidim-admin", Decidim::Vocdoni::DECIDIM_COMPAT_VERSION s.add_dependency "decidim-core", Decidim::Vocdoni::DECIDIM_COMPAT_VERSION s.add_dependency "node-runner", "~> 1.1" s.metadata["rubygems_mfa_required"] = "true" diff --git a/lib/decidim/api/vocdoni_elections_type.rb b/lib/decidim/api/vocdoni_elections_type.rb index 739d5545..32130444 100644 --- a/lib/decidim/api/vocdoni_elections_type.rb +++ b/lib/decidim/api/vocdoni_elections_type.rb @@ -25,7 +25,7 @@ def election(**args) module VocdoniElectionsTypeHelper def self.base_scope(component) - Election.where(component: component).where.not(published_at: nil) + Election.where(component:).where.not(published_at: nil) end end end diff --git a/lib/decidim/vocdoni/admin_engine.rb b/lib/decidim/vocdoni/admin_engine.rb index 6fc2a8e3..68d4f6e1 100644 --- a/lib/decidim/vocdoni/admin_engine.rb +++ b/lib/decidim/vocdoni/admin_engine.rb @@ -35,6 +35,13 @@ class AdminEngine < ::Rails::Engine root to: "elections#index" end + initializer "decidim_admin.register_icons" do + Decidim.icons.register(name: "bank-card-line", icon: "bank-card-line", category: "system", description: "", engine: :vocdoni) + Decidim.icons.register(name: "pause-circle-line", icon: "pause-circle-line", category: "system", description: "", engine: :vocdoni) + Decidim.icons.register(name: "play-circle-line", icon: "play-circle-line", category: "system", description: "", engine: :vocdoni) + Decidim.icons.register(name: "stop-circle-line", icon: "stop-circle-line", category: "system", description: "", engine: :vocdoni) + end + def load_seed nil end diff --git a/lib/decidim/vocdoni/component.rb b/lib/decidim/vocdoni/component.rb index 95a16e3f..aaee7ccc 100644 --- a/lib/decidim/vocdoni/component.rb +++ b/lib/decidim/vocdoni/component.rb @@ -45,7 +45,7 @@ name: Decidim::Components::Namer.new(participatory_space.organization.available_locales, :vocdoni).i18n_name, manifest_name: :vocdoni, published_at: Time.current, - participatory_space: participatory_space + participatory_space: } component = Decidim.traceability.perform_action!( @@ -82,17 +82,17 @@ end params = { - component: component, + component:, title: Decidim::Faker::Localized.sentence(word_count: 2), stream_uri: Faker::Internet.url, description: Decidim::Faker::Localized.wrapped("

      ", "

      ") do Decidim::Faker::Localized.paragraph(sentence_count: 3) end, start_time: auto_start ? start_time : 30.seconds.from_now, - end_time: end_time, + end_time:, published_at: Faker::Boolean.boolean(true_ratio: 0.5) ? 1.week.ago : nil, election_type: { - auto_start: auto_start, + auto_start:, interruptible: true, dynamic_census: [true, false].sample, secret_until_the_end: [true, false].sample, @@ -127,7 +127,7 @@ Decidim::Vocdoni::Question, admin_user, { - election: election, + election:, title: Decidim::Faker::Localized.sentence(word_count: 2), description: Decidim::Faker::Localized.wrapped("

      ", "

      ") do Decidim::Faker::Localized.paragraph(sentence_count: 3) @@ -142,7 +142,7 @@ Decidim::Vocdoni::Answer, admin_user, { - question: question, + question:, title: Decidim::Faker::Localized.sentence(word_count: 2), description: Decidim::Faker::Localized.wrapped("

      ", "

      ") do Decidim::Faker::Localized.paragraph(sentence_count: 3) diff --git a/lib/decidim/vocdoni/election_status_changer.rb b/lib/decidim/vocdoni/election_status_changer.rb index 56bc0ca0..50428545 100644 --- a/lib/decidim/vocdoni/election_status_changer.rb +++ b/lib/decidim/vocdoni/election_status_changer.rb @@ -36,7 +36,7 @@ def update_elections_status(elections, status) puts "Changing #{elections.count} election to '#{status}' status" # rubocop:enable Rails/Output # rubocop:disable Rails/SkipsModelValidations - elections.update_all(status: status) + elections.update_all(status:) # rubocop:enable Rails/SkipsModelValidations end end diff --git a/lib/decidim/vocdoni/engine.rb b/lib/decidim/vocdoni/engine.rb index 91c2f15e..fd658ade 100644 --- a/lib/decidim/vocdoni/engine.rb +++ b/lib/decidim/vocdoni/engine.rb @@ -2,6 +2,7 @@ require "rails" require "decidim/core" +require "active_support/all" module Decidim module Vocdoni @@ -29,6 +30,12 @@ class Engine < ::Rails::Engine initializer "decidim_vocdoni.webpacker.assets_path" do Decidim.register_assets_path File.expand_path("app/packs", root) end + + initializer "decidim.vocdoni.register_icons" do + Decidim.icons.register(name: "book-2-line", icon: "book-2-line", category: "system", description: "", engine: :vocdoni) + Decidim.icons.register(name: "checkbox-multiple-line", icon: "checkbox-multiple-line", category: "system", description: "", engine: :vocdoni) + Decidim.icons.register(name: "bar-chart-box-line", icon: "bar-chart-box-line", category: "system", description: "", engine: :vocdoni) + end end end end diff --git a/lib/decidim/vocdoni/test/factories.rb b/lib/decidim/vocdoni/test/factories.rb index e5032f71..1166a0de 100644 --- a/lib/decidim/vocdoni/test/factories.rb +++ b/lib/decidim/vocdoni/test/factories.rb @@ -11,12 +11,12 @@ factory :vocdoni_component, parent: :component do name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :vocdoni).i18n_name } manifest_name { :vocdoni } - participatory_space { create(:participatory_process, :with_steps) } + participatory_space { association :participatory_process, :with_steps } end factory :vocdoni_election, class: "Decidim::Vocdoni::Election" do transient do - organization { build(:organization) } + organization { association :organization } end upcoming @@ -35,7 +35,7 @@ "secret_until_the_end" => true } end - component { create(:vocdoni_component, organization: organization) } + component { association :vocdoni_component, organization: } trait :configured do status { "created" } @@ -93,9 +93,9 @@ status { "results_published" } after(:build) do |election, _evaluator| - election.questions << build(:vocdoni_question, :with_votes, election: election, weight: 1) - election.questions << build(:vocdoni_question, :with_votes, election: election, weight: 1) - election.questions << build(:vocdoni_question, :with_votes, election: election, weight: 1) + election.questions << build(:vocdoni_question, :with_votes, election:, weight: 1) + election.questions << build(:vocdoni_question, :with_votes, election:, weight: 1) + election.questions << build(:vocdoni_question, :with_votes, election:, weight: 1) end end @@ -125,25 +125,25 @@ trait :simple do after(:build) do |election, _evaluator| - election.questions << build(:vocdoni_question, :simple, election: election, weight: 1) + election.questions << build(:vocdoni_question, :simple, election:, weight: 1) end end trait :complete do after(:build) do |election, _evaluator| - election.questions << build(:vocdoni_question, :simple, election: election, weight: 1) - election.questions << build(:vocdoni_question, :simple, election: election, weight: 1) - election.questions << build(:vocdoni_question, :simple, election: election, weight: 1) + election.questions << build(:vocdoni_question, :simple, election:, weight: 1) + election.questions << build(:vocdoni_question, :simple, election:, weight: 1) + election.questions << build(:vocdoni_question, :simple, election:, weight: 1) end end trait :with_census do after(:build) do |election, _evaluator| - election.voters << build(:vocdoni_voter, :with_wallet, election: election) - election.voters << build(:vocdoni_voter, :with_wallet, election: election) - election.voters << build(:vocdoni_voter, :with_wallet, election: election) - election.voters << build(:vocdoni_voter, :with_wallet, election: election) - election.voters << build(:vocdoni_voter, :with_wallet, election: election) + election.voters << build(:vocdoni_voter, :with_wallet, election:) + election.voters << build(:vocdoni_voter, :with_wallet, election:) + election.voters << build(:vocdoni_voter, :with_wallet, election:) + election.voters << build(:vocdoni_voter, :with_wallet, election:) + election.voters << build(:vocdoni_voter, :with_wallet, election:) end end @@ -179,21 +179,21 @@ answers { 3 } end - association :election, factory: :vocdoni_election + election factory: [:vocdoni_election] title { generate_localized_title } description { Decidim::Faker::Localized.wrapped("

      ", "

      ") { generate_localized_title } } weight { Faker::Number.number(digits: 1) } trait :complete do after(:build) do |question, evaluator| - overrides = { question: question } + overrides = { question: } question.answers = build_list(:vocdoni_election_answer, evaluator.answers, overrides) end end trait :with_votes do after(:build) do |question, evaluator| - overrides = { question: question } + overrides = { question: } overrides[:description] = nil unless evaluator.more_information question.answers = build_list(:vocdoni_election_answer, evaluator.answers, :with_votes, overrides) end @@ -205,7 +205,7 @@ end factory :vocdoni_election_answer, class: "Decidim::Vocdoni::Answer" do - association :question, factory: :vocdoni_question + question factory: [:vocdoni_question] title { generate_localized_title } description { Decidim::Faker::Localized.wrapped("

      ", "

      ") { generate_localized_title } } weight { Faker::Number.number(digits: 1) } @@ -234,7 +234,7 @@ factory :vocdoni_voter, class: "Decidim::Vocdoni::Voter" do email { generate(:email) } token { Faker::String.random(length: 4) } - association :election, factory: :vocdoni_election + election factory: [:vocdoni_election] trait :with_wallet do wallet_address { Faker::Blockchain::Ethereum.address } diff --git a/lib/decidim/vocdoni/version.rb b/lib/decidim/vocdoni/version.rb index 4db19d26..f2f70174 100644 --- a/lib/decidim/vocdoni/version.rb +++ b/lib/decidim/vocdoni/version.rb @@ -3,11 +3,11 @@ module Decidim # This holds the decidim-meetings version. module Vocdoni - DECIDIM_VERSION = "0.27.6" - DECIDIM_COMPAT_VERSION = ">= 0.27" + DECIDIM_VERSION = "0.28.1" + DECIDIM_COMPAT_VERSION = [">= 0.28.0", "< 0.29"].freeze def self.version - "1.0" + "2.0" end end end diff --git a/package-lock.json b/package-lock.json index 8249c5d3..98741d1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,34 +1,31 @@ { "name": "decidim-vocdoni", - "version": "1.0.0", + "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "decidim-vocdoni", - "version": "1.0.0", + "version": "2.0.0", "license": "AGPL-3.0", "dependencies": { "@vocdoni/sdk": "0.8.0" }, "devDependencies": { "@babel/eslint-parser": "^7.19.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.20.5", + "@babel/plugin-transform-class-properties": "^7.24.1", "@babel/plugin-transform-classes": "^7.20.7", "@babel/plugin-transform-regenerator": "^7.20.5", "@babel/plugin-transform-runtime": "^7.19.6", "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", - "@decidim/dev": "0.27.6", - "@decidim/eslint-config": "0.27.6", - "@decidim/stylelint-config": "0.27.6", - "eslint-config-prettier": "^8.5.0", - "eslint-config-standard": "^11.0.0", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-standard": "^3.1.0", + "@decidim/dev": "0.28.1", + "@decidim/eslint-config": "0.28.1", + "@decidim/prettier-config": "0.28.1", + "@decidim/stylelint-config": "0.28.1", + "postcss-scss": "^4.0.9", "sass-embedded": "~1.57.1", + "snarkjs": "vocdoni/snarkjs#v0.7.0-groth16browser", "web-worker": "1.2.0" } }, @@ -184,9 +181,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", - "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", + "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -194,7 +191,7 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -329,9 +326,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -355,13 +352,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -537,59 +534,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", - "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -921,13 +865,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -954,17 +898,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", - "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1904,62 +1848,214 @@ "node": ">=6.9.0" } }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz", + "integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "peer": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", + "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "peer": true, + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz", + "integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "peer": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.6.0", + "@csstools/css-tokenizer": "^2.2.3" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", + "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "peer": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, "node_modules/@decidim/dev": { - "version": "0.27.6", - "resolved": "https://registry.npmjs.org/@decidim/dev/-/dev-0.27.6.tgz", - "integrity": "sha512-dDCVCEXTCzmB113rN/AXcG5KWHZzcFPRM9DmRUKqP2b6gySfe79RLt3/blZs8l22167QxM/Fqjr3UrtuDIxyvQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@decidim/dev/-/dev-0.28.1.tgz", + "integrity": "sha512-s3TwpmhZLwXXzafg7NoFxNoWUgPEEC9exH3fye+gx8PcPWAFcAlebgsONG8/TB0R3ikDcfI8fy6IHt4baVVpdg==", "dev": true, "dependencies": { - "axe-core": "^4.1.4" + "@linthtml/linthtml": "^0.9.6", + "axe-core": "^4.7.2", + "markdownlint-cli": "^0.35.0" } }, "node_modules/@decidim/eslint-config": { - "version": "0.27.6", - "resolved": "https://registry.npmjs.org/@decidim/eslint-config/-/eslint-config-0.27.6.tgz", - "integrity": "sha512-tmYhIbrSPBoWwDopFkZP1BejqHhZPHAvAjJh0wxOhXWTqQZ9l3qgFy+E0hW14CnsKgQ46lGXkI5D2gxS+VvMmg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@decidim/eslint-config/-/eslint-config-0.28.1.tgz", + "integrity": "sha512-5HmLnR3+6JOYssOGqLHYmsfsk9MBX8LP3MXcsLjkCw3Rk9toHFHrRPj6mwwEAxLHFlO3QsJel/hLHpP9cHcVgA==", "dev": true, "peerDependencies": { - "eslint": "^7.25.0", - "eslint-config-prettier": "^8.2.0", - "eslint-config-standard": "^11.0.0", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint": "^8.7.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^8.8.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-no-relative-import-paths": "^1.5.3", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^3.8.0", - "eslint-plugin-react": "^7.20.6", - "eslint-plugin-standard": "^3.1.0" + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.32.2" + } + }, + "node_modules/@decidim/prettier-config": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@decidim/prettier-config/-/prettier-config-0.28.1.tgz", + "integrity": "sha512-fmjs6hcWkcm+9BmFlDCDCAzBXeFn/1J8vlmgSFcoEZyukM3rE4NQIS2AsypP2CcuA3st9Ybn0uf1Mrx9u+rHdA==", + "dev": true, + "peerDependencies": { + "prettier": "^2.3.2" } }, "node_modules/@decidim/stylelint-config": { - "version": "0.27.6", - "resolved": "https://registry.npmjs.org/@decidim/stylelint-config/-/stylelint-config-0.27.6.tgz", - "integrity": "sha512-qcHP1rR3GOLFN0uggKk6gg371dhLCTDDNgDWD0dtFvlDuBxchh0QfHJ+PBZpNDeG3h6tVPOq5ruLhUIC3UWG8w==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@decidim/stylelint-config/-/stylelint-config-0.28.1.tgz", + "integrity": "sha512-AT+NsVMA0DZOKuFse9tTYDfV5En4wwNZ6txbLGZh8VE5EDk1v2yr7eVdi+Y7CA3LHbzW1q7SbFr5SRfdMxhntw==", + "dev": true, + "peerDependencies": { + "stylelint": "^15.3.0", + "stylelint-prettier": "^3.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "peer": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, "peerDependencies": { - "stylelint": "13.11.0" + "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, + "peer": 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==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "peer": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "peer": true + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -1976,6 +2072,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -1989,6 +2098,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@ethersproject/abstract-provider": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", @@ -2585,31 +2704,135 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "peer": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true, "peer": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", + "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", "dev": true, "peer": true, "dependencies": { @@ -2622,9 +2845,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "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": { @@ -2649,9 +2872,9 @@ "peer": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", + "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", "dev": true, "peer": true, "dependencies": { @@ -2659,33 +2882,159 @@ "@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==", + "node_modules/@linthtml/cli": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@linthtml/cli/-/cli-0.9.5.tgz", + "integrity": "sha512-QA61Fhb6T1ho8jPbbZBoqd5dfiuRtg/61dJgKt08NDrCAiwZeftX0nVjzXJq1BpQzLY7VzugGMnZxWq5IYy64g==", "dev": true, "dependencies": { - "eslint-scope": "5.1.1" + "chalk": "4.1.1", + "inquirer": "^8.1.1", + "js-yaml": "^3.14.0", + "kebabcase": "1.0.1", + "lodash.kebabcase": "^4.1.1", + "meow": "^9.0.0", + "ora": "^5.3.0", + "table-layout": "1.0.1" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "peer": true, + "node_modules/@linthtml/cli/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": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "peer": true, + "node_modules/@linthtml/cli/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "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/@linthtml/cli/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/@linthtml/cli/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/@linthtml/cli/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/@linthtml/cli/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/@linthtml/dom-utils": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@linthtml/dom-utils/-/dom-utils-0.9.5.tgz", + "integrity": "sha512-q7riY+zNsTJeD0IoRV+0VdlFu2Y5jxxFCtlw97espB7+LiQalvJV/o3bn27DuQ8U6KPbFeFDjkfS8DX5tD+Ggg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0", + "domhandler": "^4.2.2" + } + }, + "node_modules/@linthtml/html-parser": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@linthtml/html-parser/-/html-parser-0.9.5.tgz", + "integrity": "sha512-dvh7+jhGlAVOowlBA5Opy4PjIyT672CLyOVhiPVfkkcJkZSDKcM1GAEPhwtEAWJjdk8rpS7JaQjkZBjqHqWn5g==", + "dev": true, + "dependencies": { + "@linthtml/dom-utils": "^0.9.5", + "domhandler": "^4.2.2", + "htmlparser2": "^7.1.2" + } + }, + "node_modules/@linthtml/linthtml": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@linthtml/linthtml/-/linthtml-0.9.6.tgz", + "integrity": "sha512-balMwDpl0GKq0x35aFSsEuPKUyn2qoz793SprRZvFu30kfdXldH5TBXsud1ltf/N2RIEQctK3xkdtBKbb/ZLYA==", + "dev": true, + "dependencies": { + "@linthtml/cli": "^0.9.3", + "@linthtml/dom-utils": "^0.9.0", + "@linthtml/html-parser": "^0.9.0", + "bulk-require": "1.0.1", + "cosmiconfig": "7.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.2", + "ignore": "^5.1.4", + "lodash.pull": "4.1.0", + "resolve-from": "^5.0.0" + }, + "bin": { + "linthtml": "bin/linthtml.js" + } + }, + "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", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { "node": ">= 8" } @@ -2694,7 +3043,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "peer": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2703,6 +3051,16 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -2801,64 +3159,23 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/@stylelint/postcss-css-in-js": { - "version": "0.37.3", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz", - "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.17.9" - }, - "peerDependencies": { - "postcss": ">=7.0.0", - "postcss-syntax": ">=0.36.2" - } - }, - "node_modules/@stylelint/postcss-markdown": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", - "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", - "deprecated": "Use the original unforked package instead: postcss-markdown", - "dev": true, - "peer": true, - "dependencies": { - "remark": "^13.0.0", - "unist-util-find-all-after": "^3.0.2" - }, - "peerDependencies": { - "postcss": ">=7.0.0", - "postcss-syntax": ">=0.36.2" - } - }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/lodash": { "version": "4.14.202", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" }, - "node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/unist": "^2" - } - }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@types/node": { "version": "20.12.11", @@ -2872,20 +3189,18 @@ "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true, - "peer": true + "dev": true }, - "node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true, "peer": true }, @@ -2943,9 +3258,9 @@ } }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "peer": true, "bin": { @@ -2987,14 +3302,19 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "peer": true, + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-regex": { @@ -3002,7 +3322,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -3037,7 +3356,6 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "peer": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -3052,11 +3370,21 @@ "dequal": "^2.0.3" } }, + "node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -3073,6 +3401,7 @@ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3091,7 +3420,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "peer": true, "engines": { "node": ">=8" } @@ -3101,6 +3429,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3120,6 +3449,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -3139,6 +3469,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3157,6 +3488,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3189,6 +3521,7 @@ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -3211,7 +3544,6 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3248,41 +3580,15 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "peer": true, "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" + "possible-typed-array-names": "^1.0.0" }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - }, - "node_modules/autoprefixer/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true, - "peer": true - }, - "node_modules/available-typed-arrays": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", - "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -3291,9 +3597,9 @@ } }, "node_modules/axe-core": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.3.tgz", - "integrity": "sha512-d5ZQHPSPkF9Tw+yfyDcRoUOc4g/8UloJJe5J8m4L5+c7AtDdjDLRxew/knnI4CxvtdxEUVgWz4x3OIQUIFiMfw==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.4.tgz", + "integrity": "sha512-CZLSKisu/bhJ2awW4kJndluz2HLZYIHh5Uy1+ZwDRkJi69811xgIXXfdU9HSLX0Th+ILrHj8qfL/5wzamsFtQg==", "dev": true, "engines": { "node": ">=4" @@ -3362,17 +3668,6 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "dev": true, - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3403,6 +3698,22 @@ "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "dev": true, + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -3412,6 +3723,31 @@ "node": ">=8" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/blake2b": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.4.tgz", @@ -3430,6 +3766,12 @@ "nanoassert": "^2.0.0" } }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", @@ -3449,7 +3791,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "peer": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -3463,9 +3804,9 @@ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -3482,8 +3823,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -3495,9 +3836,10 @@ } }, "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -3514,7 +3856,7 @@ ], "dependencies": { "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "ieee754": "^1.1.13" } }, "node_modules/buffer-builder": { @@ -3523,59 +3865,126 @@ "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", "dev": true }, - "node_modules/bytes-iec": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", - "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", - "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "set-function-length": "^1.2.0" - }, + "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "peer": true, - "engines": { - "node": ">=6" + "dependencies": { + "semver": "^7.0.0" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/builtins/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "node_modules/builtins/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/builtins/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, + "peer": true + }, + "node_modules/bulk-require": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bulk-require/-/bulk-require-1.0.1.tgz", + "integrity": "sha512-BLU9AMnm1FMr68fR0sYvOkMew4x2ZJ8YztshITlGArl6aLtfAazOWiFj/bwJJixRO8C0wXx9PnRNRWeoR03e8Q==", + "dev": true, + "dependencies": { + "glob": "^7.1.1" + } + }, + "node_modules/bytes-iec": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", + "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "peer": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", @@ -3589,9 +3998,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001584", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001584.tgz", - "integrity": "sha512-LOz7CCQ9M1G7OjJOF9/mzmqmj3jE/7VOmrfw6Mgs0E8cjOsbRXQJHsPBfmBOXDskXKrHLyyW3n7kpDW/4BsfpQ==", + "version": "1.0.30001589", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz", + "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==", "dev": true, "funding": [ { @@ -3622,49 +4031,22 @@ "node": ">=4" } }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "dev": true, - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "dev": true, - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "dev": true, - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==", + "dev": true }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "peer": true, "dependencies": { "anymatch": "~3.1.2", @@ -3678,21 +4060,77 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } }, - "node_modules/clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "peer": true, "dependencies": { - "is-regexp": "^2.0.0" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/circom_runtime": { + "version": "0.1.23", + "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.23.tgz", + "integrity": "sha512-S0A63qM5LtlcTgsHX4z/U6nWAKo/KQBrz4umxVMyADPHxt6qDWy2AahPc2lAWQT42cFIDuonFPjgCjviSgQU8A==", + "dev": true, + "dependencies": { + "ffjavascript": "0.2.59" + }, + "bin": { + "calcwit": "calcwit.js" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" } }, "node_modules/color-convert": { @@ -3710,6 +4148,13 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "peer": true + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3721,12 +4166,28 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true, + "peer": true + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -3735,12 +4196,12 @@ "peer": true }, "node_modules/core-js-compat": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", - "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", + "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", "dev": true, "dependencies": { - "browserslist": "^4.22.2" + "browserslist": "^4.22.3" }, "funding": { "type": "opencollective", @@ -3748,11 +4209,10 @@ } }, "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, - "peer": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -3769,7 +4229,6 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "peer": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3779,6 +4238,30 @@ "node": ">= 8" } }, + "node_modules/css-functions-list": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", + "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12 || >=16" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "peer": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -3821,7 +4304,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3831,7 +4313,6 @@ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, - "peer": true, "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -3848,31 +4329,53 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "peer": true + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/define-data-property": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", - "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "peer": true, "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.2", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -3880,6 +4383,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "peer": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -3914,7 +4418,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "peer": true, "dependencies": { "path-type": "^4.0.0" }, @@ -3936,71 +4439,79 @@ } }, "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, - "peer": true, "dependencies": { "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "peer": true - }, "node_modules/dom-serializer/node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "peer": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, - "peer": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, - "peer": true, "dependencies": { - "domelementtype": "1" + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, - "peer": true, "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/electron-to-chromium": { - "version": "1.4.658", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.658.tgz", - "integrity": "sha512-LGkxndHz7OEv6ipmL95E83SOZmK96PHk6Njw0nf5UaOLbvPxxJhejlBWl4esuU6JHMiCjysLhKRQmLTd5s2ZPw==", + "version": "1.4.682", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.682.tgz", + "integrity": "sha512-oCglfs8yYKs9RQjJFOHonSnhikPK3y+0SvSYc/YpYJV//6rqc0/hbwd0c7vgK4vrl6y2gJAwjkhkSGWK+z4KRA==", "dev": true }, "node_modules/elliptic": { @@ -4026,85 +4537,77 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "peer": true + "dev": true }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true, - "peer": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8.6" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true, - "peer": true - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "peer": true, "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", + "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", "dev": true, + "peer": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", + "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.8", "string.prototype.trimend": "^1.0.7", "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", + "typed-array-buffer": "^1.0.1", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -4117,49 +4620,69 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true + "dev": true, + "peer": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", + "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", "dev": true, "peer": true, "dependencies": { "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.22.4", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", + "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "peer": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -4170,6 +4693,7 @@ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, + "peer": true, "dependencies": { "hasown": "^2.0.0" } @@ -4179,6 +4703,7 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "peer": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4209,69 +4734,205 @@ "node": ">=0.8.0" } }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/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/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "peer": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-compat-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", + "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + }, + "engines": { + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "peer": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, "node_modules/eslint-config-prettier": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -4280,16 +4941,33 @@ } }, "node_modules/eslint-config-standard": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-11.0.0.tgz", - "integrity": "sha512-oDdENzpViEe5fwuRCWla7AXQd++/oyIp8zP+iP9jiUPG6NBj3SHgdgtl/kTn00AjeN+1HNvavTKmYbMo+xMOlw==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { - "eslint": ">=4.18.0", - "eslint-plugin-import": ">=2.8.0", - "eslint-plugin-node": ">=5.2.1", - "eslint-plugin-promise": ">=3.6.0", - "eslint-plugin-standard": ">=3.0.1" + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" } }, "node_modules/eslint-import-resolver-node": { @@ -4297,6 +4975,7 @@ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, + "peer": true, "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -4308,6 +4987,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -4317,6 +4997,7 @@ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, + "peer": true, "dependencies": { "debug": "^3.2.7" }, @@ -4334,6 +5015,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -4358,11 +5040,33 @@ "eslint": ">=4.19.1" } }, + "node_modules/eslint-plugin-es-x": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", + "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0", + "eslint-compat-utils": "^0.1.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, "node_modules/eslint-plugin-import": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, + "peer": true, "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -4394,6 +5098,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -4403,6 +5108,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "peer": true, "dependencies": { "esutils": "^2.0.2" }, @@ -4451,116 +5157,214 @@ "node": ">=4" } }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "node_modules/eslint-plugin-n": { + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", + "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", "dev": true, "peer": true, "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^13.24.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" }, "engines": { - "node": ">=8.10.0" + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint-plugin-promise": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", - "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "peer": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=4" + "node": ">=8" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/eslint-plugin-n/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "peer": true, "dependencies": { - "esutils": "^2.0.2" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "peer": true, "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "lru-cache": "^6.0.0" }, "bin": { - "resolve": "bin/resolve" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-n/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, + "peer": true, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-standard": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz", - "integrity": "sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w==", + "node_modules/eslint-plugin-n/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, + "peer": true + }, + "node_modules/eslint-plugin-no-relative-import-paths": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-relative-import-paths/-/eslint-plugin-no-relative-import-paths-1.5.4.tgz", + "integrity": "sha512-2smViH7R3682NR6dwgYr8Vm7emqNP1gEjBku6DbvUy3Ef/2Fz+mhwsFjZGSixzWzazMCj4MAgIWTsHELCCDJKA==", + "dev": true, + "peer": true + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "peer": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, "peerDependencies": { - "eslint": ">=3.19.0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "peer": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/eslint-scope": { @@ -4620,16 +5424,6 @@ "node": ">=10" } }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4646,6 +5440,13 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "peer": true + }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -4696,6 +5497,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -4722,33 +5553,17 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "peer": true, "dependencies": { - "lru-cache": "^6.0.0" + "argparse": "^2.0.1" }, "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "js-yaml": "bin/js-yaml.js" } }, "node_modules/eslint/node_modules/supports-color": { @@ -4777,36 +5592,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/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, - "peer": true - }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "peer": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "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, "peer": true, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -4814,7 +5628,6 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "peer": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -4882,26 +5695,20 @@ "node": ">=0.8.x" } }, - "node_modules/execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, - "peer": true, "dependencies": { - "clone-regexp": "^2.1.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "peer": true - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4909,11 +5716,17 @@ "dev": true, "peer": true }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "peer": true + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "peer": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4925,6 +5738,17 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -4936,8 +5760,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "peer": true + "dev": true }, "node_modules/fastest-levenshtein": { "version": "1.0.16", @@ -4953,11 +5776,36 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "peer": true, "dependencies": { "reusify": "^1.0.4" } }, + "node_modules/ffjavascript": { + "version": "0.2.59", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.59.tgz", + "integrity": "sha512-QssOEUv+wilz9Sg7Zaj6KWAm7QceOAEsFuEBTltUsDo1cjn11rA/LGYvzFBPbzNfxRlZxwgJ7uxpCQcdDlrNfw==", + "dev": true, + "dependencies": { + "wasmbuilder": "0.0.16", + "wasmcurves": "0.2.1", + "web-worker": "^1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -4975,7 +5823,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "peer": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4984,17 +5831,20 @@ } }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "peer": true, "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat-cache": { @@ -5013,16 +5863,16 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true, "peer": true }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -5043,13 +5893,42 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "peer": true, "dependencies": { "is-callable": "^1.1.3" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { "asynckit": "^0.4.0", @@ -5064,8 +5943,21 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "peer": true + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, "node_modules/function-bind": { "version": "1.1.2", @@ -5081,6 +5973,7 @@ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -5094,18 +5987,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true, - "peer": true - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5125,6 +6012,7 @@ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, + "peer": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -5140,26 +6028,27 @@ } }, "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "dev": true, - "peer": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-symbol-description": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.1.tgz", - "integrity": "sha512-KmuibvwbWaM4BHcBRYwJfZ1JxyJeBwB8ct9YYu67SvYdbEIlcQ2e56dHxfbobqW38GXo8/zDFqJeGtHiVbWyQw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.5", - "es-errors": "^1.3.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -5168,12 +6057,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "peer": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5190,15 +6091,16 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "peer": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/global-modules": { @@ -5206,7 +6108,6 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, - "peer": true, "dependencies": { "global-prefix": "^3.0.0" }, @@ -5219,7 +6120,6 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, - "peer": true, "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -5234,7 +6134,6 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "peer": true, "dependencies": { "isexe": "^2.0.0" }, @@ -5256,6 +6155,7 @@ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, + "peer": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -5270,7 +6170,6 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "peer": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -5286,15 +6185,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "peer": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/globjoin": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", @@ -5302,22 +6192,6 @@ "dev": true, "peer": true }, - "node_modules/gonzales-pe": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", - "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", - "dev": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "gonzales": "bin/gonzales.js" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/google-protobuf": { "version": "3.21.2", "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", @@ -5329,6 +6203,7 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "peer": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -5336,12 +6211,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "peer": true + }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, - "peer": true, "engines": { "node": ">=6" } @@ -5351,6 +6232,7 @@ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5365,22 +6247,24 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "peer": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4" }, @@ -5393,6 +6277,7 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4" }, @@ -5405,6 +6290,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "peer": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -5425,9 +6311,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -5446,12 +6332,20 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "peer": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -5464,7 +6358,6 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -5476,8 +6369,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true + "dev": true }, "node_modules/html-tags": { "version": "3.3.1", @@ -5493,33 +6385,34 @@ } }, "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", "dev": true, - "peer": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" } }, - "node_modules/htmlparser2/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "peer": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, "node_modules/ieee754": { @@ -5542,11 +6435,9 @@ ] }, "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "peer": true, + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "engines": { "node": ">= 4" } @@ -5562,7 +6453,6 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "peer": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -5574,6 +6464,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/import-lazy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", @@ -5599,7 +6498,6 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -5609,7 +6507,6 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "peer": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -5624,47 +6521,117 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, - "peer": true + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "node_modules/inquirer/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": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "node_modules/inquirer/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, - "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "node_modules/inquirer/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/inquirer/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/inquirer/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/inquirer/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/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "peer": true, "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">= 0.4" } }, "node_modules/is-array-buffer": { @@ -5672,6 +6639,7 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -5687,8 +6655,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/is-async-function": { "version": "2.0.0", @@ -5711,6 +6678,7 @@ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "peer": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -5735,6 +6703,7 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -5746,28 +6715,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "peer": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-callable": { @@ -5775,6 +6736,7 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4" }, @@ -5799,6 +6761,7 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5809,17 +6772,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true, - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5846,7 +6798,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -5878,15 +6829,13 @@ "node": ">=0.10.0" } }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=8" } }, "node_modules/is-map": { @@ -5900,10 +6849,11 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4" }, @@ -5915,7 +6865,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "peer": true, "engines": { "node": ">=0.12.0" } @@ -5925,6 +6874,7 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5935,11 +6885,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, "peer": true, "engines": { "node": ">=0.10.0" @@ -5950,6 +6919,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -5961,16 +6931,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", @@ -5982,12 +6942,16 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5998,6 +6962,7 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6013,6 +6978,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "peer": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -6028,6 +6994,7 @@ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, + "peer": true, "dependencies": { "which-typed-array": "^1.1.14" }, @@ -6038,19 +7005,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true, - "peer": true - }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "peer": true, "engines": { "node": ">=10" }, @@ -6073,6 +7032,7 @@ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -6098,14 +7058,14 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "peer": true + "dev": true }, "node_modules/iso-language-codes": { "version": "1.1.0", @@ -6126,6 +7086,24 @@ "set-function-name": "^2.0.1" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/js-sha256": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.10.1.tgz", @@ -6147,7 +7125,6 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "peer": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -6180,8 +7157,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "peer": true + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -6210,6 +7186,36 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "dev": true, + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -6226,6 +7232,12 @@ "node": ">=4.0" } }, + "node_modules/kebabcase": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kebabcase/-/kebabcase-1.0.1.tgz", + "integrity": "sha512-YSP7DnNnodPG0nkHGEICNx5vUl/lOKkryQlILRqRFmcjWFNomEvPhJlpFvE7sop9t2EDfthZssx3nvwTx5ty0w==", + "dev": true + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -6241,15 +7253,14 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/known-css-properties": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", - "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true, "peer": true }, @@ -6300,20 +7311,31 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", "dev": true, - "peer": true + "dependencies": { + "uc.micro": "^1.0.1" + } }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "peer": true, "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { @@ -6332,6 +7354,12 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -6339,6 +7367,12 @@ "dev": true, "peer": true }, + "node_modules/lodash.pull": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.pull/-/lodash.pull-4.1.0.tgz", + "integrity": "sha512-EM7CVTzXfkTyusQdN7mgGPh2ZfkKfQ5lA9U+X7NNDeEgKEaO65dB5Kh8+Ppap0X1wQOndPjKP/VVTis7hFvkzg==", + "dev": true + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -6351,7 +7385,6 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "peer": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -6368,7 +7401,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -6384,7 +7416,6 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6401,7 +7432,6 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -6413,15 +7443,13 @@ "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, - "peer": true + "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, - "peer": true, "engines": { "node": ">=8" } @@ -6431,7 +7459,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -6444,17 +7471,6 @@ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, - "node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "dev": true, - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -6482,7 +7498,6 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, - "peer": true, "engines": { "node": ">=8" }, @@ -6490,71 +7505,175 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "node_modules/markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", "dev": true, - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" } }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/markdownlint": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.29.0.tgz", + "integrity": "sha512-ASAzqpODstu/Qsk0xW5BPgWnK/qjpBQ4e7IpsSvvFXcfYIjanLTdwFRJK1SIEEh0fGSMKXcJf/qhaZYHyME0wA==", + "dev": true, + "dependencies": { + "markdown-it": "13.0.1", + "markdownlint-micromark": "0.1.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/markdownlint-cli": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.35.0.tgz", + "integrity": "sha512-lVIIIV1MrUtjoocgDqXLxUCxlRbn7Ve8rsWppfwciUNwLlNS28AhNiyQ3PU7jjj4Qvj+rWTTvwkqg7AcdG988g==", + "dev": true, + "dependencies": { + "commander": "~11.0.0", + "get-stdin": "~9.0.0", + "glob": "~10.2.7", + "ignore": "~5.2.4", + "js-yaml": "^4.1.0", + "jsonc-parser": "~3.2.0", + "markdownlint": "~0.29.0", + "minimatch": "~9.0.1", + "run-con": "~1.2.11" + }, + "bin": { + "markdownlint": "markdownlint.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/markdownlint-cli/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/markdownlint-cli/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/markdownlint-cli/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", "dev": true, - "peer": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "node_modules/markdownlint-cli/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/markdownlint-cli/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/markdownlint-cli/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "peer": true, "dependencies": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "node_modules/markdownlint-micromark": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.5.tgz", + "integrity": "sha512-HvofNU4QCvfUCWnocQP1IAWaqop5wpWrB0mKB6SSh0fcpV0PdmQNS6tdUuFew1utpYlUvYYzz84oDkrD76GB9A==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, "peer": true, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "peer": true + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, "node_modules/meow": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, - "peer": true, "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -6576,41 +7695,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "peer": true, "engines": { "node": ">= 8" } }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "peer": true, - "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "peer": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -6638,12 +7746,20 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, - "peer": true, "engines": { "node": ">=4" } @@ -6684,7 +7800,6 @@ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, - "peer": true, "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -6694,12 +7809,27 @@ "node": ">= 6" } }, + "node_modules/minipass": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", + "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "node_modules/nanoassert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", @@ -6710,6 +7840,25 @@ "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==" }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/nanospinner": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/nanospinner/-/nanospinner-1.1.0.tgz", @@ -6737,7 +7886,6 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "peer": true, "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -6753,7 +7901,6 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -6766,7 +7913,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, - "peer": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -6781,8 +7927,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true + "dev": true }, "node_modules/normalize-path": { "version": "3.0.0", @@ -6793,30 +7938,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==", - "dev": true, - "peer": true - }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", - "dev": true, - "peer": true - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6832,6 +7953,7 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6841,6 +7963,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4" } @@ -6850,6 +7973,7 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -6883,6 +8007,7 @@ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6900,6 +8025,7 @@ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", "dev": true, + "peer": true, "dependencies": { "array.prototype.filter": "^1.0.3", "call-bind": "^1.0.5", @@ -6927,6 +8053,7 @@ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6944,11 +8071,25 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "peer": true, "dependencies": { "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -6967,33 +8108,138 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/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/ora/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/ora/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/ora/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/ora/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/ora/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/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "peer": true, "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "peer": true, "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -7001,7 +8247,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "peer": true, "engines": { "node": ">=6" } @@ -7011,7 +8256,6 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "peer": true, "dependencies": { "callsites": "^3.0.0" }, @@ -7019,31 +8263,11 @@ "node": ">=6" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, - "peer": true, - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -7062,7 +8286,6 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -7072,7 +8295,6 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -7082,7 +8304,6 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -7093,11 +8314,35 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "peer": true, "engines": { "node": ">=8" } @@ -7111,7 +8356,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "peer": true, "engines": { "node": ">=8.6" }, @@ -7119,58 +8363,45 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, "peer": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-html": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", - "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", - "dev": true, - "peer": true, - "dependencies": { - "htmlparser2": "^3.10.0" - }, - "peerDependencies": { - "postcss": ">=5.0.0", - "postcss-syntax": ">=0.36.0" + "node": ">= 0.4" } }, - "node_modules/postcss-less": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", - "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "peer": true, "dependencies": { - "postcss": "^7.0.14" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">=6.14.4" + "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, - "peer": true - }, "node_modules/postcss-resolve-nested-selector": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", @@ -7179,40 +8410,46 @@ "peer": true }, "node_modules/postcss-safe-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", - "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", "dev": true, "peer": true, - "dependencies": { - "postcss": "^7.0.26" - }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-sass": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", - "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", - "dev": true, - "peer": true, - "dependencies": { - "gonzales-pe": "^4.3.0", - "postcss": "^7.0.21" + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" } }, "node_modules/postcss-scss": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", - "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", "dev": true, - "peer": true, - "dependencies": { - "postcss": "^7.0.6" - }, - "engines": { - "node": ">=6.0.0" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" } }, "node_modules/postcss-selector-parser": { @@ -7229,16 +8466,6 @@ "node": ">=4" } }, - "node_modules/postcss-syntax": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", - "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", - "dev": true, - "peer": true, - "peerDependencies": { - "postcss": ">=5.0.0" - } - }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -7246,13 +8473,6 @@ "dev": true, "peer": true }, - "node_modules/postcss/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true, - "peer": true - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -7263,22 +8483,41 @@ "node": ">= 0.8.0" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "peer": true, + "bin": { + "prettier": "bin-prettier.js" + }, "engines": { - "node": ">= 0.6.0" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "peer": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, "engines": { - "node": ">=0.4.0" + "node": ">=6.0.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" } }, "node_modules/prop-types": { @@ -7321,16 +8560,6 @@ "node": ">=12.0.0" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -7348,15 +8577,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "peer": true + ] }, "node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -7373,7 +8600,6 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "peer": true, "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -7389,7 +8615,6 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "peer": true, "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -7402,12 +8627,63 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -7416,15 +8692,13 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "peer": true + "dev": true }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "peer": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -7437,7 +8711,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "peer": true, "bin": { "semver": "bin/semver" } @@ -7447,7 +8720,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -7467,6 +8739,29 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/readable-stream/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -7484,7 +8779,6 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "peer": true, "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -7493,6 +8787,15 @@ "node": ">=8" } }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", @@ -7548,14 +8851,16 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -7615,60 +8920,6 @@ "jsesc": "bin/jsesc" } }, - "node_modules/remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", - "dev": true, - "peer": true, - "dependencies": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "dev": true, - "peer": true, - "dependencies": { - "mdast-util-from-markdown": "^0.8.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", - "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", - "dev": true, - "peer": true, - "dependencies": { - "mdast-util-to-markdown": "^0.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -7697,20 +8948,41 @@ } }, "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, "peer": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "peer": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -7732,6 +9004,39 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-con": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.12.tgz", + "integrity": "sha512-5257ILMYIF4RztL9uoZ7V9Q97zHtNHn5bN3NobeAnzB1P3ASLgg8qocM2u+R18ttp+VEM78N2LK8XcNVtnSRrg==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~3.0.0", + "minimist": "^1.2.8", + "strip-json-comments": "~3.1.1" + }, + "bin": { + "run-con": "cli.js" + } + }, + "node_modules/run-con/node_modules/ini": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", + "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7750,7 +9055,6 @@ "url": "https://feross.org/support" } ], - "peer": true, "dependencies": { "queue-microtask": "^1.2.2" } @@ -7769,6 +9073,7 @@ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", @@ -7806,6 +9111,7 @@ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -7818,6 +9124,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "node_modules/sass-embedded": { "version": "1.57.1", "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.57.1.tgz", @@ -7844,17 +9156,17 @@ "sass-embedded-win32-x64": "1.57.1" } }, - "node_modules/sass-embedded-linux-x64": { + "node_modules/sass-embedded-darwin-arm64": { "version": "1.57.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.57.1.tgz", - "integrity": "sha512-AI6CrcuLWP22RXhVrZUN2JfdQ7YdFR30dA4twYwp/Q4hUfj85dJrVD5ORi8G04haMWPOQiFV6pBcMgzpiY2Bog==", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.57.1.tgz", + "integrity": "sha512-YSfrLZkM2HdXETQdSznv2DN2GdkmBNWLAlHfDWe0toSEIB2C2YGuoqHYZtl6PBYqu8k8FH4TDyct8VzoIa+rMw==", "cpu": [ - "x64" + "arm64" ], "dev": true, "optional": true, "os": [ - "linux" + "darwin" ], "engines": { "node": ">=14.0.0" @@ -7903,6 +9215,7 @@ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", "dev": true, + "peer": true, "dependencies": { "define-data-property": "^1.1.2", "es-errors": "^1.3.0", @@ -7916,14 +9229,16 @@ } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "peer": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7934,7 +9249,6 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "peer": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -7947,7 +9261,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -7957,6 +9270,7 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -7974,8 +9288,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "peer": true + "dev": true }, "node_modules/size-limit": { "version": "8.2.6", @@ -8001,7 +9314,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "peer": true, "engines": { "node": ">=8" } @@ -8060,68 +9372,83 @@ "dev": true, "peer": true }, + "node_modules/snarkjs": { + "version": "0.7.0", + "resolved": "git+ssh://git@github.com/vocdoni/snarkjs.git#d6e37e9120e44b6681e32d8f552d4fec0f3e1b23", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "bfj": "^7.0.2", + "circom_runtime": "0.1.23", + "ffjavascript": "0.2.59" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "peer": true, + "optional": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-exceptions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", - "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", - "dev": true, - "peer": true + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "peer": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", - "dev": true, - "peer": true - }, - "node_modules/specificity": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", - "dev": true, - "peer": true, - "bin": { - "specificity": "bin/specificity" - } + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "dev": true }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", "dev": true, - "peer": true + "dependencies": { + "escodegen": "^1.8.1" + } }, "node_modules/string_decoder": { "version": "1.3.0", @@ -8136,7 +9463,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8146,12 +9472,32 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "peer": true + "dev": true }, "node_modules/string.prototype.matchall": { "version": "4.0.10", @@ -8179,6 +9525,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -8196,6 +9543,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -8210,6 +9558,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -8224,7 +9573,19 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -8237,6 +9598,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -8246,7 +9608,6 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, - "peer": true, "dependencies": { "min-indent": "^1.0.0" }, @@ -8259,7 +9620,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "peer": true, "engines": { "node": ">=8" }, @@ -8275,176 +9635,340 @@ "peer": true }, "node_modules/stylelint": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.11.0.tgz", - "integrity": "sha512-DhrKSWDWGZkCiQMtU+VroXM6LWJVC8hSK24nrUngTSQvXGK75yZUq4yNpynqrxD3a/fzKMED09V+XxO4z4lTbw==", - "dev": true, - "peer": true, - "dependencies": { - "@stylelint/postcss-css-in-js": "^0.37.2", - "@stylelint/postcss-markdown": "^0.36.2", - "autoprefixer": "^9.8.6", - "balanced-match": "^1.0.0", - "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "execall": "^2.0.0", - "fast-glob": "^3.2.5", - "fastest-levenshtein": "^1.0.12", - "file-entry-cache": "^6.0.0", - "get-stdin": "^8.0.0", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", + "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", + "dev": true, + "peer": true, + "dependencies": { + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", + "@csstools/media-query-list-parser": "^2.1.4", + "@csstools/selector-specificity": "^3.0.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.1", + "css-tree": "^2.3.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.1", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^7.0.0", "global-modules": "^2.0.0", - "globby": "^11.0.2", + "globby": "^11.1.0", "globjoin": "^0.1.4", - "html-tags": "^3.1.0", - "ignore": "^5.1.8", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", - "known-css-properties": "^0.21.0", - "lodash": "^4.17.20", - "log-symbols": "^4.0.0", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.29.0", "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", - "micromatch": "^4.0.2", - "normalize-selector": "^0.2.0", - "postcss": "^7.0.35", - "postcss-html": "^0.36.0", - "postcss-less": "^3.1.4", - "postcss-media-query-parser": "^0.2.3", + "meow": "^10.1.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.28", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^4.0.2", - "postcss-sass": "^0.4.4", - "postcss-scss": "^2.1.1", - "postcss-selector-parser": "^6.0.4", - "postcss-syntax": "^0.36.2", - "postcss-value-parser": "^4.1.0", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", - "slash": "^3.0.0", - "specificity": "^0.4.1", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "sugarss": "^2.0.0", + "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.0.7", - "v8-compile-cache": "^2.2.0", - "write-file-atomic": "^3.0.3" + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" }, "bin": { - "stylelint": "bin/stylelint.js" + "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": ">=10.13.0" + "node": "^14.13.1 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/stylelint" } }, - "node_modules/stylelint/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==", + "node_modules/stylelint-prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stylelint-prettier/-/stylelint-prettier-3.0.0.tgz", + "integrity": "sha512-kIks1xw6np0zElokMT2kP6ar3S4MBoj6vUtPJuND1pFELMpZxVS/0uHPR4HDAVn0WAD3I5oF0IA3qBFxBpMkLg==", "dev": true, "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "prettier-linter-helpers": "^1.0.0" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "prettier": ">=2.0.0", + "stylelint": ">=14.0.0" + } + }, + "node_modules/stylelint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "peer": true + }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, + "peer": true + }, + "node_modules/stylelint/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/stylelint/node_modules/camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", "dev": true, "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "peer": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/stylelint/node_modules/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true, + "peer": true, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint/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==", + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", + "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", "dev": true, "peer": true, "dependencies": { - "color-name": "~1.1.4" + "flat-cache": "^3.2.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=12.0.0" } }, - "node_modules/stylelint/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/stylelint/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "peer": true + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/stylelint/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==", + "node_modules/stylelint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/stylelint/node_modules/meow": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", "dev": true, "peer": true, + "dependencies": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" + }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "node_modules/stylelint/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "peer": true, "engines": { - "node": ">= 4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/stylelint/node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", "dev": true, "peer": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint/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==", + "node_modules/stylelint/node_modules/read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", "dev": true, "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sugarss": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", - "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "node_modules/stylelint/node_modules/redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dev": true, "peer": true, "dependencies": { - "postcss": "^7.0.2" + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "peer": true, + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supports-color": { @@ -8459,6 +9983,43 @@ "node": ">=4" } }, + "node_modules/supports-hyperlinks": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "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, + "peer": 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", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -8495,6 +10056,21 @@ "node": ">=10.0.0" } }, + "node_modules/table-layout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", + "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/table/node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -8526,10 +10102,28 @@ "dev": true, "peer": true }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } }, "node_modules/to-fast-properties": { "version": "2.0.0", @@ -8544,7 +10138,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "peer": true, "dependencies": { "is-number": "^7.0.0" }, @@ -8562,27 +10155,22 @@ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, - "peer": true, "engines": { "node": ">=8" } }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "dev": true, - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, + "peer": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -8595,6 +10183,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "peer": true, "dependencies": { "minimist": "^1.2.0" }, @@ -8627,11 +10216,10 @@ } }, "node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "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, - "peer": true, "engines": { "node": ">=10" }, @@ -8640,29 +10228,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -8672,16 +10263,18 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, + "peer": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -8691,34 +10284,47 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", + "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "peer": true, - "dependencies": { - "is-typedarray": "^1.0.0" + "engines": { + "node": ">=8" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -8729,6 +10335,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", + "dev": true + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -8774,74 +10386,6 @@ "node": ">=4" } }, - "node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "dev": true, - "peer": true, - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-util-find-all-after": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", - "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", - "dev": true, - "peer": true, - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true, - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, - "peer": true, - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -8882,63 +10426,32 @@ "punycode": "^2.1.0" } }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "peer": true - }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true, - "peer": true + "dev": true }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "peer": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/wasmbuilder": { "version": "0.0.16", "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz", @@ -8952,6 +10465,15 @@ "wasmbuilder": "0.0.16" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/web-worker": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", @@ -8962,7 +10484,6 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "peer": true, "dependencies": { "isexe": "^2.0.0" }, @@ -8978,6 +10499,7 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "peer": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -9037,6 +10559,7 @@ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", "dev": true, + "peer": true, "dependencies": { "available-typed-arrays": "^1.0.6", "call-bind": "^1.0.5", @@ -9051,24 +10574,157 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/wrap-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/wrap-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/wrap-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/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "peer": true + "dev": true }, "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "peer": true, "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ws": { @@ -9102,7 +10758,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "peer": true, "engines": { "node": ">= 6" } @@ -9112,9 +10767,21 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "peer": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yup": { @@ -9133,17 +10800,6 @@ "engines": { "node": ">=10" } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "dev": true, - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } } } } diff --git a/package.json b/package.json index 52e0ecc0..71dff654 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "decidim-vocdoni", - "version": "1.0.0", + "version": "2.0.0", "description": "An elections component for decidim's participatory spaces based on the Vocdoni SDK", "main": "index.js", "directories": { @@ -28,22 +28,19 @@ }, "devDependencies": { "@babel/eslint-parser": "^7.19.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.20.5", + "@babel/plugin-transform-class-properties": "^7.24.1", "@babel/plugin-transform-classes": "^7.20.7", "@babel/plugin-transform-regenerator": "^7.20.5", "@babel/plugin-transform-runtime": "^7.19.6", "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", - "@decidim/dev": "0.27.6", - "@decidim/eslint-config": "0.27.6", - "@decidim/stylelint-config": "0.27.6", - "eslint-config-prettier": "^8.5.0", - "eslint-config-standard": "^11.0.0", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-standard": "^3.1.0", + "@decidim/dev": "0.28.1", + "@decidim/eslint-config": "0.28.1", + "@decidim/prettier-config": "0.28.1", + "@decidim/stylelint-config": "0.28.1", + "postcss-scss": "^4.0.9", "sass-embedded": "~1.57.1", + "snarkjs": "vocdoni/snarkjs#v0.7.0-groth16browser", "web-worker": "1.2.0" }, "dependencies": { diff --git a/spec/cells/decidim/vocdoni/census_authorization_modal_cell_spec.rb b/spec/cells/decidim/vocdoni/census_authorization_modal_cell_spec.rb index 6fc29039..d4e63cb6 100644 --- a/spec/cells/decidim/vocdoni/census_authorization_modal_cell_spec.rb +++ b/spec/cells/decidim/vocdoni/census_authorization_modal_cell_spec.rb @@ -9,9 +9,9 @@ module Vocdoni subject { cell("decidim/vocdoni/census_authorization_modal", model) } - let(:model) { create(:vocdoni_election, :published, :started, :with_internal_census, verification_types: verification_types) } + let(:model) { create(:vocdoni_election, :published, :started, :with_internal_census, verification_types:) } let(:verification_types) { [authorization_handler_name] } - let(:current_user) { create(:user, :confirmed, organization: organization) } + let(:current_user) { create(:user, :confirmed, organization:) } let(:organization) { create(:organization, available_authorizations: [authorization_handler_name]) } let(:voter) { create(:vocdoni_voter, election: model, email: current_user.email) } let(:authorization_handler_name) { "id_documents" } @@ -25,7 +25,7 @@ module Vocdoni context "when current_user is present" do it "returns 'internalCensusModal'" do allow(controller).to receive(:current_user).and_return(current_user) - expect(subject.modal_id).to eq "internalCensusModal" + expect(subject.modal_id).to eq "census-authorization-modal" end end diff --git a/spec/cells/decidim/vocdoni/election_cell_spec.rb b/spec/cells/decidim/vocdoni/election_cell_spec.rb index 90fe1a6d..10a4331c 100644 --- a/spec/cells/decidim/vocdoni/election_cell_spec.rb +++ b/spec/cells/decidim/vocdoni/election_cell_spec.rb @@ -19,12 +19,11 @@ let(:model) { election } it "renders the card" do - expect(subject).to have_css(".card--election") + expect(subject).to have_css(".card__grid") end it "renders the title and text" do - expect(subject).to have_css(".card__title") - expect(subject).to have_css(".card__text") + expect(subject).to have_css(".card__grid-text") end end end diff --git a/spec/cells/decidim/vocdoni/election_m_cell_spec.rb b/spec/cells/decidim/vocdoni/election_g_cell_spec.rb similarity index 61% rename from spec/cells/decidim/vocdoni/election_m_cell_spec.rb rename to spec/cells/decidim/vocdoni/election_g_cell_spec.rb index 337e2e71..fe32d14b 100644 --- a/spec/cells/decidim/vocdoni/election_m_cell_spec.rb +++ b/spec/cells/decidim/vocdoni/election_g_cell_spec.rb @@ -2,18 +2,18 @@ require "spec_helper" -describe Decidim::Vocdoni::ElectionMCell, type: :cell do +describe Decidim::Vocdoni::ElectionGCell, type: :cell do controller Decidim::Vocdoni::ElectionsController subject { cell_html } - let(:my_cell) { cell("decidim/vocdoni/election_m", election, context: { show_space: show_space }) } + let(:my_cell) { cell("decidim/vocdoni/election_g", election, context: { show_space: }) } let(:cell_html) { my_cell.call } let(:start_time) { 2.days.ago } let(:end_time) { 1.day.from_now } - let!(:election) { create(:vocdoni_election, :ongoing, :auto_start, start_time: start_time, end_time: end_time) } + let!(:election) { create(:vocdoni_election, :ongoing, :auto_start, start_time:, end_time:) } let(:model) { election } - let(:user) { create :user, organization: election.participatory_space.organization } + let(:user) { create(:user, organization: election.participatory_space.organization) } before do allow(controller).to receive(:current_user).and_return(user) @@ -25,28 +25,30 @@ let(:show_space) { false } it "renders the card" do - expect(subject).to have_css(".card--election") + expect(subject).to have_css(".card__grid") end it "renders the start and end time" do election_start = I18n.l(start_time.to_date, format: :decidim_short) election_end = I18n.l(end_time.to_date, format: :decidim_short) - expect(subject).to have_css(".card-data__item--centerblock", text: election_start) - expect(subject).to have_css(".card-data__item--centerblock", text: election_end) + within ".card__grid-metadata" do + expect(subject).to have_css("span", text: election_start) + expect(subject).to have_css("span", text: election_end) + end end it "renders the title and description" do description = strip_tags(translated(election.description, locale: :en)) - expect(subject).to have_css(".card__title", text: translated(election.title)) - expect(subject).to have_css(".card__text", text: description) + expect(subject).to have_css(".card__grid-text", text: translated(election.title)) + expect(subject).to have_css(".card__grid-text", text: description) end context "when election end less than 12 hours away" do let(:end_time) { 10.hours.from_now } it "renders remaining time callout" do - expect(subject).to have_css(".callout", text: "remaining to vote") + expect(subject).to have_css(".flash__message", text: "remaining to vote") end end @@ -58,7 +60,7 @@ end it "shows the attached image" do - expect(subject).to have_css(".card__image") + expect(subject).to have_css(".card__grid-img") end end end diff --git a/spec/cells/decidim/vocdoni/election_results_realtime_cell_spec.rb b/spec/cells/decidim/vocdoni/election_results_realtime_cell_spec.rb index bc029155..e6cb560d 100644 --- a/spec/cells/decidim/vocdoni/election_results_realtime_cell_spec.rb +++ b/spec/cells/decidim/vocdoni/election_results_realtime_cell_spec.rb @@ -17,7 +17,7 @@ end context "when election is not secret until the end and ongoing" do - let!(:election) { create(:vocdoni_election, :ongoing, :started, component: component, election_type: { "secret_until_the_end" => false }) } + let!(:election) { create(:vocdoni_election, :ongoing, :started, component:, election_type: { "secret_until_the_end" => false }) } it "renders the cell" do expect(subject).to have_css(".realtime-results") @@ -28,7 +28,7 @@ let!(:election) { create(:vocdoni_election, :published, :ongoing, election_type: { "secret_until_the_end" => true }) } it "does not render the cell" do - expect(subject).not_to have_css(".realtime-results") + expect(subject).to have_no_css(".realtime-results") end end @@ -36,7 +36,7 @@ let!(:election) { create(:vocdoni_election, :published, :finished, election_type: { "secret_until_the_end" => false }) } it "does not render the cell" do - expect(subject).not_to have_css(".realtime-results") + expect(subject).to have_no_css(".realtime-results") end end end diff --git a/spec/commands/decidim/vocdoni/admin/create_answer_spec.rb b/spec/commands/decidim/vocdoni/admin/create_answer_spec.rb index d0e9a681..656b6ec4 100644 --- a/spec/commands/decidim/vocdoni/admin/create_answer_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/create_answer_spec.rb @@ -8,9 +8,9 @@ let(:organization) { component.organization } let(:participatory_process) { component.participatory_space } let(:component) { election.component } - let(:question) { create :vocdoni_question, election: election } - let(:election) { create :vocdoni_election } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:question) { create(:vocdoni_question, election:) } + let(:election) { create(:vocdoni_election) } + let(:user) { create(:user, :admin, :confirmed, organization:) } let(:form) do double( invalid?: invalid, @@ -20,8 +20,8 @@ current_user: user, current_component: component, current_organization: organization, - election: election, - question: question + election:, + question: ) end let(:invalid) { false } @@ -39,7 +39,7 @@ expect(answer.weight).to eq(10) end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:create!) .with( @@ -65,7 +65,7 @@ end context "when the election is ongoing" do - let(:election) { create :vocdoni_election, :ongoing } + let(:election) { create(:vocdoni_election, :ongoing) } it "is not valid" do expect { subject.call }.to broadcast(:invalid) diff --git a/spec/commands/decidim/vocdoni/admin/create_census_data_spec.rb b/spec/commands/decidim/vocdoni/admin/create_census_data_spec.rb index 01025982..d9541c34 100644 --- a/spec/commands/decidim/vocdoni/admin/create_census_data_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/create_census_data_spec.rb @@ -6,7 +6,7 @@ module Decidim::Vocdoni::Admin describe CreateCensusData do subject { described_class.new(form, election) } - let(:form) { CensusDataForm.new(file: file) } + let(:form) { CensusDataForm.new(file:) } let(:election) { create(:vocdoni_election) } def valid_census_file @@ -31,7 +31,7 @@ def valid_census_file context "when the file is provided and contains valid data" do let(:file) { Rack::Test::UploadedFile.new(valid_census_file, "text/csv") } - let(:form) { CensusDataForm.new(file: file) } + let(:form) { CensusDataForm.new(file:) } let(:expected_number_of_voters) { 2 } it "successfully creates voters" do @@ -41,7 +41,7 @@ def valid_census_file context "when updates the census type of the election" do let(:file) { Rack::Test::UploadedFile.new(valid_census_file, "text/csv") } - let(:form) { CensusDataForm.new(file: file) } + let(:form) { CensusDataForm.new(file:) } it "sets the internal_census to false" do subject.call diff --git a/spec/commands/decidim/vocdoni/admin/create_election_spec.rb b/spec/commands/decidim/vocdoni/admin/create_election_spec.rb index 6f9e1b4a..ed3081f2 100644 --- a/spec/commands/decidim/vocdoni/admin/create_election_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/create_election_spec.rb @@ -5,10 +5,10 @@ describe Decidim::Vocdoni::Admin::CreateElection do subject { described_class.new(form) } - let(:organization) { create :organization, available_locales: [:en, :ca, :es], default_locale: :en } - let(:participatory_process) { create :participatory_process, organization: organization } - let(:current_component) { create :component, participatory_space: participatory_process, manifest_name: "vocdoni" } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:organization) { create(:organization, available_locales: [:en, :ca, :es], default_locale: :en) } + let(:participatory_process) { create(:participatory_process, organization:) } + let(:current_component) { create(:component, participatory_space: participatory_process, manifest_name: "vocdoni") } + let(:user) { create(:user, :admin, :confirmed, organization:) } let(:form) do double( invalid?: invalid, @@ -16,10 +16,10 @@ description: { en: "description" }, stream_uri: "https://example.org/stream", attachment: attachment_params, - photos: photos, + photos:, add_photos: uploaded_photos, current_user: user, - current_component: current_component, + current_component:, current_organization: organization ) end @@ -46,7 +46,7 @@ expect(election.component).to eq current_component end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:create!) .with( diff --git a/spec/commands/decidim/vocdoni/admin/create_internal_census_spec.rb b/spec/commands/decidim/vocdoni/admin/create_internal_census_spec.rb index eece2d5a..e299c339 100644 --- a/spec/commands/decidim/vocdoni/admin/create_internal_census_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/create_internal_census_spec.rb @@ -8,20 +8,20 @@ module Admin describe CreateInternalCensus do subject { described_class.new(form, election) } - let(:organization) { create(:organization, available_authorizations: available_authorizations) } + let(:organization) { create(:organization, available_authorizations:) } let!(:available_authorizations) { verification_types + another_verification_types } let!(:election) { create(:vocdoni_election) } let(:form) { CensusPermissionsForm.from_params(params).with_context(current_organization: organization) } let(:verification_types) { ["id_document_handler"] } let(:invalid_verification_types) { ["invalid_handler"] } let(:another_verification_types) { ["another_handler"] } - let(:verified_user) { create(:user, :confirmed, organization: organization) } - let(:verified_user_second) { create(:user, :confirmed, organization: organization) } + let(:verified_user) { create(:user, :confirmed, organization:) } + let(:verified_user_second) { create(:user, :confirmed, organization:) } let!(:authorization) { create(:authorization, user: verified_user, name: "id_document_handler") } let!(:authorization_second) { create(:authorization, user: verified_user_second, name: "id_document_handler") } describe "when the form is valid" do - let(:params) { { verification_types: verification_types } } + let(:params) { { verification_types: } } it "creates voters and updates the election" do expect { subject.call }.to change(Decidim::Vocdoni::Voter, :count).by(2) diff --git a/spec/commands/decidim/vocdoni/admin/create_question_spec.rb b/spec/commands/decidim/vocdoni/admin/create_question_spec.rb index d42c78df..02f9ed2a 100644 --- a/spec/commands/decidim/vocdoni/admin/create_question_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/create_question_spec.rb @@ -8,8 +8,8 @@ let(:organization) { current_component.organization } let(:participatory_process) { current_component.participatory_space } let(:current_component) { election.component } - let(:election) { create :vocdoni_election } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:election) { create(:vocdoni_election) } + let(:user) { create(:user, :admin, :confirmed, organization:) } let(:form) do double( invalid?: invalid, @@ -17,9 +17,9 @@ description: { en: "description" }, weight: 10, current_user: user, - current_component: current_component, + current_component:, current_organization: organization, - election: election + election: ) end let(:invalid) { false } @@ -37,7 +37,7 @@ expect(question.weight).to eq(10) end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:create!) .with( @@ -63,7 +63,7 @@ end context "when the election is ongoing" do - let(:election) { create :vocdoni_election, :ongoing } + let(:election) { create(:vocdoni_election, :ongoing) } it "is not valid" do expect { subject.call }.to broadcast(:election_ongoing) diff --git a/spec/commands/decidim/vocdoni/admin/create_wallet_spec.rb b/spec/commands/decidim/vocdoni/admin/create_wallet_spec.rb index 430e24cb..6e82b734 100644 --- a/spec/commands/decidim/vocdoni/admin/create_wallet_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/create_wallet_spec.rb @@ -5,9 +5,9 @@ describe Decidim::Vocdoni::Admin::CreateWallet do subject { described_class.new(user) } - let(:organization) { create :organization, available_locales: [:en, :ca, :es], default_locale: :en } - let(:user) { create :user, :admin, :confirmed, organization: organization } - let(:wallet) { Decidim::Vocdoni::Wallet.find_by(organization: organization) } + let(:organization) { create(:organization, available_locales: [:en, :ca, :es], default_locale: :en) } + let(:user) { create(:user, :admin, :confirmed, organization:) } + let(:wallet) { Decidim::Vocdoni::Wallet.find_by(organization:) } it "creates the wallet" do expect { subject.call }.to change(Decidim::Vocdoni::Wallet, :count).by(1) @@ -24,7 +24,7 @@ first = wallet.private_key wallet.destroy described_class.new(user).call - expect(Decidim::Vocdoni::Wallet.find_by(organization: organization).private_key).to eq first + expect(Decidim::Vocdoni::Wallet.find_by(organization:).private_key).to eq first end it "two equal private keys cannot be stored" do @@ -32,7 +32,7 @@ expect { subject.call }.to raise_error(ActiveRecord::RecordInvalid) end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:create!) .with( diff --git a/spec/commands/decidim/vocdoni/admin/destroy_answer_spec.rb b/spec/commands/decidim/vocdoni/admin/destroy_answer_spec.rb index befbc961..f70e2e0f 100644 --- a/spec/commands/decidim/vocdoni/admin/destroy_answer_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/destroy_answer_spec.rb @@ -5,18 +5,18 @@ describe Decidim::Vocdoni::Admin::DestroyAnswer do subject(:command) { described_class.new(answer, user) } - let(:election) { create :vocdoni_election } - let(:question) { create :vocdoni_question, election: election } - let!(:answer) { create :vocdoni_election_answer, question: question } + let(:election) { create(:vocdoni_election) } + let(:question) { create(:vocdoni_question, election:) } + let!(:answer) { create(:vocdoni_election_answer, question:) } let(:component) { election.component } let(:organization) { component.organization } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:user) { create(:user, :admin, :confirmed, organization:) } it "destroys the answer" do expect { subject.call }.to change(Decidim::Vocdoni::Answer, :count).by(-1) end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:perform_action!) .with(:delete, answer, user, visibility: "all") @@ -29,7 +29,7 @@ end context "when the election is ongoing" do - let(:election) { create :vocdoni_election, :ongoing } + let(:election) { create(:vocdoni_election, :ongoing) } it "is not valid" do expect { subject.call }.to broadcast(:invalid) diff --git a/spec/commands/decidim/vocdoni/admin/destroy_election_spec.rb b/spec/commands/decidim/vocdoni/admin/destroy_election_spec.rb index 1f857902..db7a5096 100644 --- a/spec/commands/decidim/vocdoni/admin/destroy_election_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/destroy_election_spec.rb @@ -5,15 +5,15 @@ describe Decidim::Vocdoni::Admin::DestroyElection do subject { described_class.new(election, user) } - let!(:election) { create :vocdoni_election } + let!(:election) { create(:vocdoni_election) } let(:organization) { election.component.organization } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:user) { create(:user, :admin, :confirmed, organization:) } it "destroys the election" do expect { subject.call }.to change(Decidim::Vocdoni::Election, :count).by(-1) end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:perform_action!) .with(:delete, election, user, visibility: "all") @@ -26,7 +26,7 @@ end context "when the election is ongoing" do - let(:election) { create :vocdoni_election, :ongoing } + let(:election) { create(:vocdoni_election, :ongoing) } it "is not valid" do expect { subject.call }.to broadcast(:invalid) diff --git a/spec/commands/decidim/vocdoni/admin/destroy_question_spec.rb b/spec/commands/decidim/vocdoni/admin/destroy_question_spec.rb index d045bd25..53cdb3f4 100644 --- a/spec/commands/decidim/vocdoni/admin/destroy_question_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/destroy_question_spec.rb @@ -5,16 +5,16 @@ describe Decidim::Vocdoni::Admin::DestroyQuestion do subject { described_class.new(question, user) } - let(:election) { create :vocdoni_election } - let!(:question) { create :vocdoni_question, election: election } + let(:election) { create(:vocdoni_election) } + let!(:question) { create(:vocdoni_question, election:) } let(:organization) { election.component.organization } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:user) { create(:user, :admin, :confirmed, organization:) } it "destroys the question" do expect { subject.call }.to change(Decidim::Vocdoni::Question, :count).by(-1) end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:perform_action!) .with(:delete, question, user, visibility: "all") @@ -27,7 +27,7 @@ end context "when the election is ongoing" do - let(:election) { create :vocdoni_election, :ongoing } + let(:election) { create(:vocdoni_election, :ongoing) } it "is not valid" do expect { subject.call }.to broadcast(:invalid) diff --git a/spec/commands/decidim/vocdoni/admin/publish_election_spec.rb b/spec/commands/decidim/vocdoni/admin/publish_election_spec.rb index 87bca459..cc2e1349 100644 --- a/spec/commands/decidim/vocdoni/admin/publish_election_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/publish_election_spec.rb @@ -15,7 +15,7 @@ module Decidim::Vocdoni::Admin expect { subject.call }.to change(election, :published?).from(false).to(true) end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:perform_action!) .with(:publish, election, user, visibility: "all") @@ -27,7 +27,7 @@ module Decidim::Vocdoni::Admin end it "fires an event" do - create :follow, followable: participatory_process, user: user + create(:follow, followable: participatory_process, user:) expect(Decidim::EventsManager) .to receive(:publish) diff --git a/spec/commands/decidim/vocdoni/admin/save_results_spec.rb b/spec/commands/decidim/vocdoni/admin/save_results_spec.rb index 71649c6b..e25ac63b 100644 --- a/spec/commands/decidim/vocdoni/admin/save_results_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/save_results_spec.rb @@ -5,19 +5,21 @@ describe Decidim::Vocdoni::Admin::SaveResults do subject { described_class.new(form) } - let(:election) { create :vocdoni_election } - let(:question1) { create :vocdoni_question, election: election, weight: 1 } - let!(:answer11) { create :vocdoni_election_answer, question: question1, value: 1 } - let!(:answer12) { create :vocdoni_election_answer, question: question1, value: 0 } - let(:question2) { create :vocdoni_question, election: election, weight: 0 } - let!(:answer21) { create :vocdoni_election_answer, question: question2, value: 0 } - let!(:answer22) { create :vocdoni_election_answer, question: question2, value: 1 } + # rubocop:disable RSpec/IndexedLet + let(:election) { create(:vocdoni_election) } + let(:question1) { create(:vocdoni_question, election:, weight: 1) } + let!(:answer11) { create(:vocdoni_election_answer, question: question1, value: 1) } + let!(:answer12) { create(:vocdoni_election_answer, question: question1, value: 0) } + let(:question2) { create(:vocdoni_question, election:, weight: 0) } + let!(:answer21) { create(:vocdoni_election_answer, question: question2, value: 0) } + let!(:answer22) { create(:vocdoni_election_answer, question: question2, value: 1) } + # rubocop:enable RSpec/IndexedLet let(:organization) { election.component.organization } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:user) { create(:user, :admin, :confirmed, organization:) } let(:form) do double( - election: election, + election:, current_user: user ) end @@ -67,7 +69,7 @@ expect(election.reload.status).to eq "results_published" end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:perform_action!) .with(:save_results, election, user, extra: { status: "results_published" }) diff --git a/spec/commands/decidim/vocdoni/admin/setup_election_spec.rb b/spec/commands/decidim/vocdoni/admin/setup_election_spec.rb index b76ae409..532a34d1 100644 --- a/spec/commands/decidim/vocdoni/admin/setup_election_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/setup_election_spec.rb @@ -5,20 +5,20 @@ describe Decidim::Vocdoni::Admin::SetupElection do subject { described_class.new(form) } - let(:organization) { create :organization, available_locales: [:en, :ca, :es], default_locale: :en } + let(:organization) { create(:organization, available_locales: [:en, :ca, :es], default_locale: :en) } let(:invalid) { false } - let(:participatory_process) { create :participatory_process, organization: organization } - let(:current_component) { create :component, participatory_space: participatory_process, manifest_name: "elections" } - let(:user) { create :user, :admin, :confirmed, organization: organization } - let!(:election) { create :vocdoni_election, :complete } + let(:participatory_process) { create(:participatory_process, organization:) } + let(:current_component) { create(:component, participatory_space: participatory_process, manifest_name: "elections") } + let(:user) { create(:user, :admin, :confirmed, organization:) } + let!(:election) { create(:vocdoni_election, :complete) } let(:vocdoni_election_id) { "12345" } let(:form) do double( invalid?: invalid, - election: election, - vocdoni_election_id: vocdoni_election_id, + election:, + vocdoni_election_id:, current_user: user, - current_component: current_component, + current_component:, current_organization: organization ) end @@ -29,7 +29,7 @@ expect { subject.call }.to change { Decidim::Vocdoni::Election.last.status }.from(nil).to("created") end - it "logs the performed action", versioning: true do + it "logs the performed action", :versioning do expect(Decidim.traceability) .to receive(:perform_action!) .with(:setup, election, user, visibility: "all") diff --git a/spec/commands/decidim/vocdoni/admin/unpublish_election_spec.rb b/spec/commands/decidim/vocdoni/admin/unpublish_election_spec.rb index 493c869d..e87610b4 100644 --- a/spec/commands/decidim/vocdoni/admin/unpublish_election_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/unpublish_election_spec.rb @@ -15,7 +15,7 @@ module Decidim::Vocdoni::Admin expect { subject.call }.to change(election, :published?).from(true).to(false) end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:perform_action!) .with(:unpublish, election, user) diff --git a/spec/commands/decidim/vocdoni/admin/update_answer_spec.rb b/spec/commands/decidim/vocdoni/admin/update_answer_spec.rb index 2adfe3d5..d247c2f0 100644 --- a/spec/commands/decidim/vocdoni/admin/update_answer_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/update_answer_spec.rb @@ -5,12 +5,12 @@ describe Decidim::Vocdoni::Admin::UpdateAnswer do subject(:command) { described_class.new(form, answer) } - let(:election) { create :vocdoni_election } - let(:question) { create :vocdoni_question, election: election } - let(:answer) { create :vocdoni_election_answer, question: question } + let(:election) { create(:vocdoni_election) } + let(:question) { create(:vocdoni_question, election:) } + let(:answer) { create(:vocdoni_election_answer, question:) } let(:component) { election.component } let(:organization) { component.organization } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:user) { create(:user, :admin, :confirmed, organization:) } let(:form) do double( invalid?: invalid, @@ -18,8 +18,8 @@ title: { en: "title" }, description: { en: "description" }, weight: 10, - election: election, - question: question + election:, + question: ) end let(:invalid) { false } @@ -31,7 +31,7 @@ expect(answer.weight).to eq(10) end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:update!) .with(answer, user, hash_including(:title, :description, :weight), visibility: "all") @@ -52,7 +52,7 @@ end context "when the election is ongoing" do - let(:election) { create :vocdoni_election, :ongoing } + let(:election) { create(:vocdoni_election, :ongoing) } it "is not valid" do expect { subject.call }.to broadcast(:invalid) diff --git a/spec/commands/decidim/vocdoni/admin/update_election_calendar_spec.rb b/spec/commands/decidim/vocdoni/admin/update_election_calendar_spec.rb index 46f6245a..54da8700 100644 --- a/spec/commands/decidim/vocdoni/admin/update_election_calendar_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/update_election_calendar_spec.rb @@ -5,19 +5,19 @@ describe Decidim::Vocdoni::Admin::UpdateElectionCalendar do subject { described_class.new(form, election) } - let(:election) { create :vocdoni_election } + let(:election) { create(:vocdoni_election) } let(:organization) { election.component.organization } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:user) { create(:user, :admin, :confirmed, organization:) } let(:form) do double( invalid?: invalid, current_user: user, - start_time: start_time, - end_time: end_time, - manual_start: manual_start, + start_time:, + end_time:, + manual_start:, interruptible: true, dynamic_census: false, - result_type: result_type, + result_type:, anonymous: false ) end @@ -40,7 +40,7 @@ expect(election.election_type.fetch("anonymous")).to be_falsy end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:update!).with(election, user, hash_including(:start_time, :end_time, { election_type: { auto_start: true, anonymous: false, dynamic_census: false, interruptible: true, secret_until_the_end: (result_type == "after_voting") } }), visibility: "all").and_call_original diff --git a/spec/commands/decidim/vocdoni/admin/update_election_spec.rb b/spec/commands/decidim/vocdoni/admin/update_election_spec.rb index e96d23ec..d373dbe0 100644 --- a/spec/commands/decidim/vocdoni/admin/update_election_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/update_election_spec.rb @@ -5,9 +5,9 @@ describe Decidim::Vocdoni::Admin::UpdateElection do subject { described_class.new(form, election) } - let(:election) { create :vocdoni_election } + let(:election) { create(:vocdoni_election) } let(:organization) { election.component.organization } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:user) { create(:user, :admin, :confirmed, organization:) } let(:form) do double( invalid?: invalid, @@ -31,7 +31,7 @@ expect(translated(election.description)).to eq "description" end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:update!) .with(election, user, hash_including(:title, :description), visibility: "all") diff --git a/spec/commands/decidim/vocdoni/admin/update_election_status_spec.rb b/spec/commands/decidim/vocdoni/admin/update_election_status_spec.rb index 45b7b3fb..c165ef43 100644 --- a/spec/commands/decidim/vocdoni/admin/update_election_status_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/update_election_status_spec.rb @@ -5,15 +5,15 @@ describe Decidim::Vocdoni::Admin::UpdateElectionStatus do subject { described_class.new(form) } - let(:election) { create :vocdoni_election, status: :vote } + let(:election) { create(:vocdoni_election, status: :vote) } let(:organization) { election.component.organization } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:user) { create(:user, :admin, :confirmed, organization:) } let(:form) do double( invalid?: invalid, current_user: user, status: "paused", - election: election + election: ) end let(:invalid) { false } @@ -38,7 +38,7 @@ expect(election.status).to eq "paused" end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:perform_action!) .with(:change_election_status, election, user) diff --git a/spec/commands/decidim/vocdoni/admin/update_question_spec.rb b/spec/commands/decidim/vocdoni/admin/update_question_spec.rb index b1fceaa7..85f826f4 100644 --- a/spec/commands/decidim/vocdoni/admin/update_question_spec.rb +++ b/spec/commands/decidim/vocdoni/admin/update_question_spec.rb @@ -5,10 +5,10 @@ describe Decidim::Vocdoni::Admin::UpdateQuestion do subject { described_class.new(form, question) } - let(:election) { create :vocdoni_election } - let(:question) { create :vocdoni_question, election: election } + let(:election) { create(:vocdoni_election) } + let(:question) { create(:vocdoni_question, election:) } let(:organization) { election.component.organization } - let(:user) { create :user, :admin, :confirmed, organization: organization } + let(:user) { create(:user, :admin, :confirmed, organization:) } let(:form) do double( invalid?: invalid, @@ -16,7 +16,7 @@ title: { en: "title" }, description: { en: "description" }, weight: 10, - election: election + election: ) end let(:invalid) { false } @@ -28,7 +28,7 @@ expect(question.weight).to eq(10) end - it "traces the action", versioning: true do + it "traces the action", :versioning do expect(Decidim.traceability) .to receive(:update!) .with(question, user, hash_including(:title, :weight), visibility: "all") @@ -49,7 +49,7 @@ end context "when the election is ongoing" do - let(:election) { create :vocdoni_election, :ongoing } + let(:election) { create(:vocdoni_election, :ongoing) } it "is not valid" do expect { subject.call }.to broadcast(:invalid) diff --git a/spec/controllers/decidim/vocdoni/admin/answers_controller_spec.rb b/spec/controllers/decidim/vocdoni/admin/answers_controller_spec.rb index 245987d3..64dda8fc 100644 --- a/spec/controllers/decidim/vocdoni/admin/answers_controller_spec.rb +++ b/spec/controllers/decidim/vocdoni/admin/answers_controller_spec.rb @@ -5,7 +5,7 @@ module Decidim module Vocdoni module Admin - describe AnswersController, type: :controller do + describe AnswersController do routes { Decidim::Vocdoni::AdminEngine.routes } let(:user) { create(:user, :confirmed, :admin, organization: component.organization) } @@ -20,9 +20,9 @@ module Admin describe "PATCH update" do let(:datetime_format) { I18n.t("time.formats.decidim_short") } let(:component) { create(:vocdoni_component) } - let(:election) { create(:vocdoni_election, component: component) } - let(:question) { create(:vocdoni_question, election: election) } - let(:answer) { create(:vocdoni_election_answer, question: question) } + let(:election) { create(:vocdoni_election, component:) } + let(:question) { create(:vocdoni_question, election:) } + let(:answer) { create(:vocdoni_election_answer, question:) } let(:answer_title) { answer.title } let(:answer_params) do { @@ -44,7 +44,7 @@ module Admin it "updates the election" do allow(controller).to receive(:election_question_answers_path).and_return("/answers") - patch :update, params: params + patch(:update, params:) expect(flash[:notice]).not_to be_empty expect(response).to have_http_status(:found) @@ -53,10 +53,10 @@ module Admin context "when the existing election has photos and there are other errors on the form" do include_context "with controller rendering the view" do let(:answer_title) { { en: "" } } - let(:answer) { create(:vocdoni_election_answer, :with_photos, question: question) } + let(:answer) { create(:vocdoni_election_answer, :with_photos, question:) } it "displays the editing form with errors" do - patch :update, params: params + patch(:update, params:) expect(flash[:alert]).not_to be_empty expect(response).to have_http_status(:ok) diff --git a/spec/controllers/decidim/vocdoni/admin/election_calendar_controller_spec.rb b/spec/controllers/decidim/vocdoni/admin/election_calendar_controller_spec.rb index 389b1186..edb03346 100644 --- a/spec/controllers/decidim/vocdoni/admin/election_calendar_controller_spec.rb +++ b/spec/controllers/decidim/vocdoni/admin/election_calendar_controller_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -describe Decidim::Vocdoni::Admin::ElectionCalendarController, type: :controller do +describe Decidim::Vocdoni::Admin::ElectionCalendarController do routes { Decidim::Vocdoni::AdminEngine.routes } let(:user) { create(:user, :confirmed, :admin, organization: component.organization) } @@ -17,7 +17,7 @@ describe "PATCH update" do let(:datetime_format) { I18n.t("time.formats.decidim_short") } let(:component) { create(:vocdoni_component) } - let(:election) { create(:vocdoni_election, component: component) } + let(:election) { create(:vocdoni_election, component:) } let(:election_params) do { start_time: election.start_time.strftime(datetime_format), @@ -38,7 +38,7 @@ it "updates the election" do allow(controller).to receive(:publish_page_election_path).with(election).and_return("/elections/#{election.id}/publish_page") - patch :update, params: params + patch(:update, params:) expect(response).to have_http_status(:found) end diff --git a/spec/controllers/decidim/vocdoni/admin/elections_controller_spec.rb b/spec/controllers/decidim/vocdoni/admin/elections_controller_spec.rb index d9c83a64..3edae45d 100644 --- a/spec/controllers/decidim/vocdoni/admin/elections_controller_spec.rb +++ b/spec/controllers/decidim/vocdoni/admin/elections_controller_spec.rb @@ -2,12 +2,12 @@ require "spec_helper" -describe Decidim::Vocdoni::Admin::ElectionsController, type: :controller do +describe Decidim::Vocdoni::Admin::ElectionsController do routes { Decidim::Vocdoni::AdminEngine.routes } let(:user) { create(:user, :confirmed, :admin, organization: component.organization) } let(:component) { create(:vocdoni_component) } - let(:election) { create(:vocdoni_election, component: component) } + let(:election) { create(:vocdoni_election, component:) } before do request.env["decidim.current_organization"] = component.organization @@ -72,7 +72,7 @@ it "updates the election" do allow(controller).to receive(:elections_path).and_return("/elections") - patch :update, params: params + patch(:update, params:) expect(flash[:notice]).not_to be_empty expect(response).to have_http_status(:found) @@ -81,10 +81,10 @@ context "when the existing election has photos and there are other errors on the form" do include_context "with controller rendering the view" do let(:election_title) { { en: "" } } - let(:election) { create(:vocdoni_election, :with_photos, component: component) } + let(:election) { create(:vocdoni_election, :with_photos, component:) } it "displays the editing form with errors" do - patch :update, params: params + patch(:update, params:) expect(flash[:alert]).not_to be_empty expect(response).to have_http_status(:ok) diff --git a/spec/controllers/decidim/vocdoni/admin/wallets_controller_spec.rb b/spec/controllers/decidim/vocdoni/admin/wallets_controller_spec.rb index 87c1c639..61549a17 100644 --- a/spec/controllers/decidim/vocdoni/admin/wallets_controller_spec.rb +++ b/spec/controllers/decidim/vocdoni/admin/wallets_controller_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -describe Decidim::Vocdoni::Admin::WalletsController, type: :controller do +describe Decidim::Vocdoni::Admin::WalletsController do routes { Decidim::Vocdoni::AdminEngine.routes } let(:user) { create(:user, :confirmed, :admin) } @@ -19,7 +19,7 @@ let(:params) { { component_id: component.id } } it "renders the empty form" do - get :new, params: params + get(:new, params:) expect(response).to have_http_status(:ok) expect(subject).to render_template(:new) end @@ -31,19 +31,19 @@ { current_organization: component.organization, current_user: user, - private_key: private_key + private_key: } end it "creates a wallet" do - post :create, params: params + post(:create, params:) expect(flash[:notice]).not_to be_empty expect(response).to have_http_status(:found) end it "redirects to that components' path" do - post :create, params: params + post(:create, params:) expect(response.location).to match %r{/manage/$} end @@ -51,7 +51,7 @@ context "when there's redirect_back in the session" do it "redirects to that elections' steps path" do session[:redirect_back] = 1 - post :create, params: params + post(:create, params:) expect(response.location).to match %r{/manage/elections/1/steps$} end diff --git a/spec/controllers/decidim/vocdoni/elections_controller_spec.rb b/spec/controllers/decidim/vocdoni/elections_controller_spec.rb index d9dde331..533e845c 100644 --- a/spec/controllers/decidim/vocdoni/elections_controller_spec.rb +++ b/spec/controllers/decidim/vocdoni/elections_controller_spec.rb @@ -2,11 +2,11 @@ require "spec_helper" -describe Decidim::Vocdoni::ElectionsController, type: :controller do +describe Decidim::Vocdoni::ElectionsController do routes { Decidim::Vocdoni::Engine.routes } let(:component) { create(:vocdoni_component) } - let(:election) { create(:vocdoni_election, :published, component: component) } + let(:election) { create(:vocdoni_election, :published, component:) } let(:user) { create(:user, :confirmed, organization: component.organization) } let!(:wallet) { create(:vocdoni_wallet, organization: component.organization, private_key: Faker::Blockchain::Ethereum.address) } let(:vocdoni_client) { double("Api") } @@ -22,7 +22,7 @@ context "when election is not secret until the end and has data and is ongoing" do let(:election) do - create(:vocdoni_election, :published, :ongoing, component: component, election_type: { "secret_until_the_end" => false }) + create(:vocdoni_election, :published, :ongoing, component:, election_type: { "secret_until_the_end" => false }) end before do @@ -41,7 +41,7 @@ it "renders correct json" do get :show, params: { id: election.id }, format: :json - expect(JSON.parse(response.body)).to eq({ "election_data" => nil }) + expect(response.parsed_body).to eq({ "election_data" => nil }) end end end @@ -62,7 +62,7 @@ describe "#election_metadata" do context "when election is ongoing and not secret until the end" do let(:election) do - create(:vocdoni_election, :published, :ongoing, component: component, + create(:vocdoni_election, :published, :ongoing, component:, election_type: { "secret_until_the_end" => false }, vocdoni_election_id: "123") end @@ -83,7 +83,7 @@ context "when election is not ongoing or is secret until the end" do let(:election) do - create(:vocdoni_election, :published, component: component, + create(:vocdoni_election, :published, component:, election_type: { "secret_until_the_end" => true }) end diff --git a/spec/controllers/decidim/vocdoni/votes_controller_spec.rb b/spec/controllers/decidim/vocdoni/votes_controller_spec.rb index a1ebf72b..b52fa478 100644 --- a/spec/controllers/decidim/vocdoni/votes_controller_spec.rb +++ b/spec/controllers/decidim/vocdoni/votes_controller_spec.rb @@ -2,11 +2,11 @@ require "spec_helper" -describe Decidim::Vocdoni::VotesController, type: :controller do +describe Decidim::Vocdoni::VotesController do routes { Decidim::Vocdoni::Engine.routes } let(:component) { create(:vocdoni_component) } - let(:election) { create(:vocdoni_election, :published, component: component) } + let(:election) { create(:vocdoni_election, :published, component:) } let(:user) { create(:user, :confirmed, organization: component.organization) } before do @@ -30,7 +30,7 @@ end describe "POST check_verification" do - let(:voter) { create(:vocdoni_voter, email: user.email, election: election) } + let(:voter) { create(:vocdoni_voter, email: user.email, election:) } it "returns verification status" do post :check_verification, params: { election_id: election.id } @@ -40,8 +40,7 @@ context "when user is verified and is in the Vocdoni census" do before do - allow(controller).to receive(:voter_verified?).and_return(true) - allow(controller).to receive(:voter).and_return(voter) + allow(controller).to receive_messages(voter_verified?: true, voter:) end it "returns verification status" do @@ -53,8 +52,7 @@ context "when user is verified and is not in the Vocdoni census" do before do - allow(controller).to receive(:voter_verified?).and_return(false) - allow(controller).to receive(:voter).and_return(voter) + allow(controller).to receive_messages(voter_verified?: false, voter:) end it "returns verification status" do diff --git a/spec/events/decidim/vocdoni/election_published_event_spec.rb b/spec/events/decidim/vocdoni/election_published_event_spec.rb index 3b7791a1..2f66059c 100644 --- a/spec/events/decidim/vocdoni/election_published_event_spec.rb +++ b/spec/events/decidim/vocdoni/election_published_event_spec.rb @@ -7,8 +7,8 @@ let(:event_name) { "decidim.events.vocdoni.election_published" } let(:participatory_space) { create(:participatory_process, :with_steps, title: { en: "A participatory process" }) } - let(:component) { create(:vocdoni_component, participatory_space: participatory_space) } - let(:resource) { create(:vocdoni_election, component: component) } + let(:component) { create(:vocdoni_component, participatory_space:) } + let(:resource) { create(:vocdoni_election, component:) } let(:participatory_space_title) { resource.participatory_space.title["en"] } let(:resource_title) { resource.title["en"] } diff --git a/spec/forms/decidim/vocdoni/admin/answer_form_spec.rb b/spec/forms/decidim/vocdoni/admin/answer_form_spec.rb index f060bd40..d1056f4b 100644 --- a/spec/forms/decidim/vocdoni/admin/answer_form_spec.rb +++ b/spec/forms/decidim/vocdoni/admin/answer_form_spec.rb @@ -9,21 +9,21 @@ { current_organization: component.organization, current_component: component, - election: election, - question: question + election:, + question: } end let(:election) { question.election } - let(:question) { create :vocdoni_question } + let(:question) { create(:vocdoni_question) } let(:component) { election.component } let(:title) { Decidim::Faker::Localized.sentence(word_count: 3) } let(:description) { Decidim::Faker::Localized.sentence(word_count: 3) } let(:weight) { 10 } let(:attributes) do { - title: title, - description: description, - weight: weight + title:, + description:, + weight: } end diff --git a/spec/forms/decidim/vocdoni/admin/census_data_form_spec.rb b/spec/forms/decidim/vocdoni/admin/census_data_form_spec.rb index d0077219..55a06260 100644 --- a/spec/forms/decidim/vocdoni/admin/census_data_form_spec.rb +++ b/spec/forms/decidim/vocdoni/admin/census_data_form_spec.rb @@ -4,7 +4,7 @@ module Decidim::Vocdoni::Admin describe CensusDataForm do - subject { described_class.from_params(file: file) } + subject { described_class.from_params(file:) } describe "#data" do context "when the file is in invalid format" do diff --git a/spec/forms/decidim/vocdoni/admin/census_permissions_form_spec.rb b/spec/forms/decidim/vocdoni/admin/census_permissions_form_spec.rb index 0cc1180e..e0ed710b 100644 --- a/spec/forms/decidim/vocdoni/admin/census_permissions_form_spec.rb +++ b/spec/forms/decidim/vocdoni/admin/census_permissions_form_spec.rb @@ -4,24 +4,24 @@ module Decidim::Vocdoni::Admin describe CensusPermissionsForm do - subject { described_class.from_params(verification_types: verification_types).with_context(context) } + subject { described_class.from_params(verification_types:).with_context(context) } let(:verification_types) { %w(id_documents postal_letter) } let(:users) { create_list(:user, 5, :confirmed, organization: current_organization) } let(:other_users) { create_list(:user, 3, :confirmed, organization: current_organization) } let(:users_other_org) { create_list(:user, 2, :confirmed) } let(:current_organization) { create(:organization) } - let(:context) { double("Context", current_organization: current_organization) } + let(:context) { double("Context", current_organization:) } before do users.each do |user| - create(:authorization, name: verification_types[0], user: user) - create(:authorization, name: verification_types[1], user: user) + create(:authorization, name: verification_types[0], user:) + create(:authorization, name: verification_types[1], user:) end users_other_org.each do |user| - create(:authorization, name: verification_types[0], user: user) - create(:authorization, name: verification_types[1], user: user) + create(:authorization, name: verification_types[0], user:) + create(:authorization, name: verification_types[1], user:) end allow(current_organization).to receive(:available_authorizations).and_return([verification_types[0], verification_types[1]]) diff --git a/spec/forms/decidim/vocdoni/admin/election_calendar_form_spec.rb b/spec/forms/decidim/vocdoni/admin/election_calendar_form_spec.rb index 12507842..888f2232 100644 --- a/spec/forms/decidim/vocdoni/admin/election_calendar_form_spec.rb +++ b/spec/forms/decidim/vocdoni/admin/election_calendar_form_spec.rb @@ -9,20 +9,20 @@ let(:context) do { current_organization: organization, - current_component: current_component + current_component: } end - let(:participatory_process) { create :participatory_process, organization: organization } - let(:current_component) { create :vocdoni_component, participatory_space: participatory_process } + let(:participatory_process) { create(:participatory_process, organization:) } + let(:current_component) { create(:vocdoni_component, participatory_space: participatory_process) } let(:start_time) { 1.day.from_now } let(:end_time) { 3.days.from_now } let(:manual_start) { false } let(:attributes) do { - start_time: start_time, - end_time: end_time, - result_type: result_type, - manual_start: manual_start + start_time:, + end_time:, + result_type:, + manual_start: } end let(:result_type) { "after_voting" } diff --git a/spec/forms/decidim/vocdoni/admin/election_form_spec.rb b/spec/forms/decidim/vocdoni/admin/election_form_spec.rb index ad4710e5..dd148c6e 100644 --- a/spec/forms/decidim/vocdoni/admin/election_form_spec.rb +++ b/spec/forms/decidim/vocdoni/admin/election_form_spec.rb @@ -9,18 +9,18 @@ let(:context) do { current_organization: organization, - current_component: current_component + current_component: } end - let(:participatory_process) { create :participatory_process, organization: organization } - let(:current_component) { create :vocdoni_component, participatory_space: participatory_process } + let(:participatory_process) { create(:participatory_process, organization:) } + let(:current_component) { create(:vocdoni_component, participatory_space: participatory_process) } let(:title) { Decidim::Faker::Localized.sentence(word_count: 3) } let(:description) { Decidim::Faker::Localized.sentence(word_count: 3) } let(:attachment_params) { nil } let(:attributes) do { - title: title, - description: description, + title:, + description:, attachment: attachment_params } end @@ -54,8 +54,8 @@ it "adds an error to the `:attachment` field" do expect(subject).not_to be_valid - expect(subject.errors.full_messages).to match_array(["Title en can't be blank", "Attachment Needs to be reattached"]) - expect(subject.errors.attribute_names).to match_array([:title_en, :attachment]) + expect(subject.errors.full_messages).to contain_exactly("Title en cannot be blank", "Attachment Needs to be reattached") + expect(subject.errors.attribute_names).to contain_exactly(:title_en, :attachment) end end end diff --git a/spec/forms/decidim/vocdoni/admin/election_status_form_spec.rb b/spec/forms/decidim/vocdoni/admin/election_status_form_spec.rb index abf4cbc2..3d53ecfd 100644 --- a/spec/forms/decidim/vocdoni/admin/election_status_form_spec.rb +++ b/spec/forms/decidim/vocdoni/admin/election_status_form_spec.rb @@ -9,12 +9,12 @@ let(:status) { "paused" } let(:context) do { - election: election + election: } end let(:attributes) do { - status: status + status: } end diff --git a/spec/forms/decidim/vocdoni/admin/question_form_spec.rb b/spec/forms/decidim/vocdoni/admin/question_form_spec.rb index 39412fd4..6c050d29 100644 --- a/spec/forms/decidim/vocdoni/admin/question_form_spec.rb +++ b/spec/forms/decidim/vocdoni/admin/question_form_spec.rb @@ -9,19 +9,19 @@ { current_organization: component.organization, current_component: component, - election: election + election: } end - let(:election) { create :vocdoni_election } + let(:election) { create(:vocdoni_election) } let(:component) { election.component } let(:title) { Decidim::Faker::Localized.sentence(word_count: 3) } let(:description) { Decidim::Faker::Localized.sentence(word_count: 3) } let(:weight) { 10 } let(:attributes) do { - title: title, - description: description, - weight: weight + title:, + description:, + weight: } end diff --git a/spec/forms/decidim/vocdoni/admin/setup_form_spec.rb b/spec/forms/decidim/vocdoni/admin/setup_form_spec.rb index cc904428..5854cd9b 100644 --- a/spec/forms/decidim/vocdoni/admin/setup_form_spec.rb +++ b/spec/forms/decidim/vocdoni/admin/setup_form_spec.rb @@ -9,12 +9,12 @@ { current_organization: component.organization, current_component: component, - election: election, + election:, current_step: "create_election" } end - let(:election) { create :vocdoni_election, :ready_for_setup, :auto_start, start_time: 1.day.from_now, component: component } - let(:component) { create :vocdoni_component } + let(:election) { create(:vocdoni_election, :ready_for_setup, :auto_start, start_time: 1.day.from_now, component:) } + let(:component) { create(:vocdoni_component) } let(:attributes) { {} } let(:router) { Decidim::EngineRouter.admin_proxy(election.component) } @@ -43,9 +43,9 @@ end context "when the election is not ready for the setup" do - let(:election) { create :vocdoni_election, :auto_start, start_time: 10.days.ago } + let(:election) { create(:vocdoni_election, :auto_start, start_time: 10.days.ago) } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } it "shows errors" do subject.valid? @@ -78,10 +78,10 @@ end context "when there are no answers created" do - let(:election) { create :vocdoni_election, :published } - let!(:question) { create :vocdoni_question, election: election, weight: 1 } + let(:election) { create(:vocdoni_election, :published) } + let!(:question) { create(:vocdoni_question, election:, weight: 1) } - it { is_expected.to be_invalid } + it { is_expected.not_to be_valid } it "shows errors" do subject.valid? @@ -94,7 +94,7 @@ end context "when manual start" do - let(:election) { create :vocdoni_election, :ready_for_setup, :manual_start, component: component } + let(:election) { create(:vocdoni_election, :ready_for_setup, :manual_start, component:) } it { is_expected.to be_valid } diff --git a/spec/helpers/decidim/vocdoni/admin/steps_helper_spec.rb b/spec/helpers/decidim/vocdoni/admin/steps_helper_spec.rb index a3b02042..9a44932f 100644 --- a/spec/helpers/decidim/vocdoni/admin/steps_helper_spec.rb +++ b/spec/helpers/decidim/vocdoni/admin/steps_helper_spec.rb @@ -79,11 +79,11 @@ subject { helper.fix_it_button_with_icon(link, icon) } let(:link) { "/admin/participatory_processes/123/elections/2/edit/" } - let(:icon) { "wrench" } + let(:icon) { "tools-line" } it "generates the fix it button with icon" do - expect(subject).to have_link("Fix it", href: link, class: "button tiny") - expect(subject).to have_selector("svg.icon--wrench") + expect(subject).to have_link("Fix it", href: link, class: "button button__xs") + expect(subject).to have_css("svg[role='img'] use[href*='ri-tools-line']") end end end diff --git a/spec/helpers/decidim/vocdoni/admin/steps_wizard_helper_spec.rb b/spec/helpers/decidim/vocdoni/admin/steps_wizard_helper_spec.rb index f290ee75..b0be7da7 100644 --- a/spec/helpers/decidim/vocdoni/admin/steps_wizard_helper_spec.rb +++ b/spec/helpers/decidim/vocdoni/admin/steps_wizard_helper_spec.rb @@ -23,10 +23,12 @@ describe "#tab_link_class" do before do - allow(election).to receive(:ready_for_questions_form?).and_return(true) - allow(election).to receive(:ready_for_census_form?).and_return(true) - allow(election).to receive(:ready_for_calendar_form?).and_return(true) - allow(election).to receive(:ready_for_publish_form?).and_return(true) + allow(election).to receive_messages( + ready_for_questions_form?: true, + ready_for_census_form?: true, + ready_for_calendar_form?: true, + ready_for_publish_form?: true + ) end it 'returns an empty string for the "questions" tab with a present election' do diff --git a/spec/helpers/decidim/vocdoni/votes_helper_spec.rb b/spec/helpers/decidim/vocdoni/votes_helper_spec.rb index 854161eb..96450bfa 100644 --- a/spec/helpers/decidim/vocdoni/votes_helper_spec.rb +++ b/spec/helpers/decidim/vocdoni/votes_helper_spec.rb @@ -5,7 +5,7 @@ module Decidim module Vocdoni describe VotesHelper do - let(:question) { create :vocdoni_question, :complete, answers: 3 } + let(:question) { create(:vocdoni_question, :complete, answers: 3) } let(:helper) do Class.new(ActionView::Base) do @@ -54,7 +54,7 @@ module Vocdoni let(:votes_left) { 3 } it "returns the 'can_vote_again' message" do - expect(votes_left_message).to include(I18n.t("can_vote_again", scope: "decidim.vocdoni.votes.new", votes_left: votes_left)) + expect(votes_left_message).to include(I18n.t("can_vote_again", scope: "decidim.vocdoni.votes.new", votes_left:)) end end diff --git a/spec/jobs/decidim/vocdoni/admin/create_voter_wallets_job_spec.rb b/spec/jobs/decidim/vocdoni/admin/create_voter_wallets_job_spec.rb index 33dba897..7362b045 100644 --- a/spec/jobs/decidim/vocdoni/admin/create_voter_wallets_job_spec.rb +++ b/spec/jobs/decidim/vocdoni/admin/create_voter_wallets_job_spec.rb @@ -2,9 +2,9 @@ require "spec_helper" -RSpec.describe Decidim::Vocdoni::Admin::CreateVoterWalletsJob, type: :job do +RSpec.describe Decidim::Vocdoni::Admin::CreateVoterWalletsJob do let!(:election) { create(:vocdoni_election, :upcoming, :with_internal_census) } - let!(:voters) { create_list(:vocdoni_voter, 2, election: election, wallet_address: nil) } + let!(:voters) { create_list(:vocdoni_voter, 2, election:, wallet_address: nil) } let(:election_id) { election.id } let(:fake_wallet_address) { "0x1234567890abcdef1234567890abcdef12345678" } diff --git a/spec/jobs/decidim/vocdoni/admin/update_election_census_job_spec.rb b/spec/jobs/decidim/vocdoni/admin/update_election_census_job_spec.rb index b27f150e..74557357 100644 --- a/spec/jobs/decidim/vocdoni/admin/update_election_census_job_spec.rb +++ b/spec/jobs/decidim/vocdoni/admin/update_election_census_job_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe Decidim::Vocdoni::Admin::UpdateElectionCensusJob, type: :job do +RSpec.describe Decidim::Vocdoni::Admin::UpdateElectionCensusJob do subject { described_class.perform_later(election.id, non_voter_ids, user.id) } let!(:election) { create(:vocdoni_election, :upcoming, :with_internal_census) } @@ -12,7 +12,7 @@ before do non_voters.each do |nv| - create(:vocdoni_voter, email: nv.email, election: election, wallet_address: nil, in_vocdoni_census: false) + create(:vocdoni_voter, email: nv.email, election:, wallet_address: nil, in_vocdoni_census: false) end allow(Decidim::Vocdoni::VoterService).to receive(:verify_and_insert).and_call_original diff --git a/spec/lib/decidim/vocdoni/election_status_changer_spec.rb b/spec/lib/decidim/vocdoni/election_status_changer_spec.rb index 81a8077d..d2ee0d53 100644 --- a/spec/lib/decidim/vocdoni/election_status_changer_spec.rb +++ b/spec/lib/decidim/vocdoni/election_status_changer_spec.rb @@ -6,10 +6,10 @@ describe Decidim::Vocdoni::ElectionStatusChanger do subject { described_class.new } - let!(:new_election) { create(:vocdoni_election, status: status) } - let!(:upcoming_election) { create(:vocdoni_election, :upcoming, start_mode, status: status) } - let!(:ongoing_election) { create(:vocdoni_election, :ongoing, start_mode, start_time: 1.minute.ago, status: status) } - let!(:finished_election) { create(:vocdoni_election, :finished, start_mode, end_time: 1.minute.ago, status: status) } + let!(:new_election) { create(:vocdoni_election, status:) } + let!(:upcoming_election) { create(:vocdoni_election, :upcoming, start_mode, status:) } + let!(:ongoing_election) { create(:vocdoni_election, :ongoing, start_mode, start_time: 1.minute.ago, status:) } + let!(:finished_election) { create(:vocdoni_election, :finished, start_mode, end_time: 1.minute.ago, status:) } let(:status) { nil } let(:start_mode) { :auto_start } diff --git a/spec/lib/decidim/vocdoni/module_config_spec.rb b/spec/lib/decidim/vocdoni/module_config_spec.rb index f519a17b..3fbb6fd7 100644 --- a/spec/lib/decidim/vocdoni/module_config_spec.rb +++ b/spec/lib/decidim/vocdoni/module_config_spec.rb @@ -23,8 +23,8 @@ module Decidim let(:start_delay) { "33" } let(:reseller_name) { "Test reseller" } let(:reseller_email) { "test_reseller@example.org" } - let(:config) { JSON.parse cmd_capture("bin/rails runner 'puts Decidim::Vocdoni.config.to_json'", env: env) } - let(:endpoint_env) { cmd_capture("bin/rails runner 'puts Decidim::Vocdoni.api_endpoint_env'", env: env) } + let(:config) { JSON.parse cmd_capture("bin/rails runner 'puts Decidim::Vocdoni.config.to_json'", env:) } + let(:endpoint_env) { cmd_capture("bin/rails runner 'puts Decidim::Vocdoni.api_endpoint_env'", env:) } def cmd_capture(cmd, env: {}) Dir.chdir(test_app) do diff --git a/spec/models/decidim/vocdoni/answer_spec.rb b/spec/models/decidim/vocdoni/answer_spec.rb index d39cf7fd..f059f4c9 100644 --- a/spec/models/decidim/vocdoni/answer_spec.rb +++ b/spec/models/decidim/vocdoni/answer_spec.rb @@ -10,10 +10,10 @@ include_examples "resourceable" describe "#votes_percentage" do - subject(:answer1) { create(:vocdoni_election_answer, question: question, votes: 5) } + subject(:answer1) { create(:vocdoni_election_answer, question:, votes: 5) } let(:question) { create(:vocdoni_question) } - let!(:answer2) { create(:vocdoni_election_answer, question: question, votes: 10) } + let!(:answer2) { create(:vocdoni_election_answer, question:, votes: 10) } it "returns a percentage" do expect(subject.votes_percentage).to eq(33.33) @@ -24,10 +24,16 @@ end context "when there are multiple answers" do - let!(:answer3) { create(:vocdoni_election_answer, question: question, votes: 11) } - let!(:answer4) { create(:vocdoni_election_answer, question: question, votes: 22) } - let!(:answer5) { create(:vocdoni_election_answer, question: question, votes: 33) } - let!(:answer6) { create(:vocdoni_election_answer, question: question, votes: 1) } + let!(:answers) do + [ + { question:, votes: 11 }, + { question:, votes: 22 }, + { question:, votes: 33 }, + { question:, votes: 1 } + ].map do |attrs| + create(:vocdoni_election_answer, attrs) + end + end it "sums to 100" do expect(subject.question.answers.map(&:votes_percentage).sum).to eq(100) diff --git a/spec/models/decidim/vocdoni/csv_census/data_spec.rb b/spec/models/decidim/vocdoni/csv_census/data_spec.rb index 9727eb37..78b39c08 100644 --- a/spec/models/decidim/vocdoni/csv_census/data_spec.rb +++ b/spec/models/decidim/vocdoni/csv_census/data_spec.rb @@ -26,10 +26,7 @@ subject { described_class.new(valid_csv_path) } it "reads values correctly" do - expect(subject.values).to match_array([ - %w(john@example.org 123456), - %w(alice@example.org 987654) - ]) + expect(subject.values).to contain_exactly(%w(john@example.org 123456), %w(alice@example.org 987654)) end it "has no errors" do diff --git a/spec/models/decidim/vocdoni/election_spec.rb b/spec/models/decidim/vocdoni/election_spec.rb index ad3f6d1f..91323508 100644 --- a/spec/models/decidim/vocdoni/election_spec.rb +++ b/spec/models/decidim/vocdoni/election_spec.rb @@ -3,7 +3,7 @@ require "spec_helper" describe Decidim::Vocdoni::Election do - subject(:election) { build :vocdoni_election, status: status } + subject(:election) { build(:vocdoni_election, status:) } let(:status) { nil } @@ -36,13 +36,13 @@ it { is_expected.to be_secret_until_the_end } context "when is configured" do - subject(:election) { build :vocdoni_election, :configured } + subject(:election) { build(:vocdoni_election, :configured) } it { is_expected.not_to be_misconfigured } end context "when manual start" do - subject(:election) { build :vocdoni_election, :manual_start } + subject(:election) { build(:vocdoni_election, :manual_start) } it { is_expected.to be_manual_start } it { is_expected.not_to be_auto_start } @@ -54,7 +54,7 @@ end context "when automaic start" do - subject(:election) { build :vocdoni_election, :auto_start } + subject(:election) { build(:vocdoni_election, :auto_start) } it { is_expected.not_to be_manual_start } it { is_expected.to be_auto_start } @@ -66,14 +66,14 @@ end context "when it is ongoing" do - subject(:election) { build :vocdoni_election, :ongoing } + subject(:election) { build(:vocdoni_election, :ongoing) } it { is_expected.to be_started } it { is_expected.to be_ongoing } it { is_expected.not_to be_finished } context "and it doesn't have a status" do - subject(:election) { build :vocdoni_election, :finished, status: nil } + subject(:election) { build(:vocdoni_election, :finished, status: nil) } it { is_expected.not_to be_started } it { is_expected.not_to be_ongoing } @@ -82,14 +82,14 @@ end context "when it is finished" do - subject(:election) { build :vocdoni_election, :finished } + subject(:election) { build(:vocdoni_election, :finished) } it { is_expected.to be_started } it { is_expected.not_to be_ongoing } it { is_expected.to be_finished } context "and it has the old status" do - subject(:election) { build :vocdoni_election, :finished, status: "vote" } + subject(:election) { build(:vocdoni_election, :finished, status: "vote") } it { is_expected.to be_started } it { is_expected.not_to be_ongoing } @@ -97,7 +97,7 @@ end context "and it doesn't have a status" do - subject(:election) { build :vocdoni_election, :finished, status: nil } + subject(:election) { build(:vocdoni_election, :finished, status: nil) } it { is_expected.not_to be_started } it { is_expected.not_to be_ongoing } @@ -107,7 +107,7 @@ describe "with different status" do context "when it is paused" do - subject(:election) { build :vocdoni_election, :started, :paused } + subject(:election) { build(:vocdoni_election, :started, :paused) } it { is_expected.to be_started } it { is_expected.to be_paused } @@ -116,7 +116,7 @@ end context "when it is canceled" do - subject(:election) { build :vocdoni_election, :started, :canceled } + subject(:election) { build(:vocdoni_election, :started, :canceled) } it { is_expected.to be_started } it { is_expected.not_to be_ongoing } @@ -124,7 +124,7 @@ end context "when it is vote_ended" do - subject(:election) { build :vocdoni_election, :started, status: "vote_ended" } + subject(:election) { build(:vocdoni_election, :started, status: "vote_ended") } it { is_expected.to be_started } it { is_expected.not_to be_ongoing } @@ -132,7 +132,7 @@ end context "when it is results_published" do - subject(:election) { build :vocdoni_election, :started, status: "results_published" } + subject(:election) { build(:vocdoni_election, :started, status: "results_published") } it { is_expected.to be_started } it { is_expected.not_to be_ongoing } @@ -141,7 +141,7 @@ end describe "start time checks" do - subject(:election) { build(:vocdoni_election, start_time: start_time) } + subject(:election) { build(:vocdoni_election, start_time:) } let(:start_time) { 40.minutes.from_now } @@ -163,21 +163,21 @@ describe "#answers_have_values?" do subject { election.answers_have_values? } - let(:question) { create(:vocdoni_question, election: election) } - let!(:answer1) { create(:vocdoni_election_answer, question: question, value: 0) } - let!(:answer2) { create(:vocdoni_election_answer, question: question, value: 1) } + let(:question) { create(:vocdoni_question, election:) } + let!(:first_answer) { create(:vocdoni_election_answer, question:, value: 0) } + let!(:second_answer) { create(:vocdoni_election_answer, question:, value: 1) } it { is_expected.to be_truthy } context "when there answers have no values" do - let!(:answer1) { create(:vocdoni_election_answer, question: question, value: nil) } + let!(:first_answer) { create(:vocdoni_election_answer, question:, value: nil) } it { is_expected.to be_falsey } end end describe "#explorer_vote_url" do - subject(:election) { build :vocdoni_election, vocdoni_election_id: "12345" } + subject(:election) { build(:vocdoni_election, vocdoni_election_id: "12345") } before do allow(Decidim::Vocdoni).to receive(:explorer_vote_domain).and_return("example.org") @@ -241,10 +241,10 @@ end describe "#ready_for_census_form?" do - let(:question) { create(:vocdoni_question, election: election) } + let(:question) { create(:vocdoni_question, election:) } context "when minimum_answers? returns true" do - let!(:answers) { create_list(:vocdoni_election_answer, 2, question: question) } + let!(:answers) { create_list(:vocdoni_election_answer, 2, question:) } it "returns true" do expect(subject.ready_for_census_form?).to be true @@ -252,7 +252,7 @@ end context "when minimum_answers? returns false" do - let!(:answer) { create(:vocdoni_election_answer, question: question) } + let!(:answer) { create(:vocdoni_election_answer, question:) } it "returns false" do expect(subject.ready_for_census_form?).to be false @@ -264,8 +264,8 @@ context "when census is ready" do subject(:election) { build(:vocdoni_election, :with_census) } - let(:question) { create(:vocdoni_question, election: election) } - let!(:answers) { create_list(:vocdoni_election_answer, 2, question: question) } + let(:question) { create(:vocdoni_question, election:) } + let!(:answers) { create_list(:vocdoni_election_answer, 2, question:) } it "returns true" do expect(subject.ready_for_calendar_form?).to be true @@ -285,8 +285,8 @@ context "when ready for calendar form and times are set" do subject(:election) { build(:vocdoni_election, :with_census, status: :created) } - let(:question) { create(:vocdoni_question, election: election) } - let!(:answers) { create_list(:vocdoni_election_answer, 2, question: question) } + let(:question) { create(:vocdoni_question, election:) } + let!(:answers) { create_list(:vocdoni_election_answer, 2, question:) } it "returns true" do expect(subject.ready_for_publish_form?).to be true @@ -303,8 +303,8 @@ end describe "#build_answer_values!" do - let(:question) { create(:vocdoni_question, election: election) } - let!(:answers) { create_list(:vocdoni_election_answer, 2, question: question) } + let(:question) { create(:vocdoni_question, election:) } + let!(:answers) { create_list(:vocdoni_election_answer, 2, question:) } it "assigns a value to each answer" do expect { subject.build_answer_values! }.to change { question.answers.pluck(:value) }.from([nil, nil]).to([0, 1]) @@ -312,10 +312,10 @@ end describe "#to_vocdoni" do - let(:election) { create(:vocdoni_election, :with_photos, :simple, election_type: type, component: component, title: title, description: description) } - let!(:voter) { create(:vocdoni_voter, election: election, wallet_address: "0x0000000000000000000000000000000000000001") } + let(:election) { create(:vocdoni_election, :with_photos, :simple, election_type: type, component:, title:, description:) } + let!(:voter) { create(:vocdoni_voter, election:, wallet_address: "0x0000000000000000000000000000000000000001") } let(:component) { create(:vocdoni_component, participatory_space: participatory_process) } - let(:participatory_process) { create(:participatory_process, organization: organization) } + let(:participatory_process) { create(:participatory_process, organization:) } let(:organization) { create(:organization, enable_machine_translations: true) } let(:title) do { @@ -362,7 +362,7 @@ end context "when no attachments" do - let(:election) { create(:vocdoni_election, :simple, election_type: type, component: component, title: title, description: description) } + let(:election) { create(:vocdoni_election, :simple, election_type: type, component:, title:, description:) } it "returns the election as json" do expect(json["title"]).to eq({ "en" => "English title", "ca" => "Catalan title", "es" => "Spanish title", "default" => "English title" }) diff --git a/spec/models/decidim/vocdoni/question_spec.rb b/spec/models/decidim/vocdoni/question_spec.rb index b72ef2d7..1db413e6 100644 --- a/spec/models/decidim/vocdoni/question_spec.rb +++ b/spec/models/decidim/vocdoni/question_spec.rb @@ -10,7 +10,7 @@ include_examples "resourceable" describe "#total_votes" do - subject(:question) { create :vocdoni_question, :complete } + subject(:question) { create(:vocdoni_question, :complete) } before do # rubocop:disable Rails/SkipsModelValidations @@ -24,7 +24,7 @@ end describe "#build_answer_values!" do - subject(:question) { create :vocdoni_question, :complete } + subject(:question) { create(:vocdoni_question, :complete) } it "assigns a value to each answer" do expect { subject.build_answer_values! }.to change { subject.answers.pluck(:value) }.from([nil, nil, nil]).to([0, 1, 2]) @@ -32,44 +32,44 @@ end describe "#to_vocdoni" do - let(:question1) { create :vocdoni_question, :complete } - let(:question2) { create :vocdoni_question, :complete } - let(:vocdoni1) { question1.to_vocdoni } - let(:vocdoni2) { question2.to_vocdoni } + let(:first_question) { create(:vocdoni_question, :complete) } + let(:second_question) { create(:vocdoni_question, :complete) } + let(:first_vocdoni) { first_question.to_vocdoni } + let(:second_vocdoni) { second_question.to_vocdoni } it "returns the question in the Vocdoni format" do - question1.build_answer_values! - expect(vocdoni1[0]["en"]).to eq(question1.title["en"]) - expect(vocdoni1[0]["ca"]).to eq(question1.title["ca"]) - expect(vocdoni1[0]["default"]).to eq(question1.title["en"]) - expect(vocdoni1[1]["en"]).to eq(question1.description["en"]) - expect(vocdoni1[1]["ca"]).to eq(question1.description["ca"]) - expect(vocdoni1[1]["default"]).to eq(question1.description["en"]) - expect(vocdoni1[2][0]["title"]["en"]).to eq(question1.answers[0].title["en"]) - expect(vocdoni1[2][0]["value"]).to eq(0) - expect(vocdoni1[2][1]["title"]["en"]).to eq(question1.answers[1].title["en"]) - expect(vocdoni1[2][1]["value"]).to eq(1) - expect(vocdoni1[2][2]["title"]["en"]).to eq(question1.answers[2].title["en"]) - expect(vocdoni1[2][2]["value"]).to eq(2) + first_question.build_answer_values! + expect(first_vocdoni[0]["en"]).to eq(first_question.title["en"]) + expect(first_vocdoni[0]["ca"]).to eq(first_question.title["ca"]) + expect(first_vocdoni[0]["default"]).to eq(first_question.title["en"]) + expect(first_vocdoni[1]["en"]).to eq(first_question.description["en"]) + expect(first_vocdoni[1]["ca"]).to eq(first_question.description["ca"]) + expect(first_vocdoni[1]["default"]).to eq(first_question.description["en"]) + expect(first_vocdoni[2][0]["title"]["en"]).to eq(first_question.answers[0].title["en"]) + expect(first_vocdoni[2][0]["value"]).to eq(0) + expect(first_vocdoni[2][1]["title"]["en"]).to eq(first_question.answers[1].title["en"]) + expect(first_vocdoni[2][1]["value"]).to eq(1) + expect(first_vocdoni[2][2]["title"]["en"]).to eq(first_question.answers[2].title["en"]) + expect(first_vocdoni[2][2]["value"]).to eq(2) - question2.build_answer_values! - expect(vocdoni2[0]["en"]).to eq(question2.title["en"]) - expect(vocdoni2[0]["ca"]).to eq(question2.title["ca"]) - expect(vocdoni2[0]["default"]).to eq(question2.title["en"]) - expect(vocdoni2[1]["en"]).to eq(question2.description["en"]) - expect(vocdoni2[1]["ca"]).to eq(question2.description["ca"]) - expect(vocdoni2[1]["default"]).to eq(question2.description["en"]) - expect(vocdoni2[2][0]["title"]["en"]).to eq(question2.answers[0].title["en"]) - expect(vocdoni2[2][0]["value"]).to eq(0) - expect(vocdoni2[2][1]["title"]["en"]).to eq(question2.answers[1].title["en"]) - expect(vocdoni2[2][1]["value"]).to eq(1) - expect(vocdoni2[2][2]["title"]["en"]).to eq(question2.answers[2].title["en"]) - expect(vocdoni2[2][2]["value"]).to eq(2) + second_question.build_answer_values! + expect(second_vocdoni[0]["en"]).to eq(second_question.title["en"]) + expect(second_vocdoni[0]["ca"]).to eq(second_question.title["ca"]) + expect(second_vocdoni[0]["default"]).to eq(second_question.title["en"]) + expect(second_vocdoni[1]["en"]).to eq(second_question.description["en"]) + expect(second_vocdoni[1]["ca"]).to eq(second_question.description["ca"]) + expect(second_vocdoni[1]["default"]).to eq(second_question.description["en"]) + expect(second_vocdoni[2][0]["title"]["en"]).to eq(second_question.answers[0].title["en"]) + expect(second_vocdoni[2][0]["value"]).to eq(0) + expect(second_vocdoni[2][1]["title"]["en"]).to eq(second_question.answers[1].title["en"]) + expect(second_vocdoni[2][1]["value"]).to eq(1) + expect(second_vocdoni[2][2]["title"]["en"]).to eq(second_question.answers[2].title["en"]) + expect(second_vocdoni[2][2]["value"]).to eq(2) end end describe "#slug" do - subject(:question) { create :vocdoni_question } + subject(:question) { create(:vocdoni_question) } it "returns the correct slug format" do expect(subject.slug).to eq("question-#{subject.id}") diff --git a/spec/models/decidim/vocdoni/voter_spec.rb b/spec/models/decidim/vocdoni/voter_spec.rb index 3e6832b5..387b1fed 100644 --- a/spec/models/decidim/vocdoni/voter_spec.rb +++ b/spec/models/decidim/vocdoni/voter_spec.rb @@ -3,9 +3,9 @@ require "spec_helper" describe Decidim::Vocdoni::Voter do - subject(:voter) { build :vocdoni_voter } + subject(:voter) { build(:vocdoni_voter) } - let(:election) { create :vocdoni_election } + let(:election) { create(:vocdoni_election) } describe "#validations" do it "is invalid without a valid email" do @@ -19,8 +19,8 @@ end it "does not allow duplicate emails within the same election" do - create(:vocdoni_voter, election: election, email: "user@example.com") - new_voter = build(:vocdoni_voter, election: election, email: "user@example.com") + create(:vocdoni_voter, election:, email: "user@example.com") + new_voter = build(:vocdoni_voter, election:, email: "user@example.com") expect(new_voter).not_to be_valid end end @@ -77,7 +77,7 @@ end describe ".inside" do - let!(:voter) { create(:vocdoni_voter, election: election) } + let!(:voter) { create(:vocdoni_voter, election:) } it "returns voters for a specific election" do expect(Decidim::Vocdoni::Voter.inside(election)).to include(voter) @@ -85,7 +85,7 @@ end describe ".search_user_email" do - let!(:voter) { create(:vocdoni_voter, election: election, email: "user@example.com") } + let!(:voter) { create(:vocdoni_voter, election:, email: "user@example.com") } it "returns the voter for a specific election and email" do expect(Decidim::Vocdoni::Voter.search_user_email(election, "user@example.com")).to eq(voter) @@ -93,7 +93,7 @@ end describe ".clear" do - before { create_list(:vocdoni_voter, 3, election: election, token: "some_token") } + before { create_list(:vocdoni_voter, 3, election:, token: "some_token") } it "removes all voters for a specific election" do expect { Decidim::Vocdoni::Voter.clear(election) }.to change(Decidim::Vocdoni::Voter, :count).by(-3) diff --git a/spec/permissions/decidim/vocdoni/admin/permissions_spec.rb b/spec/permissions/decidim/vocdoni/admin/permissions_spec.rb index 43e5d0bc..3648c81e 100644 --- a/spec/permissions/decidim/vocdoni/admin/permissions_spec.rb +++ b/spec/permissions/decidim/vocdoni/admin/permissions_spec.rb @@ -5,15 +5,15 @@ describe Decidim::Vocdoni::Admin::Permissions do subject { described_class.new(user, permission_action, context).permissions.allowed? } - let(:user) { create :user, :admin, organization: elections_component.organization } + let(:user) { create(:user, :admin, organization: elections_component.organization) } let(:context) do { current_component: elections_component, - election: election + election: } end - let(:elections_component) { create :vocdoni_component } - let(:election) { create :vocdoni_election, component: elections_component } + let(:elections_component) { create(:vocdoni_component) } + let(:election) { create(:vocdoni_election, component: elections_component) } let(:permission_action) { Decidim::PermissionAction.new(**action) } context "when scope is not admin" do @@ -55,15 +55,15 @@ end context "when everything is ok" do - let(:election) { create :vocdoni_election, :with_census, component: elections_component } - let(:question) { create :vocdoni_question, election: election } - let!(:answers) { create_list(:vocdoni_election_answer, 2, question: question) } + let(:election) { create(:vocdoni_election, :with_census, component: elections_component) } + let(:question) { create(:vocdoni_question, election:) } + let!(:answers) { create_list(:vocdoni_election_answer, 2, question:) } it { is_expected.to be true } end context "when election has no census" do - let(:election) { create :vocdoni_election, component: elections_component } + let(:election) { create(:vocdoni_election, component: elections_component) } it { is_expected.to be false } end @@ -83,21 +83,21 @@ end context "when everything is ok" do - let(:election) { create :vocdoni_election, :with_census, status: :created, component: elections_component } - let(:question) { create :vocdoni_question, election: election } - let!(:answers) { create_list(:vocdoni_election_answer, 2, question: question) } + let(:election) { create(:vocdoni_election, :with_census, status: :created, component: elections_component) } + let(:question) { create(:vocdoni_question, election:) } + let!(:answers) { create_list(:vocdoni_election_answer, 2, question:) } it { is_expected.to be true } end context "when election has no census" do - let!(:election) { create :vocdoni_election, component: elections_component } + let!(:election) { create(:vocdoni_election, component: elections_component) } it { is_expected.to be false } end context "when election has no calendar" do - let(:election) { create :vocdoni_election, :with_census, end_time: nil, component: elections_component } + let(:election) { create(:vocdoni_election, :with_census, end_time: nil, component: elections_component) } it { is_expected.to be false } end @@ -112,9 +112,9 @@ end describe "election unpublish" do - let(:election) { create :vocdoni_election, :with_census, :published, status: :created, component: elections_component } - let(:question) { create :vocdoni_question, election: election } - let!(:answers) { create_list(:vocdoni_election_answer, 2, question: question) } + let(:election) { create(:vocdoni_election, :with_census, :published, status: :created, component: elections_component) } + let(:question) { create(:vocdoni_question, election:) } + let!(:answers) { create_list(:vocdoni_election_answer, 2, question:) } let(:action) do { scope: :admin, action: :unpublish, subject: :election } end @@ -130,7 +130,7 @@ it { is_expected.to be true } context "when there's already a wallet for this organization" do - let(:wallet) { create :vocdoni_wallet, organization: elections_component.organization } + let(:wallet) { create(:vocdoni_wallet, organization: elections_component.organization) } it { is_expected.to be true } end diff --git a/spec/permissions/decidim/vocdoni/permissions_spec.rb b/spec/permissions/decidim/vocdoni/permissions_spec.rb index 2fa0fd11..bd72df4d 100644 --- a/spec/permissions/decidim/vocdoni/permissions_spec.rb +++ b/spec/permissions/decidim/vocdoni/permissions_spec.rb @@ -6,15 +6,15 @@ subject { described_class.new(user, permission_action, context).permissions.allowed? } let(:organization) { elections_component.organization } - let(:user) { create :user, organization: organization } + let(:user) { create(:user, organization:) } let(:context) do { current_component: elections_component, - election: election + election: } end - let(:elections_component) { create :vocdoni_component } - let(:election) { create :vocdoni_election, :published, component: elections_component } + let(:elections_component) { create(:vocdoni_component) } + let(:election) { create(:vocdoni_election, :published, component: elections_component) } let(:permission_action) { Decidim::PermissionAction.new(**action) } context "when scope is admin" do @@ -57,7 +57,7 @@ it { is_expected.to be_truthy } context "when election is not published" do - let(:election) { create :vocdoni_election, :upcoming, component: elections_component } + let(:election) { create(:vocdoni_election, :upcoming, component: elections_component) } it { is_expected.to be_falsey } @@ -68,7 +68,7 @@ end context "when user is an administrator" do - let(:user) { create :user, :admin, organization: elections_component.organization } + let(:user) { create(:user, :admin, organization: elections_component.organization) } it { is_expected.to be_truthy } end @@ -89,7 +89,7 @@ it { is_expected.to be_falsey } context "when user is an administrator" do - let(:user) { create :user, :admin, organization: elections_component.organization } + let(:user) { create(:user, :admin, organization: elections_component.organization) } it { is_expected.to be_truthy } end @@ -101,19 +101,19 @@ end context "when election is not published" do - let(:election) { create :vocdoni_election, :upcoming, component: elections_component } + let(:election) { create(:vocdoni_election, :upcoming, component: elections_component) } it { is_expected.to be_falsey } end context "when election is upcoming" do - let(:election) { create :vocdoni_election, :published, :upcoming, component: elections_component } + let(:election) { create(:vocdoni_election, :published, :upcoming, component: elections_component) } it { is_expected.to be_falsey } end context "when election is ongoing" do - let(:election) { create :vocdoni_election, :published, :ongoing, component: elections_component } + let(:election) { create(:vocdoni_election, :published, :ongoing, component: elections_component) } it { is_expected.to be_truthy } @@ -125,19 +125,19 @@ end context "when election is paused" do - let(:election) { create :vocdoni_election, :paused, component: elections_component } + let(:election) { create(:vocdoni_election, :paused, component: elections_component) } it { is_expected.to be_falsey } end context "when election is canceled" do - let(:election) { create :vocdoni_election, :canceled, component: elections_component } + let(:election) { create(:vocdoni_election, :canceled, component: elections_component) } it { is_expected.to be_falsey } end context "when election has finished" do - let(:election) { create :vocdoni_election, :published, :finished, component: elections_component } + let(:election) { create(:vocdoni_election, :published, :finished, component: elections_component) } it { is_expected.to be_falsey } end diff --git a/spec/presenters/decidim/vocdoni/admin_log/election_presenter_spec.rb b/spec/presenters/decidim/vocdoni/admin_log/election_presenter_spec.rb index 3151247e..4714db59 100644 --- a/spec/presenters/decidim/vocdoni/admin_log/election_presenter_spec.rb +++ b/spec/presenters/decidim/vocdoni/admin_log/election_presenter_spec.rb @@ -6,7 +6,7 @@ module Decidim describe Vocdoni::AdminLog::ElectionPresenter, type: :helper do subject { described_class.new(action_log, helper) } - let(:action_log) { create(:action_log, action: action) } + let(:action_log) { create(:action_log, action:) } before do helper.extend(Decidim::ApplicationHelper) diff --git a/spec/presenters/decidim/vocdoni/admin_log/wallet_presenter_spec.rb b/spec/presenters/decidim/vocdoni/admin_log/wallet_presenter_spec.rb index 61c878d6..c0f9f99a 100644 --- a/spec/presenters/decidim/vocdoni/admin_log/wallet_presenter_spec.rb +++ b/spec/presenters/decidim/vocdoni/admin_log/wallet_presenter_spec.rb @@ -6,7 +6,7 @@ module Decidim describe Vocdoni::AdminLog::WalletPresenter, type: :helper do subject { described_class.new(action_log, helper) } - let(:action_log) { create(:action_log, action: action) } + let(:action_log) { create(:action_log, action:) } before do helper.extend(Decidim::ApplicationHelper) diff --git a/spec/presenters/decidim/vocdoni/election_presenter_spec.rb b/spec/presenters/decidim/vocdoni/election_presenter_spec.rb index e863c445..02eef4b1 100644 --- a/spec/presenters/decidim/vocdoni/election_presenter_spec.rb +++ b/spec/presenters/decidim/vocdoni/election_presenter_spec.rb @@ -7,7 +7,7 @@ module Vocdoni describe ElectionPresenter, type: :helper do subject(:presenter) { described_class.new(election) } - let(:election) { create :vocdoni_election, title: title, description: description } + let(:election) { create(:vocdoni_election, title:, description:) } let(:title) do { "en" => "A title
      with a lot of HTML & "e;special characters"e;" diff --git a/spec/services/decidim/vocdoni/census_updater_service_spec.rb b/spec/services/decidim/vocdoni/census_updater_service_spec.rb index 9c8efc64..d38c6979 100644 --- a/spec/services/decidim/vocdoni/census_updater_service_spec.rb +++ b/spec/services/decidim/vocdoni/census_updater_service_spec.rb @@ -34,7 +34,7 @@ expect(Rails.logger).not_to receive(:info).with(/Technical voter .* deleted successfully./) expect { service.update_census }.not_to raise_error - expect(Decidim::Vocdoni::Voter.where(email: election.technical_voter_email, election: election)).not_to exist + expect(Decidim::Vocdoni::Voter.where(email: election.technical_voter_email, election:)).not_to exist end it "logs an error if the SDK response is unsuccessful" do diff --git a/spec/services/decidim/vocdoni/sdk_spec.rb b/spec/services/decidim/vocdoni/sdk_spec.rb index 7741d14a..548388a1 100644 --- a/spec/services/decidim/vocdoni/sdk_spec.rb +++ b/spec/services/decidim/vocdoni/sdk_spec.rb @@ -7,8 +7,8 @@ module Vocdoni describe Sdk do subject { described_class.new(organization, election) } let(:organization) { election.organization } - let!(:wallet) { create :vocdoni_wallet, organization: organization, private_key: private_key } - let!(:election) { create :vocdoni_election, vocdoni_election_id: vocdoni_election_id } + let!(:wallet) { create(:vocdoni_wallet, organization:, private_key:) } + let!(:election) { create(:vocdoni_election, vocdoni_election_id:) } let(:vocdoni_election_id) { "0x0000000000000000000000000000000000000001" } let(:private_key) { "0x0000000000000000000000000000000000000000000000000000000000000001" } let(:salt) { Rails.application.secret_key_base } @@ -69,7 +69,7 @@ module Vocdoni context "when election is not present" do let!(:election) { nil } - let(:organization) { create :organization } + let(:organization) { create(:organization) } it "has env variables" do expect(subject.env).to eq({ diff --git a/spec/shared/vote_examples.rb b/spec/shared/vote_examples.rb index b149c23b..d68dd0dd 100644 --- a/spec/shared/vote_examples.rb +++ b/spec/shared/vote_examples.rb @@ -4,7 +4,7 @@ it "doesn't allow clicking in the vote button" do visit router.election_path(id: election.id) - expect(page).not_to have_link("Vote") + expect(page).to have_no_link("Vote") end it "doesn't allow to access directly to the vote page" do @@ -19,11 +19,12 @@ before do visit router.election_path(id: election.id) - - click_link "Preview" + click_link_or_button "Preview" end + # rubocop:disable RSpec/NoExpectationExample it { uses_the_voting_booth({ email: user.email, token: "123456" }) } + # rubocop:enable RSpec/NoExpectationExample it "shows the preview alert" do expect(page).to have_content("This is a preview of the voting booth.") @@ -36,7 +37,7 @@ it "doesn't allow clicking the preview button" do visit router.election_path(id: election.id) - expect(page).not_to have_link("Preview") + expect(page).to have_no_link("Preview") end it "doesn't allow to access directly to the vote page" do @@ -61,13 +62,13 @@ def uses_the_voting_booth(census_data) # confirm step non_question_step("#step-1") do - expect(page).to have_content("CONFIRM YOUR VOTE") + expect(page).to have_content("Confirm your vote") selected_answers.each { |answer| expect(page).to have_i18n_content(answer.title) } non_selected_answers.each { |answer| expect(page).not_to have_i18n_content(answer.title) } within "#edit-step-1" do - click_link("edit") + click_link_or_button("edit") end end @@ -78,12 +79,12 @@ def uses_the_voting_booth(census_data) # confirm step non_question_step("#step-1") do - expect(page).to have_content("CONFIRM YOUR VOTE") + expect(page).to have_content("Confirm your vote") selected_answers.each { |answer| expect(page).to have_i18n_content(answer.title) } non_selected_answers.each { |answer| expect(page).not_to have_i18n_content(answer.title) } - click_link("Confirm") + click_link_or_button("Confirm") end # confirmed vote page @@ -96,21 +97,21 @@ def login_step(census_data) fill_in :login_email, with: census_data.fetch(:email) fill_in :login_token, with: census_data.fetch(:token) - click_button "Access" + click_link_or_button "Access" end end def question_step(number) expect_only_one_step + expect(page).to have_content("QUESTION #{number} OF 1") within "#step-#{number - 1}" do question = election.questions[number - 1] - expect(page).to have_content("QUESTION #{number} OF 1") expect(page).to have_i18n_content(question.title) yield question if block_given? - click_link("Next") + click_link_or_button("Next") end end @@ -147,11 +148,11 @@ def change_answer(question, selected, non_selected) end def expect_only_one_step - expect(page).to have_selector(".focus__step", count: 1) + expect(page).to have_css(".focus__step", count: 1) end def expect_not_valid - expect(page).not_to have_link("Next") + expect(page).to have_no_link("Next") end def expect_valid diff --git a/spec/system/decidim/admin/admin_creates_wallet_spec.rb b/spec/system/decidim/admin/admin_creates_wallet_spec.rb index d042b6e9..7644eda4 100644 --- a/spec/system/decidim/admin/admin_creates_wallet_spec.rb +++ b/spec/system/decidim/admin/admin_creates_wallet_spec.rb @@ -2,10 +2,10 @@ require "spec_helper" -describe "Admin creates wallet", :slow, type: :system do +describe "Admin creates wallet", :slow do # rubocop:disable RSpec/DescribeClass let(:manifest_name) { :vocdoni } - let(:current_component) { create :vocdoni_component } - let!(:election) { create :vocdoni_election, :ready_for_setup, component: current_component, title: { en: "English title" } } + let(:current_component) { create(:vocdoni_component) } + let!(:election) { create(:vocdoni_election, :ready_for_setup, component: current_component, title: { en: "English title" }) } include_context "when managing a component as an admin" @@ -14,7 +14,7 @@ visit_steps_page expect(page).to have_content("It's necessary to create a wallet for this organization") expect(page).to have_content("New organization wallet") - click_link "Create" + click_link_or_button "Create" expect(page).to have_content("The election has at least one question.") expect(Decidim::Vocdoni::Wallet.last.private_key.length).to eq 66 @@ -22,7 +22,7 @@ end context "when there is a wallet" do - let!(:wallet) { create :vocdoni_wallet, organization: current_component.organization } + let!(:wallet) { create(:vocdoni_wallet, organization: current_component.organization) } it "goes to the step page" do visit_steps_page @@ -31,19 +31,25 @@ end it "doesn't create another wallet" do - expect(Decidim::Vocdoni::Wallet.all.count).to eq 1 + expect(Decidim::Vocdoni::Wallet.count).to eq 1 visit Decidim::EngineRouter.admin_proxy(current_component).new_wallet_path(component: current_component.id) expect(page).to have_content("You are not authorized to perform this action") - expect(Decidim::Vocdoni::Wallet.all.count).to eq 1 + expect(Decidim::Vocdoni::Wallet.count).to eq 1 end - context "when prod environment" do + shared_context "with environment settings" do |env| before do - allow(Decidim::Vocdoni).to receive(:api_endpoint_env).and_return("prod") - allow(Decidim::Vocdoni).to receive(:vocdoni_reseller_name).and_return("Test reseller") - allow(Decidim::Vocdoni).to receive(:vocdoni_reseller_email).and_return("test_reseller@example.org") + allow(Decidim::Vocdoni).to receive_messages( + api_endpoint_env: env, + vocdoni_reseller_name: "Test reseller", + vocdoni_reseller_email: "test_reseller@example.org" + ) end + end + + context "when prod environment" do + include_context "with environment settings", "prod" it "shows the information about receiving coins" do visit_steps_page @@ -57,18 +63,14 @@ end context "when stg environment" do - before do - allow(Decidim::Vocdoni).to receive(:api_endpoint_env).and_return("stg") - allow(Decidim::Vocdoni).to receive(:vocdoni_reseller_name).and_return("Test reseller") - allow(Decidim::Vocdoni).to receive(:vocdoni_reseller_email).and_return("test_reseller@example.org") - end + include_context "with environment settings", "stg" it "doesn't show the information about receiving coins" do visit_steps_page - expect(page).not_to have_content("The usage of the Vocdoni platform has costs") - expect(page).not_to have_content("Test reseller") - expect(page).not_to have_css("input[value='#{wallet.private_key}']") + expect(page).to have_no_content("The usage of the Vocdoni platform has costs") + expect(page).to have_no_content("Test reseller") + expect(page).to have_no_css("input[value='#{wallet.private_key}']") end end end @@ -77,7 +79,7 @@ def visit_steps_page relogin_as user, scope: :user visit_component_admin - within find("tr", text: translated(election.title)) do + within "tr", text: translated(election.title) do page.find(".action-icon--manage-steps").click end end diff --git a/spec/system/decidim/admin/admin_manages_census_spec.rb b/spec/system/decidim/admin/admin_manages_census_spec.rb index a12c7ff3..f98662d5 100644 --- a/spec/system/decidim/admin/admin_manages_census_spec.rb +++ b/spec/system/decidim/admin/admin_manages_census_spec.rb @@ -2,10 +2,10 @@ require "spec_helper" -describe "Admin manages census", :slow, type: :system do +describe "Admin manages census", :slow do # rubocop:disable RSpec/DescribeClass let(:manifest_name) { :vocdoni } - let(:current_component) { create :vocdoni_component } - let(:election) { create :vocdoni_election, :upcoming, :published, :complete, component: current_component, title: { en: "English title" } } + let(:current_component) { create(:vocdoni_component) } + let(:election) { create(:vocdoni_election, :upcoming, :published, :complete, component: current_component, title: { en: "English title" }) } before do allow(Rails.application).to receive(:secret_key_base).and_return("a-secret-key-base") @@ -14,8 +14,12 @@ include_context "when managing a component as an admin" context "when there isn't any census" do - let(:voter1) { Decidim::Vocdoni::Voter.find_by(email: "john@example.org") } - let(:voter2) { Decidim::Vocdoni::Voter.find_by(email: "alice@example.org") } + let(:voters) do + [ + Decidim::Vocdoni::Voter.find_by(email: "john@example.org"), + Decidim::Vocdoni::Voter.find_by(email: "alice@example.org") + ] + end it "uploads the census" do visit_census_page @@ -24,24 +28,30 @@ attach_file("census_data[file]", valid_census_file) perform_enqueued_jobs do - click_button "Upload file" + click_link_or_button "Upload file" end expect(page).to have_content("Successfully imported 2 items") expect(page).to have_content("There are 2 records loaded in total") - expect(voter1.wallet_address).to eq("0x0b9eA6587591d888f0b3a2D67f3d416246BB9304") - expect(voter2.wallet_address).to eq("0x5D38b06B50412294532b9A2C0127AD1455Af7934") + expect(voters[0].wallet_address).to eq("0x0b9eA6587591d888f0b3a2D67f3d416246BB9304") + expect(voters[1].wallet_address).to eq("0x5D38b06B50412294532b9A2C0127AD1455Af7934") end end context "when there's already a census" do context "without the credentials" do - let!(:voter1) { create(:vocdoni_voter, election: election, token: "123456", email: "user_1@example.org") } - let!(:voter2) { create(:vocdoni_voter, election: election, token: "123abc", email: "user_2@example.org") } - let!(:voter3) { create(:vocdoni_voter, election: election, token: "123abc", email: "user_3@example.org") } - let!(:voter4) { create(:vocdoni_voter, election: election, token: "abcxyz", email: "user_4@example.org") } - let!(:voter5) { create(:vocdoni_voter, election: election, token: "123abc", email: "user_5@example.org") } + let!(:voters) do + [ + { token: "123456", email: "user_1@example.org" }, + { token: "123abc", email: "user_2@example.org" }, + { token: "123abc", email: "user_3@example.org" }, + { token: "abcxyz", email: "user_4@example.org" }, + { token: "123abc", email: "user_5@example.org" } + ].map do |voter_data| + create(:vocdoni_voter, election:, token: voter_data[:token], email: voter_data[:email]) + end + end it "has progress indicator of the generation of the credentials" do visit_census_page @@ -51,14 +61,14 @@ expect(page).to have_content("Completed 0% of 5 total records") # Simulates the percentage of completion - wallet = Decidim::Vocdoni::Sdk.new(organization, election).deterministicWallet([voter1.email, voter1.token])["address"] - voter1.update(wallet_address: wallet) - voter1.reload + wallet = Decidim::Vocdoni::Sdk.new(organization, election).deterministicWallet([voters[0].email, voters[0].token])["address"] + voters[0].update(wallet_address: wallet) + voters[0].reload sleep 1 expect(page).to have_content("Completed 20% of 5 total records") - expect(voter1.reload.wallet_address).to eq("0xFEA59AF4dD69C285f39CC6836DA2664f36A47A71") - expect(voter2.reload.wallet_address).to be_nil + expect(voters[0].reload.wallet_address).to eq("0xFEA59AF4dD69C285f39CC6836DA2664f36A47A71") + expect(voters[1].reload.wallet_address).to be_nil end describe "and we want to delete it" do @@ -66,25 +76,27 @@ visit_census_page deletes_the_census + expect(page).to have_content("Upload a CSV file") end end end context "with the credentials" do - let!(:voters) { create_list(:vocdoni_voter, 5, :with_wallet, election: election) } + let!(:voters) { create_list(:vocdoni_voter, 5, :with_wallet, election:) } it "doesn't have any form" do visit_census_page - expect(page).not_to have_content("Upload a new census") - expect(page).not_to have_content("Confirm the census data") + expect(page).to have_no_content("Upload a new census") + expect(page).to have_no_content("Confirm the census data") end - describe "and we want to delete it" do + context "and we want to delete it" do it "deletes it" do visit_census_page deletes_the_census + expect(page).to have_content("Upload a CSV file") end end end @@ -95,12 +107,12 @@ let!(:id_document_handler_name) { "another_dummy_authorization_handler" } let(:translated_authorization_handler_name) { I18n.t("decidim.authorization_handlers.#{authorization_handler_name}.name") } let(:translated_id_document_handler_name) { I18n.t("decidim.authorization_handlers.#{id_document_handler_name}.name") } - let!(:organization) { create(:organization, available_authorizations: available_authorizations) } + let!(:organization) { create(:organization, available_authorizations:) } let!(:available_authorizations) { [authorization_handler_name, id_document_handler_name] } let(:authorizations_count) { organization.available_authorizations.count } let(:authorizations_checkboxes) { find_all("input[type='checkbox'][name='census_permissions[verification_types][]']") } - let!(:user_with_authorizations) { create(:user, :admin, :confirmed, organization: organization) } - let!(:user_without_authorizations) { create(:user, :admin, :confirmed, organization: organization) } + let!(:user_with_authorizations) { create(:user, :admin, :confirmed, organization:) } + let!(:user_without_authorizations) { create(:user, :admin, :confirmed, organization:) } let!(:dummy_authorization) { create(:authorization, user: user_with_authorizations, name: id_document_handler_name) } before do @@ -121,7 +133,7 @@ before do check(translated_id_document_handler_name) perform_enqueued_jobs do - click_button "Save census" + click_link_or_button "Save census" end end @@ -143,7 +155,7 @@ check(translated_authorization_handler_name) check(translated_id_document_handler_name) perform_enqueued_jobs do - click_button "Save census" + click_link_or_button "Save census" end end @@ -164,14 +176,14 @@ end it "doesn't have the message that the census isn't ready" do - expect(page).not_to have_content("The census is not ready yet") + expect(page).to have_no_content("The census is not ready yet") end end context "when admin doesn't select any permissions" do before do perform_enqueued_jobs do - click_button "Save census" + click_link_or_button "Save census" end end @@ -184,7 +196,7 @@ end it "doesn't have the message that the census isn't ready" do - expect(page).not_to have_content("The census is not ready yet") + expect(page).to have_no_content("The census is not ready yet") end end end @@ -192,17 +204,12 @@ private def deletes_the_census - click_link "Delete all census data" + click_link_or_button "Delete all census data" - within ".confirm-content" do + within "#confirm-modal-content" do expect(page).to have_content("Are you sure you want to continue?") + click_link_or_button "OK" end - - within ".confirm-modal-footer" do - click_link "OK" - end - - expect(page).to have_content("Upload a CSV file") end def visit_census_page @@ -211,8 +218,8 @@ def visit_census_page relogin_as user, scope: :user visit_component_admin - within find("tr", text: translated(election.title)) do - click_link "Edit" + within "tr", text: translated(election.title) do + click_link_or_button "Edit" end find("li.tabs-title a", text: "Census").click diff --git a/spec/system/decidim/admin/admin_manages_election_steps_spec.rb b/spec/system/decidim/admin/admin_manages_election_steps_spec.rb index d6b45497..4b0aff16 100644 --- a/spec/system/decidim/admin/admin_manages_election_steps_spec.rb +++ b/spec/system/decidim/admin/admin_manages_election_steps_spec.rb @@ -2,21 +2,21 @@ require "spec_helper" -describe "Admin manages election steps", :slow, type: :system do +describe "Admin manages election steps", :slow do # rubocop:disable RSpec/DescribeClass let(:manifest_name) { :vocdoni } - let(:current_component) { create :vocdoni_component } + let(:current_component) { create(:vocdoni_component) } let(:info) do { clientInfo: { address: "0x0000000000000000000000000000000000000001", - balance: balance + balance: } } end let(:balance) { 500 } let(:vocdoni_status) { "UPCOMING" } let(:vocdoni_election_id) { "123456789" } - let!(:wallet) { create :vocdoni_wallet, organization: current_component.organization } + let!(:wallet) { create(:vocdoni_wallet, organization: current_component.organization) } let(:results) do [ [3, 14] @@ -47,7 +47,7 @@ include_context "when managing a component as an admin" describe "setup an election" do - let!(:election) { create :vocdoni_election, :ready_for_setup, :auto_start, component: current_component } + let!(:election) { create(:vocdoni_election, :ready_for_setup, :auto_start, component: current_component) } it "performs the action successfully" do visit_steps_page @@ -57,52 +57,52 @@ expect(page).to have_content("Each question has at least two answers.") expect(page).to have_content("The election is published.") expect(page).to have_content("The census is ready") - expect(page).not_to have_link("Fix it") + expect(page).to have_no_link("Fix it") perform_enqueued_jobs do - click_button "Setup election" + click_link_or_button "Setup election" end end expect(page).to have_content("The election data has been successfully sent to the Vocdoni API") expect(page).to have_admin_callout("successfully") - expect(page).not_to have_content("Vocdoni communication error") + expect(page).to have_no_content("Vocdoni communication error") expect(page).to have_content("The election has been created. We are waiting for the election to start") - expect(page).not_to have_content("This election has been configured to start manually") + expect(page).to have_no_content("This election has been configured to start manually") end context "when manual start" do - let!(:election) { create :vocdoni_election, :ready_for_setup, :manual_start, component: current_component } + let!(:election) { create(:vocdoni_election, :ready_for_setup, :manual_start, component: current_component) } it "performs the action successfully" do visit_steps_page within "form.create_election" do - expect(page).not_to have_link("Fix it") + expect(page).to have_no_link("Fix it") perform_enqueued_jobs do - click_button "Setup election" + click_link_or_button "Setup election" end end expect(page).to have_content("The election data has been successfully sent to the Vocdoni API") expect(page).to have_admin_callout("successfully") - expect(page).not_to have_content("Vocdoni communication error") + expect(page).to have_no_content("Vocdoni communication error") expect(page).to have_content('The election has been created. The election will start manually. Press the button "Start election" to begin the voting period.') expect(page).to have_content("This election has been configured to start manually") - click_button "Start election" + click_link_or_button "Start election" accept_confirm expect(page).to have_admin_callout("successfully") - expect(page).to have_selector("li.text-warning", text: "Vote period") + expect(page).to have_css("li.text-warning", text: "Vote period") end end context "when some misconfiguration" do - let!(:election) { create :vocdoni_election, :ready_for_setup, :auto_start, start_time: 10.minutes.ago, component: current_component } + let!(:election) { create(:vocdoni_election, :ready_for_setup, :auto_start, start_time: 10.minutes.ago, component: current_component) } it "shows the fixit button" do visit_steps_page @@ -127,31 +127,31 @@ within "form.create_election" do perform_enqueued_jobs do - click_button "Setup election" + click_link_or_button "Setup election" end end expect(page).to have_content("The election data has been successfully sent to the Vocdoni API") expect(page).to have_content("Vocdoni communication error") - click_button "Try to resend the election data to the Vocdoni API" + click_link_or_button "Try to resend the election data to the Vocdoni API" # Simulates the job election.update(vocdoni_election_id: "1234567890") - expect(page).not_to have_content("Vocdoni communication error") + expect(page).to have_no_content("Vocdoni communication error") end end context "when the internal census without authorizations" do - let!(:election) { create :vocdoni_election, :with_internal_census, :ready_for_setup, component: current_component } + let!(:election) { create(:vocdoni_election, :with_internal_census, :ready_for_setup, component: current_component) } it "has another message for internal census" do visit_steps_page within "form.create_election" do expect(page).to have_content("The census is ready. Selected census is: Internal (no additional authorizations are required).") - expect(page).not_to have_link("Fix it") + expect(page).to have_no_link("Fix it") expect(page).to have_content("no additional authorizations are required") end end @@ -160,16 +160,16 @@ describe "when continuing the election" do let(:vocdoni_status) { "PAUSED" } - let!(:election) { create :vocdoni_election, :ready_for_setup, :configured, :ongoing, :paused, component: current_component } + let!(:election) { create(:vocdoni_election, :ready_for_setup, :configured, :ongoing, :paused, component: current_component) } it "performs the action successfully" do visit_steps_page - click_button "Continue the election" + click_link_or_button "Continue the election" accept_confirm expect(page).to have_admin_callout("The election has been successfully resumed") - expect(page).to have_selector("li.text-warning", text: "Vote period") + expect(page).to have_css("li.text-warning", text: "Vote period") end context "and out of sync" do @@ -178,69 +178,69 @@ it "performs the action successfully" do visit_steps_page - click_button "Continue the election" + click_link_or_button "Continue the election" accept_confirm expect(page).to have_admin_callout("The election was out of sync with the Vocdoni API. The status has been updated to \"vote\". Please refresh the page") expect(page).to have_content("The election is currently running") - expect(page).to have_selector("li.text-warning", text: "Vote period") + expect(page).to have_css("li.text-warning", text: "Vote period") end end end describe "when pausing the election" do let(:vocdoni_status) { "ONGOING" } - let!(:election) { create :vocdoni_election, :ready_for_setup, :configured, :ongoing, component: current_component } + let!(:election) { create(:vocdoni_election, :ready_for_setup, :configured, :ongoing, component: current_component) } it "performs the action successfully" do visit_steps_page - click_button "Pause the election" + click_link_or_button "Pause the election" accept_confirm expect(page).to have_admin_callout("The election has been successfully paused") expect(page).to have_content("The election is currently running") - expect(page).to have_selector("li.text-warning", text: "Paused") + expect(page).to have_css("li.text-warning", text: "Paused") end end describe "canceling the election" do let(:vocdoni_status) { "ONGOING" } - let!(:election) { create :vocdoni_election, :ready_for_setup, :configured, :ongoing, component: current_component } + let!(:election) { create(:vocdoni_election, :ready_for_setup, :configured, :ongoing, component: current_component) } it "performs the action successfully" do visit_steps_page - click_link "Cancel the election (abort)" + click_link_or_button "Cancel the election (abort)" accept_confirm expect(page).to have_admin_callout("The election has been successfully canceled") expect(page).to have_content("This election has been canceled prematurely") - expect(page).to have_selector("li.text-warning", text: "Canceled") + expect(page).to have_css("li.text-warning", text: "Canceled") end end describe "ending the election" do let(:vocdoni_status) { "ONGOING" } - let!(:election) { create :vocdoni_election, :ready_for_setup, :configured, :ongoing, component: current_component } + let!(:election) { create(:vocdoni_election, :ready_for_setup, :configured, :ongoing, component: current_component) } it "performs the action successfully" do visit_steps_page - click_link "End the election" + click_link_or_button "End the election" accept_confirm expect(page).to have_admin_callout("The election has been ended, the results will be published in a few seconds.") expect(page).to have_content("The vote period has ended. You can publish the results") - expect(page).to have_selector("li.text-warning", text: "Vote period ended") + expect(page).to have_css("li.text-warning", text: "Vote period ended") end end describe "publishing the results" do let(:vocdoni_status) { "ENDED" } - let!(:election) { create :vocdoni_election, :ready_for_setup, :configured, :finished, component: current_component } - let(:answer1) { election.questions.first.answers.first } - let(:answer2) { election.questions.first.answers.second } + let!(:election) { create(:vocdoni_election, :ready_for_setup, :configured, :finished, component: current_component) } + let(:answer_first) { election.questions.first.answers.first } + let(:answer_second) { election.questions.first.answers.second } it "performs the action successfully" do visit_steps_page @@ -248,27 +248,27 @@ election.build_answer_values! perform_enqueued_jobs do - click_button "Publish results" + click_link_or_button "Publish results" end expect(page).to have_admin_callout("The election has been ended, the results will be published in a few seconds.") - expect(page).to have_selector("li.text-warning", text: "Results published") + expect(page).to have_css("li.text-warning", text: "Results published") expect(page).to have_content("Results published") - within find(:xpath, "//td[contains(text(),'#{translated(answer1.title)}')]/following-sibling::td") do + within :xpath, "//td[contains(text(),'#{translated(answer_first.title)}')]/following-sibling::td" do expect(page).to have_content("3") end - within find(:xpath, "//td[contains(text(),'#{translated(answer2.title)}')]/following-sibling::td") do + within :xpath, "//td[contains(text(),'#{translated(answer_second.title)}')]/following-sibling::td" do expect(page).to have_content("14") end end end describe "updating the census" do - let!(:election) { create :vocdoni_election, :with_internal_census, :ready_for_setup, :configured, :ongoing, component: current_component, verification_types: verification_types } + let!(:election) { create(:vocdoni_election, :with_internal_census, :ready_for_setup, :configured, :ongoing, component: current_component, verification_types:) } let(:non_voter_ids) { create_list(:user, 3, organization: current_component.organization).map(&:id) } - let(:authorization) { create(:authorization, user: user, name: "dummy_authorization_handler") } + let(:authorization) { create(:authorization, user:, name: "dummy_authorization_handler") } let(:verification_types) { [authorization.name] } it "performs the action successfully" do @@ -276,11 +276,11 @@ expect(page).to have_content("There are 1 users waiting to be added to the census.") expect(page).to have_content("It is possible to update it during the duration of the election but it requires your manual action as it might cost some credits.") expect(page).to have_content("Example authorization") - click_link "Update census now!" + click_link_or_button "Update census now!" sleep 1 perform_enqueued_jobs sleep 1 - expect(page).not_to have_css("a", text: "Update census now!") + expect(page).to have_no_css("a", text: "Update census now!") expect(page).to have_content("There are 0 users waiting to be added to the census.") end end @@ -291,7 +291,7 @@ def visit_steps_page relogin_as user, scope: :user visit_component_admin - within find("tr", text: translated(election.title)) do + within "tr", text: translated(election.title) do page.find(".action-icon--manage-steps").click end end diff --git a/spec/system/decidim/admin/election_setup_wizard_spec.rb b/spec/system/decidim/admin/election_setup_wizard_spec.rb index 53075d39..82f65257 100644 --- a/spec/system/decidim/admin/election_setup_wizard_spec.rb +++ b/spec/system/decidim/admin/election_setup_wizard_spec.rb @@ -2,9 +2,9 @@ require "spec_helper" -describe "Election setup wizard", :slow, type: :system do +describe "Election setup wizard", :slow do # rubocop:disable RSpec/DescribeClass let(:manifest_name) { :vocdoni } - let(:current_component) { create :vocdoni_component } + let(:current_component) { create(:vocdoni_component) } let(:election_title) { "My election" } let(:election_description) { "My election description" } let(:edit_title) { "Edit election \"#{election_title}\"" } @@ -23,8 +23,10 @@ describe "create a new election" do before do + switch_to_host(organization.host) + login_as user, scope: :user visit_component_admin - click_link "New election" + click_link_or_button "New election" end it_behaves_like "has setup wizard tabs" @@ -47,11 +49,11 @@ context "when the form is not valid" do before do - click_button "Save and go to the next step" + click_link_or_button "Save and go to the next step" end it "shows errors" do - expect(page).to have_content("can't be blank", count: 2) + expect(page).to have_content("cannot be blank", count: 2) end end @@ -80,34 +82,34 @@ end it "can edit previous step" do - expect(page).not_to have_css("li.tabs-title a.disabled", text: "Basic info") + expect(page).to have_no_css("li.tabs-title a.disabled", text: "Basic info") end context "when creates a new question with 2 answers" do before do fill_question - click_link "Manage answers" + click_link_or_button "Manage answers" fill_answer_first fill_answer_second - click_link "Done, go to the next step" + click_link_or_button "Done, go to the next step" end it "goes to the next step" do expect(page).to have_content("Upload a CSV file") - expect(page).not_to have_content("Questions must have at least two answers in order to go to the next step.") + expect(page).to have_no_content("Questions must have at least two answers in order to go to the next step.") end end context "when creates a new question with 1 answer" do before do fill_question - click_link "Manage answers" + click_link_or_button "Manage answers" fill_answer_first - click_link "Back to questions" + click_link_or_button "Back to questions" end it "doesn't go to the next step" do - expect(page).not_to have_css("a.button", text: "Done, go to the next step") + expect(page).to have_no_css("a.button", text: "Done, go to the next step") expect(page).to have_css("li.tabs-title a.disabled", text: "Census") expect(page).to have_content("Questions must have at least two answers in order to go to the next step.") end @@ -118,10 +120,10 @@ before do fill_basic_info fill_question - click_link "Manage answers" + click_link_or_button "Manage answers" fill_answer_first fill_answer_second - click_link "Done, go to the next step" + click_link_or_button "Done, go to the next step" end it "has title" do @@ -137,13 +139,13 @@ end it "can edit previous steps" do - expect(page).not_to have_css("li.tabs-title a.disabled", text: "Basic info") - expect(page).not_to have_css("li.tabs-title a.disabled", text: "Questions") + expect(page).to have_no_css("li.tabs-title a.disabled", text: "Basic info") + expect(page).to have_no_css("li.tabs-title a.disabled", text: "Questions") end context "when the form is not valid" do before do - click_button "Upload file" + click_link_or_button "Upload file" end it "shows errors" do @@ -151,7 +153,7 @@ end it "doesn't go to the next step" do - expect(page).not_to have_css("a.button", text: "Done, go to the next step") + expect(page).to have_no_css("a.button", text: "Done, go to the next step") expect(page).to have_css("li.tabs-title a.disabled", text: "Calendar and results") end end @@ -171,10 +173,10 @@ before do fill_basic_info fill_question - click_link "Manage answers" + click_link_or_button "Manage answers" fill_answer_first fill_answer_second - click_link "Done, go to the next step" + click_link_or_button "Done, go to the next step" upload_census end @@ -192,14 +194,14 @@ end it "can edit previous steps" do - expect(page).not_to have_css("li.tabs-title a.disabled", text: "Basic info") - expect(page).not_to have_css("li.tabs-title a.disabled", text: "Questions") - expect(page).not_to have_css("li.tabs-title a.disabled", text: "Census") + expect(page).to have_no_css("li.tabs-title a.disabled", text: "Basic info") + expect(page).to have_no_css("li.tabs-title a.disabled", text: "Questions") + expect(page).to have_no_css("li.tabs-title a.disabled", text: "Census") end context "when the form is not valid" do before do - click_button "Save and go to the next step" + click_link_or_button "Save and go to the next step" end it "shows errors" do @@ -232,10 +234,10 @@ before do fill_basic_info fill_question - click_link "Manage answers" + click_link_or_button "Manage answers" fill_answer_first fill_answer_second - click_link "Done, go to the next step" + click_link_or_button "Done, go to the next step" upload_census fill_calendar_and_results end @@ -249,17 +251,17 @@ end it "can edit previous steps" do - expect(page).not_to have_css("li.tabs-title a.disabled", text: "Basic info") - expect(page).not_to have_css("li.tabs-title a.disabled", text: "Questions") - expect(page).not_to have_css("li.tabs-title a.disabled", text: "Census") - expect(page).not_to have_css("li.tabs-title a.disabled", text: "Calendar and results") + expect(page).to have_no_css("li.tabs-title a.disabled", text: "Basic info") + expect(page).to have_no_css("li.tabs-title a.disabled", text: "Questions") + expect(page).to have_no_css("li.tabs-title a.disabled", text: "Census") + expect(page).to have_no_css("li.tabs-title a.disabled", text: "Calendar and results") end context "when click the publish button" do before do - find("a.hollow", text: "Publish").click - click_link "Done, go to the next step" - click_link "Create" + find("a.button__secondary", text: "Publish").click + click_link_or_button "Done, go to the next step" + click_link_or_button "Create" end it "redirects to the steps dashboard" do @@ -270,11 +272,11 @@ end describe "edit elections" do - let!(:election) { create :vocdoni_election, component: current_component } + let!(:election) { create(:vocdoni_election, component: current_component) } before do visit_component_admin - click_link "Edit" + click_link_or_button "Edit" end it "has edit title" do @@ -289,38 +291,38 @@ def fill_basic_info fill_in "election_title_#{I18n.locale}", with: election_title fill_in_i18n_editor :election_description, "#election-description-tabs", en: election_description - click_button "Save and go to the next step" + click_link_or_button "Save and go to the next step" end def fill_question - click_link "New question" + click_link_or_button "New question" fill_in "question_title_#{I18n.locale}", with: "My question" fill_in "question_description_#{I18n.locale}", with: "My question description" - click_button "Create question" + click_link_or_button "Create question" end def fill_answer_first - click_link "New answer" + click_link_or_button "New answer" fill_in "answer_title_#{I18n.locale}", with: "My answer" fill_in_i18n_editor :answer_description, "#answer-description-tabs", en: "My answer description" - click_button "Create answer" + click_link_or_button "Create answer" end def fill_answer_second - click_link "New answer" + click_link_or_button "New answer" fill_in "answer_title_#{I18n.locale}", with: "My second answer" fill_in_i18n_editor :answer_description, "#answer-description-tabs", en: "My answer description" - click_button "Create answer" - click_link "Back to questions" + click_link_or_button "Create answer" + click_link_or_button "Back to questions" end def upload_census attach_file("census_data[file]", valid_census_file) # wallets are generated asynchronously perform_enqueued_jobs do - click_button "Upload file" + click_link_or_button "Upload file" end - click_link "Done, go to the next step" + click_link_or_button "Done, go to the next step" end def valid_census_file @@ -328,10 +330,12 @@ def valid_census_file end def fill_calendar_and_results - fill_in "election_calendar_start_time", with: 12.minutes.from_now.strftime("%d/%m/%Y %H:%M") - send_keys(:enter) - fill_in "election_calendar_end_time", with: 12.days.from_now.strftime("%d/%m/%Y %H:%M") - send_keys(:enter) - click_button "Save and go to the next step" + start_time = 12.minutes.from_now.strftime("%Y-%m-%dT%H:%M") + end_time = 12.days.from_now.strftime("%Y-%m-%dT%H:%M") + + page.execute_script("document.getElementById('election_calendar_start_time').value = '#{start_time}'") + page.execute_script("document.getElementById('election_calendar_end_time').value = '#{end_time}'") + + click_link_or_button "Save and go to the next step" end end diff --git a/spec/system/decidim/explore_elections_spec.rb b/spec/system/decidim/explore_elections_spec.rb index 410ad311..3918dede 100644 --- a/spec/system/decidim/explore_elections_spec.rb +++ b/spec/system/decidim/explore_elections_spec.rb @@ -2,13 +2,13 @@ require "spec_helper" -describe "Explore elections", :slow, type: :system do +describe "Explore elections", :slow do # rubocop:disable RSpec/DescribeClass include_context "with a component" let(:manifest_name) { "vocdoni" } let(:elections_count) { 5 } let!(:elections) do - create_list(:vocdoni_election, elections_count, :complete, :published, :auto_start, :ongoing, component: component) + create_list(:vocdoni_election, elections_count, :complete, :published, :auto_start, :ongoing, component:) end describe "index" do @@ -17,13 +17,13 @@ Decidim::Vocdoni::Election.destroy_all end - let!(:single_elections) { create_list(:vocdoni_election, 1, :complete, :published, :auto_start, :ongoing, component: component) } + let!(:single_elections) { create_list(:vocdoni_election, 1, :complete, :published, :auto_start, :ongoing, component:) } it "redirects to the only election" do visit_component expect(page).to have_content("Active voting until") - expect(page).not_to have_content("All elections") + expect(page).to have_no_content("All elections") expect(page).to have_content("These are the questions for this voting process") end end @@ -31,7 +31,7 @@ context "with many elections" do it "shows all elections for the given process" do visit_component - expect(page).to have_selector(".card--election", count: elections_count) + expect(page).to have_css(".card__grid", count: elections_count) elections.each do |election| expect(page).to have_content(translated(election.title)) @@ -46,7 +46,7 @@ it "shows the correct warning" do visit_component - within ".callout" do + within "[data-announcement]" do expect(page).to have_content("any election scheduled") end end @@ -71,25 +71,25 @@ end it "shows accordion with questions and answers" do - expect(page).to have_css(".accordion-item", count: election.questions.count) - expect(page).not_to have_css(".accordion-content") + expect(page).to have_css(".election__accordion", count: election.questions.count) + expect(page).to have_no_css(".election__accordion-panel") - within ".accordion-item:first-child" do - click_link translated(question.title) + within ".election__accordion:first-child" do + click_link_or_button translated(question.title) expect(page).to have_css("li", count: question.answers.count) end end context "with attached photos" do it "shows the image" do - expect(page).to have_xpath("//img[@src=\"#{image.url}\"]") + expect(page).to have_css("img[src*='city.jpeg']") end end end context "with results" do - let(:election) { create(:vocdoni_election, :published, :results_published, component: component) } - let(:question) { create :vocdoni_question, :with_votes, election: election } + let(:election) { create(:vocdoni_election, :published, :results_published, component:) } + let(:question) { create(:vocdoni_question, :with_votes, election:) } before do election.update!(questions: [question]) @@ -98,7 +98,7 @@ it "shows result information" do expect(page).to have_i18n_content(question.title) - expect(page).to have_content("ELECTION RESULTS") + expect(page).to have_content("Election results") end end end diff --git a/spec/system/decidim/preview_vote_online_spec.rb b/spec/system/decidim/preview_vote_online_spec.rb index 3ea3d30f..300d4d99 100644 --- a/spec/system/decidim/preview_vote_online_spec.rb +++ b/spec/system/decidim/preview_vote_online_spec.rb @@ -2,12 +2,12 @@ require "spec_helper" -describe "Preview vote online in an election", type: :system do +describe "Preview vote online in an election" do # rubocop:disable RSpec/DescribeClass let(:manifest_name) { "vocdoni" } - let!(:election) { create :vocdoni_election, :upcoming, :published, :simple, component: component } - let(:admin) { create(:user, :admin, :confirmed, organization: organization) } + let!(:election) { create(:vocdoni_election, :upcoming, :published, :simple, component:) } + let(:admin) { create(:user, :admin, :confirmed, organization:) } let(:organization) { component.organization } - let!(:elections) { create_list(:vocdoni_election, 2, :vote, component: component) } # prevents redirect to single election page + let!(:elections) { create_list(:vocdoni_election, 2, :vote, component:) } # prevents redirect to single election page let(:router) { Decidim::EngineRouter.main_proxy(component).decidim_participatory_process_vocdoni } before do @@ -21,8 +21,9 @@ describe "preview voting with the admin" do it "can vote", :slow do visit_component - click_link translated(election.title) - click_link "Preview" + check("Upcoming") + click_link_or_button translated(election.title) + click_link_or_button "Preview" expect(page).to have_content("This is a preview of the voting booth.") @@ -41,10 +42,11 @@ it "shows a link to view more information about the election" do visit_component - click_link translated(election.title) - click_link "Preview" + check("Upcoming") + click_link_or_button translated(election.title) + click_link_or_button "Preview" login_step({ email: admin.email, token: "123456" }) - expect(page).to have_content("MORE INFORMATION") + expect(page).to have_content("More information") end end @@ -57,21 +59,22 @@ it "does not show the more information link" do visit_component - click_link translated(election.title) - click_link "Preview" - expect(page).not_to have_content("MORE INFORMATION") + check("Upcoming") + click_link_or_button translated(election.title) + click_link_or_button "Preview" + expect(page).to have_no_content("More information") end end end context "when the election is not published" do - let(:election) { create :vocdoni_election, :upcoming, :simple, component: component } + let(:election) { create(:vocdoni_election, :upcoming, :simple, component:) } it_behaves_like "allows admins to preview the voting booth" end context "when the election has not started yet" do - let(:election) { create :vocdoni_election, :upcoming, :published, :simple, component: component } + let(:election) { create(:vocdoni_election, :upcoming, :published, :simple, component:) } it_behaves_like "allows admins to preview the voting booth" end @@ -86,9 +89,9 @@ context "when the ballot was not send" do it "is alerted when trying to leave the component before completing" do visit_component - - click_link translated(election.title) - click_link "Preview" + check("Upcoming") + click_link_or_button translated(election.title) + click_link_or_button "Preview" dismiss_prompt do page.find("a.focus__exit").click diff --git a/spec/system/decidim/results_online_spec.rb b/spec/system/decidim/results_online_spec.rb index 1aae4987..7a70cd91 100644 --- a/spec/system/decidim/results_online_spec.rb +++ b/spec/system/decidim/results_online_spec.rb @@ -2,13 +2,13 @@ require "spec_helper" -describe "Results online", type: :system do +describe "Results online" do # rubocop:disable RSpec/DescribeClass let(:manifest_name) { "vocdoni" } - let(:user) { create(:user, :confirmed, organization: organization) } + let(:user) { create(:user, :confirmed, organization:) } let(:organization) { component.organization } - let!(:elections) { create_list(:vocdoni_election, 2, :vote, component: component) } # prevents redirect to single election page + let!(:elections) { create_list(:vocdoni_election, 2, :vote, component:) } # prevents redirect to single election page let(:router) { Decidim::EngineRouter.main_proxy(component).decidim_participatory_process_vocdoni } - let!(:wallet) { create(:vocdoni_wallet, organization: organization, private_key: private_key) } + let!(:wallet) { create(:vocdoni_wallet, organization:, private_key:) } let(:private_key) { Faker::Blockchain::Ethereum.address } before do @@ -20,9 +20,9 @@ include_context "with a component" context "when until_the_end is false" do - let!(:election) { create :vocdoni_election, :ongoing, :published, :simple, component: component, election_type: { secret_until_the_end: secret_until_the_end }, vocdoni_election_id: vocdoni_election_id } - let(:question) { create :vocdoni_question, election: election } - let(:answers) { create_list :answer, 2, question: question } + let!(:election) { create(:vocdoni_election, :ongoing, :published, :simple, component:, election_type: { secret_until_the_end: }, vocdoni_election_id:) } + let(:question) { create(:vocdoni_question, election:) } + let(:answers) { create_list(:answer, 2, question:) } let(:secret_until_the_end) { false } let(:vocdoni_election_id) { "12345" } @@ -38,44 +38,46 @@ it "shows the results" do visit_component - click_link translated(election.title) + click_link_or_button translated(election.title) - expect(page).to have_content("VOTE STATISTICS") - expect(page).to have_css(".accordion-content table tr td:nth-child(2)", text: "10", count: 1) - expect(page).to have_css(".accordion-content table tr td:nth-child(2)", text: "12", count: 1) + expect(page).to have_content("Vote statistics") + expect(page).to have_css(".election__accordion-panel-result table tr td:nth-child(2)", text: "10", count: 1) + expect(page).to have_css(".election__accordion-panel-result table tr td:nth-child(2)", text: "12", count: 1) end context "when the election is finished" do - let(:election) { create :vocdoni_election, :finished, :published, :simple, component: component } + let(:election) { create(:vocdoni_election, :finished, :published, :simple, component:) } it "shows the results" do visit_component - click_link translated(election.title) + check("Finished") + click_link_or_button translated(election.title) - expect(page).not_to have_content("VOTE STATISTICS") + expect(page).to have_no_content("VOTE STATISTICS") end end context "when the election is not ongoing" do - let(:election) { create :vocdoni_election, :paused, :published, :simple, component: component } + let(:election) { create(:vocdoni_election, :paused, :published, :simple, component:) } it "shows the results" do visit_component - click_link translated(election.title) + check("Upcoming") + click_link_or_button translated(election.title) - expect(page).not_to have_content("VOTE STATISTICS") + expect(page).to have_no_content("Vote statistics") end end end context "when until_the_end is true" do - let(:election) { create :vocdoni_election, :ongoing, :published, :simple, component: component } + let(:election) { create(:vocdoni_election, :ongoing, :published, :simple, component:) } it "doesn't show the results" do visit_component - click_link translated(election.title) + click_link_or_button translated(election.title) - expect(page).not_to have_content("VOTE STATISTICS") + expect(page).to have_no_content("VOTE STATISTICS") end end end diff --git a/spec/system/decidim/vote_online_spec.rb b/spec/system/decidim/vote_online_spec.rb index ba35be49..6dba6f75 100644 --- a/spec/system/decidim/vote_online_spec.rb +++ b/spec/system/decidim/vote_online_spec.rb @@ -2,12 +2,12 @@ require "spec_helper" -describe "Vote online in an election", type: :system do +describe "Vote online in an election" do # rubocop:disable RSpec/DescribeClass let(:manifest_name) { "vocdoni" } - let!(:election) { create :vocdoni_election, :upcoming, :published, :simple, component: component } - let(:user) { create(:user, :confirmed, organization: organization) } + let!(:election) { create(:vocdoni_election, :upcoming, :published, :simple, component:) } + let(:user) { create(:user, :confirmed, organization:) } let(:organization) { component.organization } - let!(:elections) { create_list(:vocdoni_election, 2, :vote, component: component) } # prevents redirect to single election page + let!(:elections) { create_list(:vocdoni_election, 2, :vote, component:) } # prevents redirect to single election page let(:router) { Decidim::EngineRouter.main_proxy(component).decidim_participatory_process_vocdoni } before do @@ -20,89 +20,107 @@ describe "voting with the current user" do context "when the election is ongoing" do - let!(:election) { create :vocdoni_election, :ongoing, :published, :simple, component: component } + let!(:election) { create(:vocdoni_election, :ongoing, :published, :simple, component:) } it "can access", :slow do visit_component - click_link translated(election.title) + click_link_or_button translated(election.title) expect(page).to have_link("Start voting") - expect(page).not_to have_link("Preview") + expect(page).to have_no_link("Preview") - click_link "Start voting" + click_link_or_button "Start voting" expect(page).to have_content("Verify your identity") end end context "when the election is not published" do - let(:election) { create :vocdoni_election, :upcoming, :simple, component: component } + let(:election) { create(:vocdoni_election, :upcoming, :simple, component:) } it_behaves_like "doesn't allow to vote" it_behaves_like "allows admins to preview the voting booth" end context "when the election has not started yet" do - let(:election) { create :vocdoni_election, :upcoming, :published, :simple, component: component } + let(:election) { create(:vocdoni_election, :upcoming, :published, :simple, component:) } it_behaves_like "doesn't allow to vote" it_behaves_like "allows admins to preview the voting booth" end context "when the election is paused" do - let(:election) { create :vocdoni_election, :paused, :simple, component: component } + let(:election) { create(:vocdoni_election, :paused, :simple, component:) } it_behaves_like "doesn't allow to vote" it_behaves_like "allows admins to preview the voting booth" end context "when the election was canceled" do - let(:election) { create :vocdoni_election, :canceled, :simple, component: component } + let(:election) { create(:vocdoni_election, :canceled, :simple, component:) } it_behaves_like "doesn't allow to vote" it_behaves_like "allows admins to preview the voting booth" end context "when the election has finished" do - let(:election) { create :vocdoni_election, :finished, :published, :simple, component: component } + let(:election) { create(:vocdoni_election, :finished, :published, :simple, component:) } it_behaves_like "doesn't allow to vote" it_behaves_like "doesn't allow admins to preview the voting booth" end end + describe "voting without the current user" do + context "when the election is ongoing" do + let!(:election) { create(:vocdoni_election, :ongoing, :published, :simple, component:) } + + before do + logout :user + visit_component + check("Upcoming") + click_link_or_button translated(election.title) + click_link_or_button "Start voting" + end + + it "shows login modal" do + expect(page).to have_content("Please log in") + end + end + end + describe "internal census" do - let!(:election) { create :vocdoni_election, :ongoing, :published, :with_internal_census, component: component, verification_types: verification_types } - let(:authorization) { create(:authorization, user: user, name: "dummy_authorization_handler") } + let!(:election) { create(:vocdoni_election, :ongoing, :published, :with_internal_census, component:, verification_types:) } + let(:authorization) { create(:authorization, user:, name: "dummy_authorization_handler") } let(:verification_types) { [authorization.name] } context "when the user is not logged in" do before do logout :user visit_component - click_link translated(election.title) - click_link "Start voting" + click_link_or_button translated(election.title) + click_link_or_button "Start voting" end it "shows login modal" do visit_component - click_link translated(election.title) + click_link_or_button translated(election.title) - click_link "Start voting" + click_link_or_button "Start voting" - expect(page).to have_content("Please sign in") + expect(page).to have_content("Please log in") end end context "when the user is logged in" do context "when user is not authorized" do - let(:another_user) { create(:user, :confirmed, organization: organization) } + let(:another_user) { create(:user, :confirmed, organization:) } before do login_as another_user, scope: :user visit_component - click_link translated(election.title) - click_link "Start voting" + click_link_or_button translated(election.title) + click_link_or_button "Start voting" end it "shows a modal with required authorizations" do @@ -115,30 +133,30 @@ before do login_as user, scope: :user visit_component - click_link translated(election.title) - click_link "Start voting" + click_link_or_button translated(election.title) + click_link_or_button "Start voting" end it "doesn't show a modal with required authorizations" do - expect(page).not_to have_content("Authorization required") - expect(page).not_to have_link("Authorize with \"Example authorization\"") + expect(page).to have_no_content("Authorization required") + expect(page).to have_no_link("Authorize with \"Example authorization\"") end end end context "when the census was created without authorized users" do context "when the census is not updated" do - let!(:election) { create :vocdoni_election, :ongoing, :published, :with_internal_census, component: component, verification_types: verification_types } - let(:another_user) { create(:user, :confirmed, organization: organization) } - let!(:voter) { create(:vocdoni_voter, election: election, email: another_user.email, in_vocdoni_census: false) } + let!(:election) { create(:vocdoni_election, :ongoing, :published, :with_internal_census, component:, verification_types:) } + let(:another_user) { create(:user, :confirmed, organization:) } + let!(:voter) { create(:vocdoni_voter, election:, email: another_user.email, in_vocdoni_census: false) } let(:non_voter_ids) { [voter.id] } - let(:admin) { create(:user, :admin, organization: organization) } + let(:admin) { create(:user, :admin, organization:) } before do login_as user, scope: :user visit_component - click_link translated(election.title) - click_link "Start voting" + click_link_or_button translated(election.title) + click_link_or_button "Start voting" end it "shows a message to update the census" do @@ -148,16 +166,16 @@ end context "when the census was created with authorized users" do - let!(:user) { create(:user, :confirmed, organization: organization) } - let!(:authorization) { create(:authorization, user: user, name: "dummy_authorization_handler") } - let!(:voter) { create(:vocdoni_voter, election: election, email: user.email, in_vocdoni_census: true) } - let!(:election) { create :vocdoni_election, :ongoing, :published, :with_internal_census, component: component, verification_types: verification_types } + let!(:user) { create(:user, :confirmed, organization:) } + let!(:authorization) { create(:authorization, user:, name: "dummy_authorization_handler") } + let!(:voter) { create(:vocdoni_voter, election:, email: user.email, in_vocdoni_census: true) } + let!(:election) { create(:vocdoni_election, :ongoing, :published, :with_internal_census, component:, verification_types:) } before do login_as user, scope: :user visit_component - click_link translated(election.title) - click_link "Start voting" + click_link_or_button translated(election.title) + click_link_or_button "Start voting" end it "shows a message to update the census" do diff --git a/spec/types/integration_schema_spec.rb b/spec/types/integration_schema_spec.rb index ff947526..fce5fd91 100644 --- a/spec/types/integration_schema_spec.rb +++ b/spec/types/integration_schema_spec.rb @@ -6,7 +6,7 @@ describe "Decidim::Api::QueryType" do include_context "with a graphql decidim component" let(:component_type) { "Vocdoni" } - let!(:current_component) { create :vocdoni_component, participatory_space: participatory_process } + let!(:current_component) { create(:vocdoni_component, participatory_space: participatory_process) } let!(:election) { create(:vocdoni_election, :published, :finished, component: current_component) } let(:election_single_result) do