diff --git a/.erb-lint.yml b/.erb-lint.yml new file mode 100644 index 0000000..3321add --- /dev/null +++ b/.erb-lint.yml @@ -0,0 +1,30 @@ +--- + +linters: + ExtraNewline: + enabled: true + + FinalNewline: + enabled: true + + SpaceAroundErbTag: + enabled: true + + AllowedScriptType: + enabled: true + allowed_types: + - text/javascript + - text/template + + Rubocop: + enabled: true + + rubocop_config: + AllCops: + DisabledByDefault: true + + Style/StringLiterals: + EnforcedStyle: double_quotes + + Layout/SpaceInsideHashLiteralBraces: + Enabled: true diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..8b2cdbe --- /dev/null +++ b/.eslintignore @@ -0,0 +1,13 @@ +**/*{.,-}min.js +decidim-*/vendor/**/*.js +**/node_modules/** +bundle.js +karma.conf.js +webpack.config.js +webpack.config.babel.js +entry.test.js +entry.js +*_manifest.js +coverage +vendor/bundle +**/vendor/**/*.js diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..08de8c7 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "@decidim" +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..5168571 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,10 @@ +# See https://git-scm.com/docs/gitattributes for more about git attribute files. + +# Mark the database schema as having been generated. +db/schema.rb linguist-generated + +# Mark the yarn lockfile as having been generated. +yarn.lock linguist-generated + +# Mark any vendored files as having been vendored. +vendor/* linguist-vendored diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..dff7229 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,47 @@ +name: Lint + +on: + push: + branches: + - main + pull_request: + +env: + RUBY_VERSION: 3.1.1 + NODE_VERSION: 18.17.1 + +jobs: + lint: + name: Lint code + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2.0.0 + with: + fetch-depth: 1 + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ env.RUBY_VERSION }} + bundler-cache: true + + - uses: actions/setup-node@master + with: + node-version: ${{ env.NODE_VERSION }} + + - run: npm ci + name: Install JS deps + + - run: bundle exec rubocop -P + name: Lint Ruby files + + - run: bundle exec mdl *.md + name: Lint Markdown files + + - run: bundle exec erblint app/views/**/*.erb + name: Lint ERB files + + - run: npm run stylelint + name: Lint SCSS files + + - run: npm run lint + name: Lint JS files diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..e810806 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,82 @@ +name: Test + +on: + push: + branches: + - main + pull_request: + +env: + RUBY_VERSION: 3.1.1 + NODE_VERSION: 18.17.1 + +jobs: + test: + name: Test + runs-on: ubuntu-latest + services: + postgres: + image: postgres:11 + ports: + - 5432:5432 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_HOST_AUTH_METHOD: trust + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 1 + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ env.RUBY_VERSION }} + bundler-cache: true + + - uses: actions/setup-node@master + with: + node-version: ${{ env.NODE_VERSION }} + + - uses: nanasess/setup-chromedriver@v2 + with: + chromedriver-version: 119.0.6045.105 + + - name: List Chrome + shell: "bash" + run: apt list --installed | grep chrome + + - name: Remove Chrome + shell: "bash" + run: sudo apt remove google-chrome-stable + + - uses: browser-actions/setup-chrome@v1 + with: + chrome-version: 119.0.6045.105 + + - name: Bundle Install + run: bundle install + + - name: Setup & create Database + run: bundle exec rake db:test:prepare + env: + RAILS_ENV: test + DATABASE_USERNAME: postgres + DATABASE_PASSWORD: postgres + + - name: Precompile assets + run: | + npm install + bundle exec rake assets:precompile + env: + RAILS_ENV: test + DATABASE_USERNAME: postgres + DATABASE_PASSWORD: postgres + + - name: Run RSpec + run: SIMPLECOV=1 bundle exec rspec + env: + RAILS_ENV: test + DATABASE_USERNAME: postgres + DATABASE_PASSWORD: postgres diff --git a/.gitignore b/.gitignore index c55bb71..6282880 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,15 @@ -*.rbc -capybara-*.html -.rspec +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. /db/*.sqlite3 -/db/*.sqlite3-journal -/db/*.sqlite3-[0-9]* -/public/system -/coverage/ -/spec/tmp -*.orig -rerun.txt -pickle-email-*.html +/db/*.sqlite3-* # Ignore all logfiles and tempfiles. /log/* @@ -17,53 +17,41 @@ pickle-email-*.html !/log/.keep !/tmp/.keep -# TODO Comment out this rule if you are OK with secrets being uploaded to the repo -config/initializers/secret_token.rb -config/master.key - -# Only include if you have production secrets in this file, which is no longer a Rails default -# config/secrets.yml - -# dotenv, dotenv-rails -# TODO Comment out these rules if environment variables can be committed -.env -.env*.local - -## Environment normalization: -/.bundle -/vendor/bundle +# Ignore pidfiles, but keep the directory. +/tmp/pids/* +!/tmp/pids/ +!/tmp/pids/.keep -# these should all be checked in to normalize the environment: -# Gemfile.lock, .ruby-version, .ruby-gemset +# Ignore uploaded files in development. +/storage/* +!/storage/.keep -# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: -.rvmrc +/public/assets +.byebug_history -# if using bower-rails ignore default bower_components path bower.json files -/vendor/assets/bower_components -*.bowerrc -bower.json +# Ignore master key for decrypting credentials and more. +/config/master.key -# Ignore pow environment settings -.powenv +# Ignore env configuration files +.env +.envrc +.rbenv-vars -# Ignore Byebug command history file. -.byebug_history +# Ignore the files and folders generated through Webpack +/public/decidim-packs +/public/packs-test +/public/sw.js +/public/sw.js.map -# Ignore node_modules -node_modules/ +# Ignore node modules +/node_modules -# Ignore precompiled javascript packs -/public/packs -/public/packs-test -/public/assets +# Ignore Tailwind configuration +tailwind.config.js -# Ignore yarn files -/yarn-error.log -yarn-debug.log* -.yarn-integrity +# Ignore temp files by rspec +.rspec-failures -# Ignore uploaded files in development -/storage/* -!/storage/.keep -/public/uploads +Capfile +config/deploy.rb +config/deploy diff --git a/.mdl_style.rb b/.mdl_style.rb new file mode 100644 index 0000000..4ec1c5a --- /dev/null +++ b/.mdl_style.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +all + +exclude_rule "first-line-h1" + +exclude_rule "line-length" + +exclude_rule "no-bare-urls" + +exclude_rule "no-inline-html" + +exclude_rule "ol-prefix" + +exclude_rule "ul-indent" + +rule "no-trailing-punctuation", punctuation: ".,;:!" diff --git a/.mdlrc b/.mdlrc new file mode 100644 index 0000000..27f3882 --- /dev/null +++ b/.mdlrc @@ -0,0 +1 @@ +style ".mdl_style.rb" diff --git a/.node-version b/.node-version new file mode 100644 index 0000000..4a1f488 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +18.17.1 diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..c80dd73 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,26 @@ +inherit_from: .rubocop_todo.yml + +inherit_gem: + decidim-dev: rubocop-decidim.yml + +inherit_mode: + merge: + - Exclude + +AllCops: + Include: + - "**/*.rb" + - "**/*.rake" + - "**/*.ru" + - "**/Gemfile" + - "**/Rakefile" + Exclude: + - "spec/decidim_dummy_app/**/*" + - "**/spec/decidim_dummy_app/**/*" + - "bin/**/*" + - "node_modules/**/*" + - "**/node_modules/**/*" + - "db/schema.rb" + - "db/migrate/*" + - "vendor/**/*" + - "**/vendor/**/*" diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml new file mode 100644 index 0000000..e69de29 diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000..94ff29c --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +3.1.1 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2e0be7e --- /dev/null +++ b/Dockerfile @@ -0,0 +1 @@ +FROM decidim/decidim:0.28.0 diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..e988b13 --- /dev/null +++ b/Gemfile @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +ruby RUBY_VERSION + +DECIDIM_VERSION = "0.28.0" + +gem "decidim", DECIDIM_VERSION +# gem "decidim-conferences", DECIDIM_VERSION +# gem "decidim-design", DECIDIM_VERSION +# gem "decidim-elections", DECIDIM_VERSION +# gem "decidim-initiatives", DECIDIM_VERSION +# gem "decidim-templates", DECIDIM_VERSION + +gem "decidim-decidim_awesome", git: "https://github.com/decidim-ice/decidim-module-decidim_awesome", branch: "develop" +gem "decidim-term_customizer", git: "https://github.com/mainio/decidim-module-term_customizer", branch: "main" + +gem "bootsnap", "~> 1.3" + +gem "puma", ">= 6.3.1" + +gem "wicked_pdf", "~> 2.1" + +group :development, :test do + gem "byebug", "~> 11.0", platform: :mri + + gem "brakeman", "~> 5.4" + gem "decidim-dev", DECIDIM_VERSION + gem "net-imap", "~> 0.2.3" + gem "net-pop", "~> 0.1.1" + gem "net-smtp", "~> 0.3.1" +end + +group :development do + gem "letter_opener_web", "~> 2.0" + gem "listen", "~> 3.1" + gem "mdl" + gem "spring", "~> 2.0" + gem "spring-watcher-listen", "~> 2.0" + gem "web-console", "~> 4.2" + + gem "capistrano" + gem "capistrano-bundler" + gem "capistrano-passenger" + gem "capistrano-rails" + gem "capistrano-rbenv" + gem "capistrano-sidekiq" +end + +group :production do + gem "figaro", "~> 1.2" + gem "sidekiq", "~> 6.0" + gem "whenever", require: false +end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..ad69327 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,890 @@ +GIT + remote: https://github.com/decidim-ice/decidim-module-decidim_awesome + revision: c2aba07f02a82c625ad60786fb54f0b878f42bc4 + branch: develop + specs: + decidim-decidim_awesome (0.11.0) + decidim-admin (>= 0.28.0, < 0.29) + decidim-core (>= 0.28.0, < 0.29) + deface (>= 1.5) + sassc (~> 2.3) + +GIT + remote: https://github.com/mainio/decidim-module-term_customizer + revision: 9133eea57ebfc4164b640efd1ac6b9ca1628c793 + branch: main + specs: + decidim-term_customizer (0.28.0) + decidim-admin (~> 0.28.0) + decidim-core (~> 0.28.0) + +GEM + remote: https://rubygems.org/ + specs: + actioncable (6.1.7.6) + actionpack (= 6.1.7.6) + activesupport (= 6.1.7.6) + 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) + 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) + 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) + 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) + nokogiri (>= 1.8.5) + actionview (6.1.7.6) + activesupport (= 6.1.7.6) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + active_link_to (1.0.5) + actionpack + addressable + activejob (6.1.7.6) + activesupport (= 6.1.7.6) + 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) + marcel (~> 1.0) + mini_mime (>= 1.1.0) + activesupport (6.1.7.6) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + acts_as_list (1.0.4) + activerecord (>= 4.2) + addressable (2.8.4) + public_suffix (>= 2.0.2, < 6.0) + airbrussh (1.5.2) + sshkit (>= 1.6.1, != 1.7.0) + ast (2.4.2) + base64 (0.2.0) + batch-loader (1.5.0) + bcrypt (3.1.19) + better_html (2.0.1) + actionview (>= 6.0) + activesupport (>= 6.0) + ast (~> 2.0) + erubi (~> 1.4) + parser (>= 2.4) + smart_properties + bindex (0.8.1) + bootsnap (1.10.3) + msgpack (~> 1.2) + brakeman (5.4.1) + browser (2.7.1) + builder (3.2.4) + bullet (7.0.7) + activesupport (>= 3.0.0) + uniform_notifier (~> 1.11) + byebug (11.1.3) + capistrano (3.18.1) + airbrussh (>= 1.0.0) + i18n + rake (>= 10.0.0) + sshkit (>= 1.9.0) + capistrano-bundler (2.1.0) + capistrano (~> 3.1) + capistrano-passenger (0.2.1) + capistrano (~> 3.0) + capistrano-rails (1.6.3) + capistrano (~> 3.1) + capistrano-bundler (>= 1.1, < 3) + capistrano-rbenv (2.2.0) + capistrano (~> 3.1) + sshkit (~> 1.3) + capistrano-sidekiq (2.3.1) + capistrano (>= 3.9.0) + capistrano-bundler + sidekiq (>= 6.0) + capybara (3.39.0) + addressable + matrix + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (>= 1.5, < 3.0) + xpath (~> 3.2) + carrierwave (2.2.5) + activemodel (>= 5.0.0) + activesupport (>= 5.0.0) + addressable (~> 2.6) + image_processing (~> 1.1) + marcel (~> 1.0.0) + mini_mime (>= 0.1.3) + ssrf_filter (~> 1.0) + cells (4.1.7) + declarative-builder (< 0.2.0) + declarative-option (< 0.2.0) + tilt (>= 1.4, < 3) + uber (< 0.2.0) + cells-erb (0.1.0) + cells (~> 4.0) + erbse (>= 0.1.1) + cells-rails (0.1.5) + actionpack (>= 5.0) + cells (>= 4.1.6, < 5.0.0) + charlock_holmes (0.7.7) + chef-utils (18.1.0) + concurrent-ruby + chronic (0.10.2) + commonmarker (0.23.10) + concurrent-ruby (1.2.2) + connection_pool (2.4.1) + crack (0.4.5) + rexml + crass (1.0.6) + css_parser (1.11.0) + addressable + date_validator (0.12.0) + activemodel (>= 3) + activesupport (>= 3) + decidim (0.28.0) + decidim-accountability (= 0.28.0) + decidim-admin (= 0.28.0) + decidim-api (= 0.28.0) + decidim-assemblies (= 0.28.0) + decidim-blogs (= 0.28.0) + decidim-budgets (= 0.28.0) + decidim-comments (= 0.28.0) + decidim-core (= 0.28.0) + decidim-debates (= 0.28.0) + decidim-forms (= 0.28.0) + decidim-generators (= 0.28.0) + decidim-meetings (= 0.28.0) + decidim-pages (= 0.28.0) + decidim-participatory_processes (= 0.28.0) + decidim-proposals (= 0.28.0) + decidim-sortitions (= 0.28.0) + decidim-surveys (= 0.28.0) + decidim-system (= 0.28.0) + decidim-templates (= 0.28.0) + decidim-verifications (= 0.28.0) + decidim-accountability (0.28.0) + decidim-comments (= 0.28.0) + decidim-core (= 0.28.0) + decidim-admin (0.28.0) + active_link_to (~> 1.0) + decidim-core (= 0.28.0) + devise (~> 4.7) + devise-i18n (~> 1.2) + devise_invitable (~> 2.0, >= 2.0.9) + decidim-api (0.28.0) + commonmarker (~> 0.23.0, >= 0.23.9) + graphql (~> 2.0.0) + graphql-docs (~> 3.0.1) + rack-cors (~> 1.0) + decidim-assemblies (0.28.0) + decidim-core (= 0.28.0) + decidim-blogs (0.28.0) + decidim-admin (= 0.28.0) + decidim-comments (= 0.28.0) + decidim-core (= 0.28.0) + decidim-budgets (0.28.0) + decidim-comments (= 0.28.0) + decidim-core (= 0.28.0) + decidim-comments (0.28.0) + decidim-core (= 0.28.0) + redcarpet (~> 3.5, >= 3.5.1) + decidim-core (0.28.0) + active_link_to (~> 1.0) + acts_as_list (~> 1.0) + batch-loader (~> 1.2) + browser (~> 2.7) + carrierwave (~> 2.2.5, >= 2.2.5) + cells-erb (~> 0.1.0) + cells-rails (~> 0.1.3) + charlock_holmes (~> 0.7) + date_validator (~> 0.12.0) + decidim-api (= 0.28.0) + devise (~> 4.7) + devise-i18n (~> 1.2, < 1.11.1) + diffy (~> 3.3) + doorkeeper (~> 5.6, >= 5.6.6) + doorkeeper-i18n (~> 4.0) + file_validators (~> 3.0) + fog-local (~> 0.6) + foundation_rails_helper (~> 4.0) + geocoder (~> 1.8) + hashdiff (>= 0.4.0, < 2.0.0) + invisible_captcha (~> 0.12) + kaminari (~> 1.2, >= 1.2.1) + loofah (~> 2.19, >= 2.19.1) + mime-types (>= 1.16, < 4.0) + mini_magick (~> 4.9) + mustache (~> 1.1.0) + 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.4.0, < 2) + pg_search (~> 2.2) + premailer-rails (~> 1.10) + psych (~> 4.0) + rack (~> 2.2, >= 2.2.6.4) + rack-attack (~> 6.0) + rails (~> 6.1.7, >= 6.1.7.4) + rails-i18n (~> 6.0) + ransack (~> 3.2.1) + redis (~> 4.1) + request_store (~> 1.5.0) + rubyXL (~> 3.4) + rubyzip (~> 2.0) + seven_zip_ruby (~> 1.3) + shakapacker (~> 7.1.0) + valid_email2 (~> 4.0) + web-push (~> 3.0) + wisper (~> 2.0) + decidim-debates (0.28.0) + decidim-comments (= 0.28.0) + decidim-core (= 0.28.0) + decidim-dev (0.28.0) + bullet (~> 7.0) + byebug (~> 11.0) + capybara (~> 3.39) + decidim (= 0.28.0) + 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.10) + rspec-rails (~> 6.0) + rspec-retry (~> 0.6.2) + 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.18) + wisper-rspec (~> 1.0) + decidim-forms (0.28.0) + decidim-core (= 0.28.0) + wicked_pdf (~> 2.1) + wkhtmltopdf-binary (~> 0.12) + decidim-generators (0.28.0) + decidim-core (= 0.28.0) + decidim-meetings (0.28.0) + decidim-core (= 0.28.0) + decidim-forms (= 0.28.0) + icalendar (~> 2.5) + decidim-pages (0.28.0) + decidim-core (= 0.28.0) + decidim-participatory_processes (0.28.0) + decidim-core (= 0.28.0) + decidim-proposals (0.28.0) + decidim-comments (= 0.28.0) + decidim-core (= 0.28.0) + doc2text (~> 0.4.6) + redcarpet (~> 3.5, >= 3.5.1) + decidim-sortitions (0.28.0) + decidim-admin (= 0.28.0) + decidim-comments (= 0.28.0) + decidim-core (= 0.28.0) + decidim-proposals (= 0.28.0) + decidim-surveys (0.28.0) + decidim-core (= 0.28.0) + decidim-forms (= 0.28.0) + decidim-templates (= 0.28.0) + decidim-system (0.28.0) + active_link_to (~> 1.0) + decidim-core (= 0.28.0) + devise (~> 4.7) + devise-i18n (~> 1.2) + devise_invitable (~> 2.0, >= 2.0.9) + decidim-templates (0.28.0) + decidim-core (= 0.28.0) + decidim-forms (= 0.28.0) + decidim-verifications (0.28.0) + decidim-core (= 0.28.0) + declarative-builder (0.1.0) + declarative-option (< 0.2.0) + declarative-option (0.1.0) + deface (1.9.0) + actionview (>= 5.2) + nokogiri (>= 1.6) + polyglot + railties (>= 5.2) + rainbow (>= 2.1.0) + devise (4.9.3) + bcrypt (~> 3.0) + orm_adapter (~> 0.1) + railties (>= 4.1.0) + responders + warden (~> 1.2.3) + devise-i18n (1.11.0) + devise (>= 4.9.0) + devise_invitable (2.0.9) + actionmailer (>= 5.0) + devise (>= 4.6) + diff-lcs (1.5.0) + diffy (3.4.2) + digest (3.1.1) + doc2text (0.4.6) + nokogiri (>= 1.13.2, < 1.15.0) + rubyzip (~> 2.3.0) + docile (1.4.0) + doorkeeper (5.6.6) + railties (>= 5) + doorkeeper-i18n (4.0.1) + erb_lint (0.4.0) + activesupport + better_html (>= 2.0.1) + parser (>= 2.7.1.4) + rainbow + rubocop + smart_properties + erbse (0.1.4) + temple + erubi (1.12.0) + escape_utils (1.2.2) + excon (0.92.3) + extended-markdown-filter (0.7.0) + html-pipeline (~> 2.9) + factory_bot (6.2.1) + activesupport (>= 5.0.0) + factory_bot_rails (6.2.0) + factory_bot (~> 6.2.0) + railties (>= 5.0.0) + faker (3.2.0) + i18n (>= 1.8.11, < 2) + faraday (1.10.0) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.0.4) + multipart-post (~> 2) + faraday-net_http (1.0.1) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + ffi (1.15.5) + figaro (1.2.0) + thor (>= 0.14.0, < 2) + file_validators (3.0.0) + activemodel (>= 3.2) + mime-types (>= 1.0) + fog-core (2.3.0) + builder + excon (~> 0.71) + formatador (>= 0.2, < 2.0) + mime-types + fog-local (0.8.0) + fog-core (>= 1.27, < 3.0) + formatador (1.1.0) + foundation_rails_helper (4.0.1) + actionpack (>= 4.1, < 7.1) + activemodel (>= 4.1, < 7.1) + activesupport (>= 4.1, < 7.1) + railties (>= 4.1, < 7.1) + gemoji (3.0.1) + geocoder (1.8.1) + globalid (1.2.1) + activesupport (>= 6.1) + graphql (2.0.21) + graphql-docs (3.0.1) + commonmarker (~> 0.16) + escape_utils (~> 1.2.2) + extended-markdown-filter (~> 0.4) + gemoji (~> 3.0) + graphql (~> 2.0) + html-pipeline (~> 2.9) + sass (~> 3.4) + hashdiff (1.0.1) + hashie (5.0.0) + highline (2.0.3) + hkdf (1.0.0) + html-pipeline (2.14.3) + activesupport (>= 2) + nokogiri (>= 1.4) + htmlentities (4.3.4) + i18n (1.14.1) + concurrent-ruby (~> 1.0) + i18n-tasks (1.0.12) + 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) + rails-i18n + rainbow (>= 2.2.2, < 4.0) + terminal-table (>= 1.5.1) + icalendar (2.7.1) + ice_cube (~> 0.16) + ice_cube (0.16.4) + 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.6.3) + jwt (2.5.0) + kaminari (1.2.2) + activesupport (>= 4.1.0) + kaminari-actionview (= 1.2.2) + kaminari-activerecord (= 1.2.2) + kaminari-core (= 1.2.2) + kaminari-actionview (1.2.2) + actionview + kaminari-core (= 1.2.2) + kaminari-activerecord (1.2.2) + 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) + addressable (~> 2.8) + letter_opener (1.8.1) + launchy (>= 2.2, < 3) + letter_opener_web (2.0.0) + actionmailer (>= 5.2) + letter_opener (~> 1.7) + railties (>= 5.2) + rexml + listen (3.7.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + loofah (2.21.4) + crass (~> 1.0.2) + nokogiri (>= 1.12.0) + mail (2.8.1) + mini_mime (>= 0.1.1) + net-imap + net-pop + net-smtp + marcel (1.0.2) + matrix (0.4.2) + mdl (0.12.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) + mime-types (3.4.1) + mime-types-data (~> 3.2015) + mime-types-data (3.2022.0105) + mini_magick (4.12.0) + mini_mime (1.1.5) + mini_portile2 (2.8.5) + minitest (5.20.0) + mixlib-cli (2.1.8) + mixlib-config (3.0.27) + tomlrb + mixlib-shellout (3.2.7) + chef-utils + msgpack (1.4.5) + multi_json (1.15.0) + multi_xml (0.6.0) + multipart-post (2.2.3) + mustache (1.1.1) + mutex_m (0.2.0) + net-imap (0.2.3) + digest + net-protocol + strscan + net-pop (0.1.2) + net-protocol + net-protocol (0.2.1) + timeout + net-scp (4.0.0) + net-ssh (>= 2.6.5, < 8.0.0) + net-sftp (4.0.0) + net-ssh (>= 5.0.0, < 8.0.0) + net-smtp (0.3.3) + net-protocol + net-ssh (7.2.3) + nio4r (2.5.9) + nokogiri (1.14.5) + mini_portile2 (~> 2.8.0) + racc (~> 1.4) + oauth (0.5.10) + oauth2 (1.4.9) + faraday (>= 0.17.3, < 3.0) + jwt (>= 1.0, < 3.0) + multi_json (~> 1.3) + multi_xml (~> 0.5) + rack (>= 1.2, < 3) + omniauth (2.1.1) + hashie (>= 3.4.6) + rack (>= 2.2.3) + rack-protection + omniauth-facebook (5.0.0) + omniauth-oauth2 (~> 1.2) + omniauth-google-oauth2 (1.0.1) + jwt (>= 2.0) + oauth2 (~> 1.1) + omniauth (~> 2.0) + omniauth-oauth2 (~> 1.7.1) + omniauth-oauth (1.2.0) + oauth + omniauth (>= 1.0, < 3) + omniauth-oauth2 (1.7.3) + oauth2 (>= 1.4, < 3) + omniauth (>= 1.9, < 3) + omniauth-rails_csrf_protection (1.0.1) + actionpack (>= 4.2) + omniauth (~> 2.0) + omniauth-twitter (1.4.0) + omniauth-oauth (~> 1.1) + rack + openssl (3.1.0) + orm_adapter (0.5.0) + paper_trail (12.3.0) + activerecord (>= 5.2) + request_store (~> 1.1) + parallel (1.22.1) + parallel_tests (4.2.0) + parallel + parser (3.2.2.1) + ast (~> 2.4.1) + pg (1.4.1) + pg_search (2.3.6) + activerecord (>= 5.2) + activesupport (>= 5.2) + polyglot (0.3.5) + premailer (1.16.0) + addressable + css_parser (>= 1.6.0) + htmlentities (>= 4.0.0) + premailer-rails (1.11.1) + actionmailer (>= 3) + premailer (~> 1.7, >= 1.7.9) + psych (4.0.6) + stringio + public_suffix (5.0.1) + puma (6.3.1) + nio4r (~> 2.0) + racc (1.7.2) + rack (2.2.8) + rack-attack (6.6.1) + rack (>= 1.0, < 3) + rack-cors (1.1.1) + rack (>= 2.0.0) + rack-protection (3.0.6) + rack + rack-proxy (0.7.7) + 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) + bundler (>= 1.15.0) + railties (= 6.1.7.6) + sprockets-rails (>= 2.0.0) + rails-controller-testing (1.0.5) + actionpack (>= 5.0.1.rc1) + actionview (>= 5.0.1.rc1) + activesupport (>= 5.0.1.rc1) + rails-dom-testing (2.2.0) + activesupport (>= 5.0.0) + minitest + nokogiri (>= 1.6) + 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) + method_source + rake (>= 12.2) + thor (~> 1.0) + rainbow (3.1.1) + rake (13.1.0) + ransack (3.2.1) + activerecord (>= 6.1.5) + activesupport (>= 6.1.5) + i18n + rb-fsevent (0.11.2) + rb-inotify (0.10.1) + ffi (~> 1.0) + redcarpet (3.5.1) + redis (4.6.0) + regexp_parser (2.5.0) + request_store (1.5.1) + rack (>= 1.4) + responders (3.1.1) + actionpack (>= 5.2) + railties (>= 5.2) + rexml (3.2.5) + rspec (3.12.0) + rspec-core (~> 3.12.0) + rspec-expectations (~> 3.12.0) + rspec-mocks (~> 3.12.0) + rspec-cells (0.3.8) + cells (>= 4.0.0, < 6.0.0) + rspec-rails (>= 3.0.0, < 6.1.0) + rspec-core (3.12.2) + rspec-support (~> 3.12.0) + rspec-expectations (3.12.3) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.12.0) + rspec-html-matchers (0.10.0) + nokogiri (~> 1) + rspec (>= 3.0.0.a) + rspec-mocks (3.12.5) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.12.0) + rspec-rails (6.0.1) + actionpack (>= 6.1) + activesupport (>= 6.1) + railties (>= 6.1) + rspec-core (~> 3.11) + rspec-expectations (~> 3.11) + rspec-mocks (~> 3.11) + rspec-support (~> 3.11) + rspec-retry (0.6.2) + rspec-core (> 3.3) + rspec-support (3.12.0) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rubocop (1.50.2) + json (~> 2.3) + parallel (~> 1.10) + parser (>= 3.2.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.28.1) + parser (>= 3.2.1.0) + rubocop-capybara (2.18.0) + rubocop (~> 1.41) + rubocop-faker (1.1.0) + faker (>= 2.12.0) + rubocop (>= 0.82.0) + rubocop-rails (2.19.1) + activesupport (>= 4.2.0) + rack (>= 1.1) + rubocop (>= 1.33.0, < 2.0) + rubocop-rspec (2.20.0) + rubocop (~> 1.33) + rubocop-capybara (~> 2.17) + ruby-progressbar (1.11.0) + ruby-vips (2.1.4) + ffi (~> 1.12) + ruby2_keywords (0.0.5) + rubyXL (3.4.25) + nokogiri (>= 1.10.8) + rubyzip (>= 1.3.0) + rubyzip (2.3.2) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sassc (2.4.0) + ffi (~> 1.9) + selenium-webdriver (4.9.0) + rexml (~> 3.2, >= 3.2.5) + rubyzip (>= 1.2.2, < 3.0) + websocket (~> 1.0) + semantic_range (3.0.0) + seven_zip_ruby (1.3.0) + shakapacker (7.1.0) + activesupport (>= 5.2) + rack-proxy (>= 0.6.1) + railties (>= 5.2) + semantic_range (>= 2.3.0) + sidekiq (6.5.9) + connection_pool (>= 2.2.5, < 3) + rack (~> 2.0) + redis (>= 4.5.0, < 5) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + smart_properties (1.17.0) + spring (2.1.1) + spring-watcher-listen (2.0.1) + listen (>= 2.7, < 4.0) + spring (>= 1.2, < 3.0) + sprockets (4.2.0) + concurrent-ruby (~> 1.0) + rack (>= 2.2.4, < 4) + sprockets-rails (3.4.2) + actionpack (>= 5.2) + activesupport (>= 5.2) + sprockets (>= 3.0.0) + sshkit (1.22.1) + base64 + mutex_m + net-scp (>= 1.1.2) + net-sftp (>= 2.1.2) + net-ssh (>= 2.8.0) + ssrf_filter (1.1.1) + stringio (3.1.0) + strscan (3.0.7) + temple (0.8.2) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + thor (1.3.0) + tilt (2.1.0) + timeout (0.4.0) + tomlrb (2.0.3) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + uber (0.1.0) + unicode-display_width (2.4.2) + uniform_notifier (1.16.0) + valid_email2 (4.0.6) + activemodel (>= 3.2) + mail (~> 2.5) + w3c_rspec_validators (0.3.0) + rails + rspec + w3c_validators + w3c_validators (1.3.7) + json (>= 1.8) + nokogiri (~> 1.6) + rexml (~> 3.2) + warden (1.2.9) + rack (>= 2.0.9) + web-console (4.2.0) + actionview (>= 6.0.0) + activemodel (>= 6.0.0) + bindex (>= 0.4.0) + railties (>= 6.0.0) + web-push (3.0.0) + hkdf (~> 1.0) + jwt (~> 2.0) + openssl (~> 3.0) + webmock (3.18.1) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + websocket (1.2.9) + websocket-driver (0.7.6) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + whenever (1.0.0) + chronic (>= 0.6.3) + wicked_pdf (2.7.0) + activesupport + wisper (2.0.1) + wisper-rspec (1.1.0) + wkhtmltopdf-binary (0.12.6.5) + xpath (3.2.0) + nokogiri (~> 1.8) + zeitwerk (2.6.12) + +PLATFORMS + ruby + +DEPENDENCIES + bootsnap (~> 1.3) + brakeman (~> 5.4) + byebug (~> 11.0) + capistrano + capistrano-bundler + capistrano-passenger + capistrano-rails + capistrano-rbenv + capistrano-sidekiq + decidim (= 0.28.0) + decidim-decidim_awesome! + decidim-dev (= 0.28.0) + decidim-term_customizer! + figaro (~> 1.2) + letter_opener_web (~> 2.0) + listen (~> 3.1) + mdl + net-imap (~> 0.2.3) + net-pop (~> 0.1.1) + net-smtp (~> 0.3.1) + puma (>= 6.3.1) + sidekiq (~> 6.0) + spring (~> 2.0) + spring-watcher-listen (~> 2.0) + web-console (~> 4.2) + whenever + wicked_pdf (~> 2.1) + +RUBY VERSION + ruby 3.1.1p18 + +BUNDLED WITH + 2.4.6 diff --git a/LICENSE b/LICENSE-AGPLv3.txt similarity index 99% rename from LICENSE rename to LICENSE-AGPLv3.txt index 0ad25db..dbbe355 100644 --- a/LICENSE +++ b/LICENSE-AGPLv3.txt @@ -1,7 +1,7 @@ GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -643,7 +643,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -658,4 +658,4 @@ specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see -. +. diff --git a/Procfile.dev b/Procfile.dev new file mode 100644 index 0000000..01fcc9f --- /dev/null +++ b/Procfile.dev @@ -0,0 +1,2 @@ +web: bin/rails server -b 0.0.0.0 -p 3000 +shakapacker: bin/shakapacker-dev-server diff --git a/README.md b/README.md index bc726e1..7db0aaf 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,21 @@ -# decidim-inspire -INSPIRE project participation platform +# Decidim INSPIRE + +[![[CI] Lint](https://github.com/Platoniq/decidim-inspire/actions/workflows/lint.yml/badge.svg)](https://github.com/Platoniq/decidim-inspire/actions/workflows/lint.yml) +[![[CI] Test](https://github.com/Platoniq/decidim-inspire/actions/workflows/test.yml/badge.svg)](https://github.com/Platoniq/decidim-inspire/actions/workflows/test.yml) +[![Maintainability](https://api.codeclimate.com/v1/badges/1b64ecc017885bdf5076/maintainability)](https://codeclimate.com/github/Platoniq/decidim-inspire/maintainability) + +Free Open-Source participatory democracy, citizen participation and open government for cities and organizations + +This is the open-source repository for decidim_inspire, based on [Decidim](https://github.com/decidim/decidim). + +## Setting up the application + +You will need to do some steps before having the app working properly once you have deployed it: + +1. Create a System Admin user: `bin/rails decidim_system:create_admin` +2. Visit `/system` and login with your system admin credentials +3. Create a new organization. Check the locales you want to use for that organization, and select a default locale. +4. Set the correct default host for the organization, otherwise the app will not work properly. Note that you need to include any subdomain you might be using. +5. Fill the rest of the form and submit it. + +You are good to go! diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..d2a78aa --- /dev/null +++ b/Rakefile @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require_relative "config/application" + +Rails.application.load_tasks diff --git a/app/channels/application_cable/channel.rb b/app/channels/application_cable/channel.rb new file mode 100644 index 0000000..9aec230 --- /dev/null +++ b/app/channels/application_cable/channel.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +module ApplicationCable + class Channel < ActionCable::Channel::Base + end +end diff --git a/app/channels/application_cable/connection.rb b/app/channels/application_cable/connection.rb new file mode 100644 index 0000000..8d6c2a1 --- /dev/null +++ b/app/channels/application_cable/connection.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +module ApplicationCable + class Connection < ActionCable::Connection::Base + end +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb new file mode 100644 index 0000000..7944f9f --- /dev/null +++ b/app/controllers/application_controller.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +class ApplicationController < ActionController::Base +end diff --git a/app/controllers/concerns/.keep b/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/controllers/decidim_controller.rb b/app/controllers/decidim_controller.rb new file mode 100644 index 0000000..85919c0 --- /dev/null +++ b/app/controllers/decidim_controller.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +# Entry point for Decidim. It will use the `DecidimController` as +# entry point, but you can change what controller it inherits from +# so you can customize some methods. +class DecidimController < ApplicationController +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb new file mode 100644 index 0000000..15b06f0 --- /dev/null +++ b/app/helpers/application_helper.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +module ApplicationHelper +end diff --git a/app/jobs/application_job.rb b/app/jobs/application_job.rb new file mode 100644 index 0000000..bef3959 --- /dev/null +++ b/app/jobs/application_job.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class ApplicationJob < ActiveJob::Base + # Automatically retry jobs that encountered a deadlock + # retry_on ActiveRecord::Deadlocked + + # Most jobs are safe to ignore if the underlying records are no longer available + # discard_on ActiveJob::DeserializationError +end diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb new file mode 100644 index 0000000..5cc63a0 --- /dev/null +++ b/app/mailers/application_mailer.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +class ApplicationMailer < ActionMailer::Base + default from: "from@example.com" + layout "mailer" +end diff --git a/app/models/application_record.rb b/app/models/application_record.rb new file mode 100644 index 0000000..71fbba5 --- /dev/null +++ b/app/models/application_record.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class ApplicationRecord < ActiveRecord::Base + self.abstract_class = true +end diff --git a/app/models/concerns/.keep b/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/packs/images/.keep b/app/packs/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/packs/src/decidim/decidim_application.js b/app/packs/src/decidim/decidim_application.js new file mode 100644 index 0000000..5d5dcf5 --- /dev/null +++ b/app/packs/src/decidim/decidim_application.js @@ -0,0 +1,5 @@ +// This file is compiled inside Decidim core pack. Code can be added here and will be executed +// as part of that pack + +// Load images +require.context("../../images", true) diff --git a/app/packs/stylesheets/decidim/decidim_application.scss b/app/packs/stylesheets/decidim/decidim_application.scss new file mode 100644 index 0000000..5b876c8 --- /dev/null +++ b/app/packs/stylesheets/decidim/decidim_application.scss @@ -0,0 +1,8 @@ +// This is a file that can be overridden by the application in order to override styles +// Notice that this file is included at the very end of the stylesheets packs to have +// more priority +// +// To override the Tailwind CSS configuration you can do so by following the instructions +// available at https://docs.decidim.org/en/develop/customize/styles.html#_tailwind_css +// +// By default this is empty. diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb new file mode 100644 index 0000000..3aac900 --- /dev/null +++ b/app/views/layouts/mailer.html.erb @@ -0,0 +1,13 @@ + + + + + + + + + <%= yield %> + + diff --git a/app/views/static/api/docs/assets/images/graphiql-headers.png b/app/views/static/api/docs/assets/images/graphiql-headers.png new file mode 100644 index 0000000..8051704 Binary files /dev/null and b/app/views/static/api/docs/assets/images/graphiql-headers.png differ diff --git a/app/views/static/api/docs/assets/images/graphiql-variables.png b/app/views/static/api/docs/assets/images/graphiql-variables.png new file mode 100644 index 0000000..fd76772 Binary files /dev/null and b/app/views/static/api/docs/assets/images/graphiql-variables.png differ diff --git a/app/views/static/api/docs/assets/images/graphiql.png b/app/views/static/api/docs/assets/images/graphiql.png new file mode 100644 index 0000000..e647c79 Binary files /dev/null and b/app/views/static/api/docs/assets/images/graphiql.png differ diff --git a/app/views/static/api/docs/assets/images/menu.png b/app/views/static/api/docs/assets/images/menu.png new file mode 100644 index 0000000..656353d Binary files /dev/null and b/app/views/static/api/docs/assets/images/menu.png differ diff --git a/app/views/static/api/docs/assets/images/navbar.png b/app/views/static/api/docs/assets/images/navbar.png new file mode 100644 index 0000000..df38e90 Binary files /dev/null and b/app/views/static/api/docs/assets/images/navbar.png differ diff --git a/app/views/static/api/docs/assets/style.css b/app/views/static/api/docs/assets/style.css new file mode 100644 index 0000000..7626413 --- /dev/null +++ b/app/views/static/api/docs/assets/style.css @@ -0,0 +1,1115 @@ +@import "//hello.myfonts.net/count/2c4b9d"; +* { + box-sizing: border-box; } + +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; } + +/* HTML5 display-role reset for older browsers */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section { + display: block; } + +body { + line-height: 1; } + +ol, +ul { + list-style: none; } + +blockquote, +q { + quotes: none; } + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +@font-face { + font-family: 'ProximaNova-Light'; + src: url("webfonts/2C4B9D_B_0.eot"); + src: url("webfonts/2C4B9D_B_0.eot?#iefix") format("embedded-opentype"), url("webfonts/2C4B9D_B_0.woff2") format("woff2"), url("webfonts/2C4B9D_B_0.woff") format("woff"), url("webfonts/2C4B9D_B_0.ttf") format("truetype"); } +@font-face { + font-family: 'ProximaNova-Semibold'; + src: url("webfonts/2C4B9D_C_0.eot"); + src: url("webfonts/2C4B9D_C_0.eot?#iefix") format("embedded-opentype"), url("webfonts/2C4B9D_C_0.woff2") format("woff2"), url("webfonts/2C4B9D_C_0.woff") format("woff"), url("webfonts/2C4B9D_C_0.ttf") format("truetype"); } +@font-face { + font-family: 'ProximaNova-Regular'; + src: url("webfonts/2C4B9D_D_0.eot"); + src: url("webfonts/2C4B9D_D_0.eot?#iefix") format("embedded-opentype"), url("webfonts/2C4B9D_D_0.woff2") format("woff2"), url("webfonts/2C4B9D_D_0.woff") format("woff"), url("webfonts/2C4B9D_D_0.ttf") format("truetype"); } +@font-face { + font-family: 'ProximaNova-Bold'; + src: url("webfonts/2C4B9D_E_0.eot"); + src: url("webfonts/2C4B9D_E_0.eot?#iefix") format("embedded-opentype"), url("webfonts/2C4B9D_E_0.woff2") format("woff2"), url("webfonts/2C4B9D_E_0.woff") format("woff"), url("webfonts/2C4B9D_E_0.ttf") format("truetype"); } +body { + font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-size: 16px; + font-weight: 400; + color: #444; } + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: 'ProximaNova-Semibold'; + font-weight: 200; } + +em { + font-style: italic; } + +#wrap { + padding-top: 100px; + padding-left: 300px; + height: 100%; } + +#header { + position: fixed; + z-index: 2; + top: 0; + left: 0; + width: 100%; + height: 100px; + font-family: 'ProximaNova-Semibold'; } + +#top-nav { + height: 30px; + line-height: 30px; + background-color: #27272b; } + #top-nav a { + text-decoration: none; } + +#top-nav-links { + list-style-type: none; + position: absolute; + top: 0; + right: 30px; } + #top-nav-links li { + float: left; + margin-left: 20px; } + #top-nav-links a { + display: inline-block; + height: 30px; + padding: 0 5px; + color: #fff; + font-size: 10px; + letter-spacing: 1.5px; + text-transform: uppercase; } + +#site-nav { + position: relative; + height: 70px; + background-color: #fff; + border-bottom: 1px solid #eee; + padding: 14px 30px; } + #site-nav a { + vertical-align: bottom; } + #site-nav span { + vertical-align: bottom; } + #site-nav select { + vertical-align: bottom; } + #site-nav .sub-title { + margin: 0 8px; + position: relative; + top: 1px; } + #site-nav .logo img { + height: 50px; + margin-bottom: -20px; } + #site-nav .search-box { + position: absolute; + right: 30px; + top: 20px; } + +#sidebar { + background-color: #fff; + position: fixed; + z-index: 2; + top: 30px; + left: 0; + bottom: 0; + width: 300px; + padding: 20px 30px; + overflow-x: hidden; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: none; + font-family: 'ProximaNova-Semibold'; + border-right: 1px solid #eee; + font-size: 16px; + line-height: 1.1em; } + #sidebar::-webkit-scrollbar { + width: 0 !important; } + #sidebar li { + margin-bottom: 0.6em; } + #sidebar a { + color: #444; + text-decoration: none; } + #sidebar a:hover { + color: #de4f4f; } + #sidebar a.current { + color: #de4f4f; } + #sidebar a.H2 { + font-weight: bold; } + #sidebar .categories > li > p { + margin-top: 1.5em; + border-top: 1px solid #eee; + text-transform: uppercase; + padding-top: 1.2em; + margin-bottom: 1em; + color: #999; + font-size: 0.8em; } + #sidebar .sub-menu { + font-family: 'ProximaNova-Regular'; + padding-left: 20px; + margin: 0.6em 0; + font-size: 14px; } + #sidebar .sub-menu .active { + position: relative; + color: #de4f4f; } + #sidebar .sub-menu .active:before { + content: ""; + position: absolute; + top: 2px; + left: -15px; + display: inline-block; + width: 0; + height: 0; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 6px solid #de4f4f; } + +#sidebar-mobile { + display: none; + margin-bottom: 20px; } + #sidebar-mobile .search-box { + width: 200px; + margin-bottom: 20px; } + +#content { + padding: 20px 30px; + max-width: 760px; + margin: 0px auto; + -webkit-text-size-adjust: 100%; } + #content em { + font-style: italic; } + #content strong { + font-family: 'ProximaNova-Bold'; } + #content h1 { + margin: 15px 0; + line-height: 1.4em; + font-size: 2em; + margin-top: 0; + margin-bottom: 30px; } + #content h2 { + margin: 15px 0; + line-height: 1.4em; + font-size: 1.5em; + margin-top: 30px; + padding-bottom: 10px; + border-bottom: 1px solid #eee; + position: relative; } + #content h2 .anchor { + opacity: 0; + position: absolute; + font-size: 16px; + top: 2px; + left: -21px; } + #content h2:hover .anchor { + opacity: 1; } + #content h3 { + margin: 15px 0; + line-height: 1.4em; + font-size: 1.2em; + margin-top: 30px; + position: relative; } + #content h3 .anchor { + opacity: 0; + position: absolute; + font-size: 16px; + top: 2px; + left: -21px; } + #content h3:hover .anchor { + opacity: 1; } + #content h4 { + margin: 15px 0; + line-height: 1.4em; } + #content h5 { + margin: 15px 0; + line-height: 1.4em; } + #content h6 { + margin: 15px 0; + line-height: 1.4em; } + #content p { + margin: 15px 0; + line-height: 1.4em; } + #content ul { + margin: 15px 0; + line-height: 1.4em; + padding-left: 1.5em; + list-style-type: disc; } + #content ul li { + margin-bottom: 5px; } + #content ol { + margin: 15px 0; + line-height: 1.4em; + padding-left: 1.5em; + list-style-type: decimal; } + #content ol li { + margin-bottom: 5px; } + #content figure { + margin: 15px 0; + line-height: 1.4em; } + #content a { + color: #de4f4f; } + #content img { + max-width: 100%; } + #content code { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 0.8em; + line-height: 1.6em; + padding: 1px 4px; + background-color: #eee; + margin: 0 2px; } + #content blockquote { + padding-left: 1.3em; + border-left: #eee solid 0.2em; + font-style: italic; } + #content blockquote.warning { + border-color: #f00; + color: #f00; } + #content dl { + margin-left: 1.5em; } + #content dl dt .name { + font-family: monospace; } + #content dl dt .type { + margin-left: 0.5em; } + #content dl dd { + margin-left: 1.5em; } + #content .edit-discuss-links { + margin-top: -25px; + margin-bottom: 40px; } + #content table { + margin-top: 10px; } + #content table th { + text-align: left; + padding: 0 25px 0 25px; } + #content table thead th:first-child { + padding: 0; } + #content table td p { + padding: 0 25px 0 25px; } + #content pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + line-height: 1.6em; + margin: 20px 0; + overflow-x: auto; + position: relative; + padding: 20px 30px; } + #content pre table { + width: 100%; + border-collapse: collapse; + padding: 0; + margin: 0; } + #content pre tr { + width: 100%; + border-collapse: collapse; + padding: 0; + margin: 0; } + #content pre td { + width: 100%; + border-collapse: collapse; + padding: 0; + margin: 0; } + #content pre code { + background-color: #272822; + padding: 0; + margin: 0; } + #content pre .gutter { + user-select: none; + width: 1.5em; + padding-right: 30px; } + #content .highlight.html .code:after { + font-family: 'ProximaNova-Semibold'; + position: absolute; + top: 0; + right: 0; + color: #ccc; + text-align: right; + font-size: 0.75em; + padding: 5px 10px 0; + letter-spacing: 1.5px; + line-height: 15px; + height: 15px; + font-weight: 600; } + #content .highlight.js .code:after { + font-family: 'ProximaNova-Semibold'; + position: absolute; + top: 0; + right: 0; + color: #ccc; + text-align: right; + font-size: 0.75em; + padding: 5px 10px 0; + letter-spacing: 1.5px; + line-height: 15px; + height: 15px; + font-weight: 600; } + #content .highlight.bash .code:after { + font-family: 'ProximaNova-Semibold'; + position: absolute; + top: 0; + right: 0; + color: #ccc; + text-align: right; + font-size: 0.75em; + padding: 5px 10px 0; + letter-spacing: 1.5px; + line-height: 15px; + height: 15px; + font-weight: 600; } + #content .highlight.css .code:after { + font-family: 'ProximaNova-Semibold'; + position: absolute; + top: 0; + right: 0; + color: #ccc; + text-align: right; + font-size: 0.75em; + padding: 5px 10px 0; + letter-spacing: 1.5px; + line-height: 15px; + height: 15px; + font-weight: 600; } + #content .highlight.jsx .code:after { + font-family: 'ProximaNova-Semibold'; + position: absolute; + top: 0; + right: 0; + color: #ccc; + text-align: right; + font-size: 0.75em; + padding: 5px 10px 0; + letter-spacing: 1.5px; + line-height: 15px; + height: 15px; + font-weight: 600; } + #content .highlight.html.html .code:after { + content: 'HTML'; } + #content .highlight.js.html .code:after { + content: 'HTML'; } + #content .highlight.bash.html .code:after { + content: 'HTML'; } + #content .highlight.css.html .code:after { + content: 'HTML'; } + #content .highlight.jsx.html .code:after { + content: 'HTML'; } + #content .highlight.html.js .code:after { + content: 'JS'; } + #content .highlight.js.js .code:after { + content: 'JS'; } + #content .highlight.bash.js .code:after { + content: 'JS'; } + #content .highlight.css.js .code:after { + content: 'JS'; } + #content .highlight.jsx.js .code:after { + content: 'JS'; } + #content .highlight.html.bash .code:after { + content: 'Shell'; } + #content .highlight.js.bash .code:after { + content: 'Shell'; } + #content .highlight.bash.bash .code:after { + content: 'Shell'; } + #content .highlight.css.bash .code:after { + content: 'Shell'; } + #content .highlight.jsx.bash .code:after { + content: 'Shell'; } + #content .highlight.html.css .code:after { + content: 'CSS'; } + #content .highlight.js.css .code:after { + content: 'CSS'; } + #content .highlight.bash.css .code:after { + content: 'CSS'; } + #content .highlight.css.css .code:after { + content: 'CSS'; } + #content .highlight.jsx.css .code:after { + content: 'CSS'; } + #content .highlight.html.jsx .code:after { + content: 'JSX'; } + #content .highlight.js.jsx .code:after { + content: 'JSX'; } + #content .highlight.bash.jsx .code:after { + content: 'JSX'; } + #content .highlight.css.jsx .code:after { + content: 'JSX'; } + #content .highlight.jsx.jsx .code:after { + content: 'JSX'; } + #content > table { + width: 100%; + margin: 20px 0; } + #content > table tr { + border-top: 1px solid #eee; } + #content > table tr:nth-child(2n) { + background-color: #f8f8f8; } + #content > table th { + font-family: 'ProximaNova-Semibold'; + padding: 12px 13px; + border: 1px solid #eee; + vertical-align: middle; + text-align: left; } + #content > table td { + border: 1px solid #eee; + vertical-align: middle; + padding: 6px 13px; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 0.8em; + line-height: 1.6em; } + #content .bottom-nav { + height: 44px; + margin: 30px 0 25px; + border-bottom: 1px solid #eee; + padding-bottom: 25px; } + #content .bottom-nav a { + font-family: 'ProximaNova-Semibold'; + margin: 0 5px; } + #content .edit-link { + text-align: center; } + #content .edit-link a { + color: #aaa; + font-family: 'ProximaNova-Semibold'; } + #content .edit-link a:before { + content: ''; + display: inline-block; + width: 16px; + height: 16px; + background-size: 16px; + opacity: 0.3; + margin-right: 8px; + position: relative; + top: 2px; } + #content .field-name { + font-weight: bold; } + #content .field-entry { + margin-bottom: 4rem; } + #content .description-wrapper > p { + padding-left: 1rem; + margin-bottom: 1rem; } + +#mobile-header { + z-index: 3; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 40px; + background-color: #fff; + display: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); } + #mobile-header .menu-button { + position: absolute; + width: 24px; + height: 24px; + top: 8px; + left: 12px; + background: url("../assets/images/menu.png") center center no-repeat; + background-size: 24px; + opacity: 0.5; } + #mobile-header .logo { + position: absolute; + top: 5px; + left: 50%; + margin-left: -15px; + background-size: 30px; } + #mobile-header .logo img { + width: 30px; + height: 30px; } + +#mobile-shade { + z-index: 1; + display: none; + pointer-events: none; + opacity: 0; + transition: opacity 0.3s ease; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.4); } + +@media screen and (max-width: 560px) { + body { + font-size: 14px; } + + body.sidebar-open #sidebar { + transform: translate3d(0, 0, 0); } + body.sidebar-open #mobile-shade { + opacity: 1; + pointer-events: auto; } + + #header { + height: 40px; } + + #top-nav { + display: none; } + + #site-nav { + display: none; } + + #mobile-header { + display: block; } + + #mobile-shade { + display: block; } + + #sidebar-mobile { + display: block; } + + #wrap { + padding-top: 40px; + padding-left: 0; } + + #sidebar { + top: 0; + left: 0; + padding-top: 60px; + border-right: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); + transition: transform 0.3s ease; + transform: translate3d(-120%, 0, 0); + display: block; } } +.api { + background: #fafafa; } + .api h3 { + padding: 5px 10px; } + .api h3.api-title { + margin: 0; + overflow: auto; } + .api h4 { + font-weight: normal; + font-style: italic; + margin-bottom: 0.25em; + text-decoration: underline; + margin-left: 20px; } + .api dl { + margin-top: 0.25em; } + .api dl.args { + margin-left: 40px; } + .api dl.constants { + margin-left: 20px; } + .api dt { + margin-top: 1em; } + .api dt .name { + font-weight: bold; } + .api dt .type { + margin-left: 15px; + font-size: 0.9em; + font-weight: 200; + color: #000; } + .api dd { + margin-bottom: 1em; + margin-left: 0; } + .api .desc { + margin: 1em; } + .api pre { + margin-right: 10px; } + +h3.api-title { + padding: 5px 10px; + margin-top: 2em; } + +.api-title .locus { + float: right; + font-weight: normal; + padding-right: 5px; + font-style: italic; } +.api-title .subtext { + font-size: 11px; + text-align: left; + clear: both; + display: block; + font-weight: normal; } + .api-title .subtext > code { + font-size: 11px; + margin-right: 12px; } +.api-title .src-code { + color: #20338a !important; + border-bottom: none !important; } + +.gutter pre { + color: #999; } + +pre { + color: #525252; } + pre .function .keyword { + color: #0092db; } + pre .constant { + color: #0092db; } + pre .keyword { + color: #e96900; } + pre .attribute { + color: #e96900; } + pre .number { + color: #ae81ff; } + pre .literal { + color: #ae81ff; } + pre .tag { + color: #2973b7; } + pre .tag .title { + color: #2973b7; } + pre .tag .value { + color: #90a959; } + pre .change { + color: #2973b7; } + pre .winutils { + color: #2973b7; } + pre .flow { + color: #2973b7; } + pre .lisp .title { + color: #2973b7; } + pre .clojure .built_in { + color: #2973b7; } + pre .nginx .title { + color: #2973b7; } + pre .tex .special { + color: #2973b7; } + pre .tex .command { + color: #90a959; } + pre .tex .formula { + color: #b3b3b3; + opacity: 0.5; } + pre .class .title { + color: #4077bf; } + pre .symbol { + color: #90a959; } + pre .symbol .string { + color: #90a959; } + pre .value { + color: #90a959; } + pre .regexp { + color: #90a959; } + pre .title { + color: #a6e22e; } + pre .string { + color: #90a959; } + pre .subst { + color: #90a959; } + pre .haskell .type { + color: #90a959; } + pre .preprocessor { + color: #90a959; } + pre .ruby .class .parent { + color: #90a959; } + pre .built_in { + color: #90a959; } + pre .sql .aggregate { + color: #90a959; } + pre .django .template_tag { + color: #90a959; } + pre .django .variable { + color: #90a959; } + pre .django .filter .argument { + color: #90a959; } + pre .smalltalk .class { + color: #90a959; } + pre .smalltalk .localvars { + color: #90a959; } + pre .smalltalk .array { + color: #90a959; } + pre .javadoc { + color: #90a959; } + pre .attr_selector { + color: #90a959; } + pre .pseudo { + color: #90a959; } + pre .addition { + color: #90a959; } + pre .stream { + color: #90a959; } + pre .envvar { + color: #90a959; } + pre .apache .tag { + color: #90a959; } + pre .apache .cbracket { + color: #90a959; } + pre .apache .sqbracket { + color: #b3b3b3; } + pre .prompt { + color: #90a959; } + pre .comment { + color: #b3b3b3; } + pre .java .annotation { + color: #b3b3b3; } + pre .python .decorator { + color: #b3b3b3; } + pre .template_comment { + color: #b3b3b3; } + pre .pi { + color: #b3b3b3; } + pre .doctype { + color: #b3b3b3; } + pre .deletion { + color: #b3b3b3; } + pre .shebang { + color: #b3b3b3; } + pre .coffeescript .javascript { + opacity: 0.5; } + pre .javascript .xml { + opacity: 0.5; } + pre .xml .javascript { + opacity: 0.5; } + pre .xml .vbscript { + opacity: 0.5; } + pre .xml .css { + opacity: 0.5; } + pre .xml .cdata { + opacity: 0.5; } + +.highlight .hll { + background-color: #49483e; } + +pre { + background: #272822; + color: #f8f8f2; } + +.highlight .c { + color: #75715e; } + +/* Comment */ +.highlight .err { + color: #960050; + background-color: #1e0010; } + +/* Error */ +.highlight .k { + color: #66d9ef; } + +/* Keyword */ +.highlight .l { + color: #ae81ff; } + +/* Literal */ +.highlight .n { + color: #f8f8f2; } + +/* Name */ +.highlight .o { + color: #f92672; } + +/* Operator */ +.highlight .p { + color: #f8f8f2; } + +/* Punctuation */ +.highlight .cm { + color: #75715e; } + +/* Comment.Multiline */ +.highlight .cp { + color: #75715e; } + +/* Comment.Preproc */ +.highlight .c1 { + color: #75715e; } + +/* Comment.Single */ +.highlight .cs { + color: #75715e; } + +/* Comment.Special */ +.highlight .ge { + font-style: italic; } + +/* Generic.Emph */ +.highlight .gs { + font-weight: bold; } + +/* Generic.Strong */ +.highlight .kc { + color: #66d9ef; } + +/* Keyword.Constant */ +.highlight .kd { + color: #66d9ef; } + +/* Keyword.Declaration */ +.highlight .kn { + color: #f92672; } + +/* Keyword.Namespace */ +.highlight .kp { + color: #66d9ef; } + +/* Keyword.Pseudo */ +.highlight .kr { + color: #66d9ef; } + +/* Keyword.Reserved */ +.highlight .kt { + color: #66d9ef; } + +/* Keyword.Type */ +.highlight .ld { + color: #e6db74; } + +/* Literal.Date */ +.highlight .m { + color: #ae81ff; } + +/* Literal.Number */ +.highlight .s { + color: #e6db74; } + +/* Literal.String */ +.highlight .na { + color: #a6e22e; } + +/* Name.Attribute */ +.highlight .nb { + color: #f8f8f2; } + +/* Name.Builtin */ +.highlight .nc { + color: #a6e22e; } + +/* Name.Class */ +.highlight .no { + color: #66d9ef; } + +/* Name.Constant */ +.highlight .nd { + color: #a6e22e; } + +/* Name.Decorator */ +.highlight .ni { + color: #f8f8f2; } + +/* Name.Entity */ +.highlight .ne { + color: #a6e22e; } + +/* Name.Exception */ +.highlight .nf { + color: #a6e22e; } + +/* Name.Function */ +.highlight .nl { + color: #f8f8f2; } + +/* Name.Label */ +.highlight .nn { + color: #f8f8f2; } + +/* Name.Namespace */ +.highlight .nx { + color: #a6e22e; } + +/* Name.Other */ +.highlight .py { + color: #f8f8f2; } + +/* Name.Property */ +.highlight .nt { + color: #f92672; } + +/* Name.Tag */ +.highlight .nv { + color: #f8f8f2; } + +/* Name.Variable */ +.highlight .ow { + color: #f92672; } + +/* Operator.Word */ +.highlight .w { + color: #f8f8f2; } + +/* Text.Whitespace */ +.highlight .mf { + color: #ae81ff; } + +/* Literal.Number.Float */ +.highlight .mh { + color: #ae81ff; } + +/* Literal.Number.Hex */ +.highlight .mi { + color: #ae81ff; } + +/* Literal.Number.Integer */ +.highlight .mo { + color: #ae81ff; } + +/* Literal.Number.Oct */ +.highlight .sb { + color: #e6db74; } + +/* Literal.String.Backtick */ +.highlight .sc { + color: #e6db74; } + +/* Literal.String.Char */ +.highlight .sd { + color: #e6db74; } + +/* Literal.String.Doc */ +.highlight .s2 { + color: #e6db74; } + +/* Literal.String.Double */ +.highlight .se { + color: #ae81ff; } + +/* Literal.String.Escape */ +.highlight .sh { + color: #e6db74; } + +/* Literal.String.Heredoc */ +.highlight .si { + color: #e6db74; } + +/* Literal.String.Interpol */ +.highlight .sx { + color: #e6db74; } + +/* Literal.String.Other */ +.highlight .sr { + color: #e6db74; } + +/* Literal.String.Regex */ +.highlight .s1 { + color: #e6db74; } + +/* Literal.String.Single */ +.highlight .ss { + color: #e6db74; } + +/* Literal.String.Symbol */ +.highlight .bp { + color: #f8f8f2; } + +/* Name.Builtin.Pseudo */ +.highlight .vc { + color: #f8f8f2; } + +/* Name.Variable.Class */ +.highlight .vg { + color: #f8f8f2; } + +/* Name.Variable.Global */ +.highlight .vi { + color: #f8f8f2; } + +/* Name.Variable.Instance */ +.highlight .il { + color: #ae81ff; } + +/* Literal.Number.Integer.Long */ +.deprecation-notice { + padding-left: 5px; + border-left: 2px solid #e8400d; + background: #fdf2ec; } + .deprecation-notice span { + font-weight: bold; } diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.eot b/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.eot new file mode 100644 index 0000000..4ce4d6a Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.eot differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.ttf b/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.ttf new file mode 100644 index 0000000..c99f970 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.ttf differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.woff b/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.woff new file mode 100644 index 0000000..36b8633 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.woff differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.woff2 b/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.woff2 new file mode 100644 index 0000000..0710e2f Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_B_0.woff2 differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.eot b/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.eot new file mode 100644 index 0000000..07a0c55 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.eot differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.ttf b/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.ttf new file mode 100644 index 0000000..42d2218 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.ttf differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.woff b/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.woff new file mode 100644 index 0000000..35c7c97 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.woff differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.woff2 b/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.woff2 new file mode 100644 index 0000000..b06af82 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_C_0.woff2 differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.eot b/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.eot new file mode 100644 index 0000000..c3cb308 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.eot differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.ttf b/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.ttf new file mode 100644 index 0000000..58a76d5 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.ttf differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.woff b/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.woff new file mode 100644 index 0000000..83c7a01 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.woff differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.woff2 b/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.woff2 new file mode 100644 index 0000000..0267b94 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_D_0.woff2 differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.eot b/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.eot new file mode 100644 index 0000000..294d4d6 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.eot differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.ttf b/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.ttf new file mode 100644 index 0000000..7c5f224 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.ttf differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.woff b/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.woff new file mode 100644 index 0000000..70bef2c Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.woff differ diff --git a/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.woff2 b/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.woff2 new file mode 100644 index 0000000..62b6610 Binary files /dev/null and b/app/views/static/api/docs/assets/webfonts/2C4B9D_E_0.woff2 differ diff --git a/app/views/static/api/docs/directive/deprecated/index.html b/app/views/static/api/docs/directive/deprecated/index.html new file mode 100644 index 0000000..b5e0d19 --- /dev/null +++ b/app/views/static/api/docs/directive/deprecated/index.html @@ -0,0 +1,1057 @@ +

+deprecated

+

Marks an element of a GraphQL schema as no longer supported.

+

+Locations

+
    +
  • FIELD_DEFINITION
  • +
  • ENUM_VALUE
  • +
  • ARGUMENT_DEFINITION
  • +
  • INPUT_FIELD_DEFINITION
  • +
+

+Arguments

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
reason + String + +

Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted in Markdown.

+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/directive/include/index.html b/app/views/static/api/docs/directive/include/index.html new file mode 100644 index 0000000..1beb7bf --- /dev/null +++ b/app/views/static/api/docs/directive/include/index.html @@ -0,0 +1,1056 @@ +

+include

+

Directs the executor to include this field or fragment only when the if argument is true.

+

+Locations

+
    +
  • FIELD
  • +
  • FRAGMENT_SPREAD
  • +
  • INLINE_FRAGMENT
  • +
+

+Arguments

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
if + Boolean! + +

Included when true.

+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/directive/index.html b/app/views/static/api/docs/directive/index.html new file mode 100644 index 0000000..9ece548 --- /dev/null +++ b/app/views/static/api/docs/directive/index.html @@ -0,0 +1,1028 @@ +

+Directives

+

Directives provide a way to describe alternate runtime execution and type validation behavior in a GraphQL document.

+

For more information, see the GraphQL spec.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/directive/oneof/index.html b/app/views/static/api/docs/directive/oneof/index.html new file mode 100644 index 0000000..48cd266 --- /dev/null +++ b/app/views/static/api/docs/directive/oneof/index.html @@ -0,0 +1,1032 @@ +

+oneOf

+

Requires that exactly one field must be supplied and that field must not be null.

+

+Locations

+
    +
  • INPUT_OBJECT
  • +
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/directive/skip/index.html b/app/views/static/api/docs/directive/skip/index.html new file mode 100644 index 0000000..65b90bc --- /dev/null +++ b/app/views/static/api/docs/directive/skip/index.html @@ -0,0 +1,1056 @@ +

+skip

+

Directs the executor to skip this field or fragment when the if argument is true.

+

+Locations

+
    +
  • FIELD
  • +
  • FRAGMENT_SPREAD
  • +
  • INLINE_FRAGMENT
  • +
+

+Arguments

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
if + Boolean! + +

Skipped when true.

+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/enum/__directivelocation/index.html b/app/views/static/api/docs/enum/__directivelocation/index.html new file mode 100644 index 0000000..938cf42 --- /dev/null +++ b/app/views/static/api/docs/enum/__directivelocation/index.html @@ -0,0 +1,1124 @@ +

+__DirectiveLocation

+

A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.

+

+Values

+

+QUERY

+
+

Location adjacent to a query operation.

+
+

+MUTATION

+
+

Location adjacent to a mutation operation.

+
+

+SUBSCRIPTION

+
+

Location adjacent to a subscription operation.

+
+

+FIELD

+
+

Location adjacent to a field.

+
+

+FRAGMENT_DEFINITION

+
+

Location adjacent to a fragment definition.

+
+

+FRAGMENT_SPREAD

+
+

Location adjacent to a fragment spread.

+
+

+INLINE_FRAGMENT

+
+

Location adjacent to an inline fragment.

+
+

+SCHEMA

+
+

Location adjacent to a schema definition.

+
+

+SCALAR

+
+

Location adjacent to a scalar definition.

+
+

+OBJECT

+
+

Location adjacent to an object type definition.

+
+

+FIELD_DEFINITION

+
+

Location adjacent to a field definition.

+
+

+ARGUMENT_DEFINITION

+
+

Location adjacent to an argument definition.

+
+

+INTERFACE

+
+

Location adjacent to an interface definition.

+
+

+UNION

+
+

Location adjacent to a union definition.

+
+

+ENUM

+
+

Location adjacent to an enum definition.

+
+

+ENUM_VALUE

+
+

Location adjacent to an enum value definition.

+
+

+INPUT_OBJECT

+
+

Location adjacent to an input object type definition.

+
+

+INPUT_FIELD_DEFINITION

+
+

Location adjacent to an input object field definition.

+
+

+VARIABLE_DEFINITION

+
+

Location adjacent to a variable definition.

+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/enum/__typekind/index.html b/app/views/static/api/docs/enum/__typekind/index.html new file mode 100644 index 0000000..50b0cbb --- /dev/null +++ b/app/views/static/api/docs/enum/__typekind/index.html @@ -0,0 +1,1069 @@ +

+__TypeKind

+

An enum describing what kind of type a given __Type is.

+

+Values

+

+SCALAR

+
+

Indicates this type is a scalar.

+
+

+OBJECT

+
+

Indicates this type is an object. fields and interfaces are valid fields.

+
+

+INTERFACE

+
+

Indicates this type is an interface. fields and possibleTypes are valid fields.

+
+

+UNION

+
+

Indicates this type is a union. possibleTypes is a valid field.

+
+

+ENUM

+
+

Indicates this type is an enum. enumValues is a valid field.

+
+

+INPUT_OBJECT

+
+

Indicates this type is an input object. inputFields is a valid field.

+
+

+LIST

+
+

Indicates this type is a list. ofType is a valid field.

+
+

+NON_NULL

+
+

Indicates this type is a non-null. ofType is a valid field.

+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/enum/index.html b/app/views/static/api/docs/enum/index.html new file mode 100644 index 0000000..f4236ac --- /dev/null +++ b/app/views/static/api/docs/enum/index.html @@ -0,0 +1,1028 @@ +

+Enums

+

Enums represent a possible set of values for a field. For example, the Issue object has a field called state. The state of an issue may be OPEN or CLOSED.

+

For more information, see the GraphQL spec.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/index.html b/app/views/static/api/docs/index.html new file mode 100644 index 0000000..6f8169d --- /dev/null +++ b/app/views/static/api/docs/index.html @@ -0,0 +1,1524 @@ +
+

+About the GraphQL API

+

Decidim comes with an API that follows the GraphQL specification. It has a comprehensive coverage of all the public content that can be found on the website.

+

Currently, it is read-only (except for posting comments) but intends to cover anything that is published on the regular website.

+

Typically (although some particular installations may change that) you will find 3 relevant folders:

+
    +
  • +URL/api The route where to make requests. Request are usually in the POST format.
  • +
  • +URL/api/docs This documentation, every Decidim site should provide one.
  • +
  • +URL/api/graphiql GraphiQL is a in-browser IDE for exploring GraphQL APIs. Some Decidim installations may choose to remove access to this tool. In that case you can use a standalone version and use any URL/api as the endpoint
  • +
+

+Using the GraphQL APi

+

The GraphQL format is a JSON formatted text that is specified in a query. Response is a JSON object as well. For details about specification check the official GraphQL site.

+

For instance, you can check the version of a Decidim installation by using curl in the terminal:

+
curl -sSH "Content-Type: application/json" \
+-d '{"query": "{ decidim { version } }"}' \
+https://www.decidim.barcelona/api/
+
+

Note that Content-Type needs to be specified.

+

The query can also be used in GraphiQL, in that case you can skip the "query" text:

+
{
+  decidim {
+    version
+  }
+}
+
+

Response (formatted) should look something like this:

+
{
+  "data": {
+    "decidim": {
+      "version": "0.18.1"
+    }
+  }
+}
+
+

The most practical way to experiment with GraphQL, however, is just to use the in-browser IDE GraphiQL. It provides access to the documentation and auto-complete (use CTRL-Space) for writing queries.

+

From now on, we will skip the "query" keyword for the purpose of readability. You can skip it too if you are using GraphiQL, if you are querying directly (by using CURL for instance) you will need to include it.

+

+Usage limits

+

Decidim is just a Rails application, meaning that any particular installation may implement custom limits in order to access the API (and the application in general).

+

By default (particular installations may change that), API uses the same limitations as the whole Decidim website, provided by the Gem Rack::Attack. These are 100 maximum requests per minute per IP to prevent DoS attacks

+

+Decidim structure, Types, collections and Polymorphism

+

There are no endpoints in the GraphQL specification, instead objects are organized according to their "Type".

+

These objects can be grouped in a single, complex query. Also, objects may accept parameters, which are "Types" as well.

+

Each "Type" is just a pre-defined structure with fields, or just an Scalar (Strings, Integers, Booleans, ...).

+

For instance, to obtain all the participatory processes in a Decidim installation published since January 2018 and order them by published date, we could execute the next query:

+
{
+  participatoryProcesses(filter: {publishedSince: "2018-01-01"}, order: {publishedAt: "asc"}) {
+    slug
+    title {
+      translation(locale: "en")
+    }
+  }
+}
+
+

Response should look like:

+
{
+  "data": {
+    "participatoryProcesses": [
+      {
+        "slug": "consectetur-at",
+        "title": {
+          "translation": "Soluta consectetur quos fugit aut."
+        }
+      },
+      {
+        "slug": "nostrum-earum",
+        "title": {
+          "translation": "Porro hic ipsam cupiditate reiciendis."
+        }
+      }
+    ]
+  }
+}
+
+

+What happened?

+

In the former query, each keyword represents a type, the words publishedSince, publishedAt, slug, locale are scalars, all of them Strings.

+

The other keywords however, are objects representing certain entities:

+
    +
  • +participatoryProcesses is a type that represents a collection of participatory spaces. It accepts arguments (filter and order), which are other object types as well. slug and title are the fields of the participatory process we are interested in, there are "Types" too.
  • +
  • +filter is a ParticipatoryProcessFilter* input type, it has several properties that allows us to refine our search. One of them is the publishedSince property with the initial date from which to list entries.
  • +
  • +order is a ParticipatoryProcessSort type, works the same way as the filter but with the goal of ordering the results.
  • +
  • +title is a TranslatedField type, which allows us to deal with multi-language fields.
  • +
+

Finally, note that the returned object is an array, each item of which is a representation of the object we requested.

+
+

*About how filters and sorting are organized

+

There are two types of objects to filter and ordering collections in Decidim, they all work in a similar fashion. The type involved in filtering always have the suffix "Filter", for ordering it has the suffix "Sort".

+

The types used to filter participatory spaces are: ParticipatoryProcessFilter, AssemblyFilter, and so on.

+

Other collections (or connections) may have their own filters (i.e. ComponentFilter).

+

Each filter has its own properties, you should check any object in particular for details. The way they work with multi-languages fields, however, is the same:

+

We can say we have some searchable object with a multi-language field called title, and we have a filter that allows us to search through this field. How should it work? Should we look up content for every language in the field? or should we stick to a specific language?

+

In our case, we have decided to search only one particular language of a multi-language field but we let you choose which language to search. +If no language is specified, the configured as default in the organization will be used. The keyword to specify the language is locale, and it should be provided in the 2 letters ISO 639-1 format (en = English, es = Spanish, ...).

+

Example (this is not a real Decidim query):

+
 some_collection(filter: { locale: "en", title: "ideas"}) {
+   id
+ }
+
+

The same applies to sorting (ParticipatoryProcessSort, AssemblySort, etc.)

+

In this case, the content of the field (title) only allows 2 values: ASC and DESC.

+

Example of ordering alphabetically by the title content in French language:

+
some_collection(order: { locale: "en", title: "asc"}) {
+  id
+}
+
+

Of course, you can combine both filter and order. Also remember to check availability of this type of behaviour for any particular filter/sort.

+
+

+Decidim main types

+

Decidim has 2 main types of objects through which content is provided. These are Participatory Spaces and Components.

+

A participatory space is the first level, currently there are 5 officially supported: Participatory Processes, Assemblies, Conferences and Initiatives. For each participatory process there will correspond a collection type and a "single item" type.

+

The previous example uses the collection type for participatory processes. You can try assemblies, conferences, or initiatives for the others. Note that each collection can implement their own filter and order types with different properties.

+

As an example for a single item query, you can run:

+
{
+  participatoryProcess(slug: "consectetur-at") {
+    slug
+    title {
+      translation(locale: "en")
+    }
+  }
+}
+
+

And the response will be:

+
{
+  "data": {
+    "participatoryProcess": {
+      "slug": "consectetur-at",
+      "title": {
+        "translation": "Soluta consectetur quos fugit aut."
+      }
+    }
+  }
+}
+
+

+What is different?

+

First, note that we are querying, in singular, the type participatoryProcess, with a different parameter, slug*, (a String). We can use the id instead if we know it.

+

Second, the response is not an Array, it is just the object we requested. We can expect to return null if the object is not found.

+
+

* The slug is a convenient way to find a participatory space as is (usually) in the URL.

+

For instance, consider this real case from Barcelona:

+

https://www.decidim.barcelona/processes/patrimonigracia

+

The word patrimonigracia indicates the "slug".

+
+

+Components

+

Every participatory space may (and should) have some components. There are 9 official components, these are Proposals, Page, Meetings, Budgets, Surveys, Accountability, Debates, Sortitions and Blog. Plugins may add their own components.

+

If you know the id* of a specific component you can obtain it by querying it directly:

+
{
+  component(id:2) {
+    id
+    name {
+      translation(locale:"en")
+    }
+    __typename
+    participatorySpace {
+      id
+      type
+    }
+  }
+}
+
+

Response:

+
{
+  "data": {
+    "component": {
+      "id": "2",
+      "name": {
+        "translation": "Meetings"
+      },
+      "__typename": "Meetings",
+      "participatorySpace": {
+        "id": "1",
+        "type": "Decidim::ParticipatoryProcess"
+      }
+    }
+  }
+}
+
+

The process is analogue as what has been explained in the case of searching for one specific participatory process.

+
+

*Note that the id of a component is present also in the URL after the letter "f":

+

https://www.decidim.barcelona/processes/patrimonigracia/f/3257/

+

In this case, 3257.

+
+
+What about component's collections?
+

Glad you asked, component's collections cannot be retrieved directly, the are available in the context of a participatory space.

+

For instance, we can query all the components in an particular Assembly as follows:

+
{
+  assembly(id: 3) {
+    components {
+      id
+      name {
+        translation(locale: "en")
+      }
+      __typename
+    }
+  }
+}
+
+

The response will be similar to:

+
{
+  "data": {
+    "assembly": {
+      "components": [
+        {
+          "id": "42",
+          "name": {
+            "translation": "Accountability"
+          },
+          "__typename": "Component"
+        },
+        {
+          "id": "38",
+          "name": {
+            "translation": "Meetings"
+          },
+          "__typename": "Meetings"
+        },
+        {
+          "id": "37",
+          "name": {
+            "translation": "Page"
+          },
+          "__typename": "Pages"
+        },
+        {
+          "id": "39",
+          "name": {
+            "translation": "Proposals"
+          },
+          "__typename": "Proposals"
+        }
+      ]
+    }
+  }
+}
+
+

We can also apply some filters by using the ComponentFilter type. In the next query we would like to find all the components with geolocation enabled in the assembly with id=2:

+
{
+  assembly(id: 2) {
+    components(filter: {withGeolocationEnabled: true}) {
+      id
+      name {
+        translation(locale: "en")
+      }
+      __typename
+    }
+  }
+}
+
+

The response:

+
{
+  "data": {
+    "assembly": {
+      "components": [
+        {
+          "id": "39",
+          "name": {
+            "translation": "Meetings"
+          },
+          "__typename": "Meetings"
+        }
+      ]
+    }
+  }
+}
+
+

Note that, in this case, there is only one component returned, "Meetings". In some cases Proposals can be geolocated too therefore would be returned in this query.

+

+Polymorphism and connections

+

Many relationships between tables in Decidim are polymorphic, this means that the related object can belong to different classes and share just a few properties in common.

+

For instance, components in a participatory space are polymorphic, while the concept of component is generic and all of them share properties like published date, name or weight, they differ in the rest. Proposals have the status field while Meetings have an agenda.

+

Another example are the case of linked resources, these are properties that may link objects of different nature between components or participatory spaces.

+

In a very simplified way (to know more please refer to the official guide), GraphQL polymorphism is handled through the operator ... on. You will know when a field is polymorphic because the property __typename, which tells you the type of that particular object, will change accordingly.

+

In the previous examples we have queried for this property:

+

Response fragment:

+
      "components": [
+        {
+          "id": "38",
+          "name": {
+            "translation": "Meetings"
+          },
+          "__typename": "Meetings"
+        }
+
+

So, if we want to access the rest of the properties in a polymorphic object, we should do it through the ... on operator as follows:

+
{
+  assembly(id: 2) {
+    components {
+      id
+      ... on Proposals {
+
+      }
+    }
+  }
+}
+
+

Consider this query:

+
{
+  assembly(id: 3) {
+    components(filter: {type: "Proposals"}) {
+      id
+      name {
+        translation(locale: "en")
+      }
+      ... on Proposals {
+        proposals(order: {endorsementCount: "desc"}, first: 2) {
+          edges {
+            node {
+              id
+              endorsements {
+                name
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+

The response:

+
{
+  "data": {
+    "assembly": {
+      "components": [
+        {
+          "id": "39",
+          "name": {
+            "translation": "Proposals"
+          },
+          "proposals": {
+            "edges": [
+              {
+                "node": {
+                  "id": "35",
+                  "endorsements": [
+                    {
+                      "name": "Ms. Johnathon Schaefer"
+                    },
+                    {
+                      "name": "Linwood Lakin PhD 3 4 endr1"
+                    },
+                    {
+                      "name": "Gracie Emmerich"
+                    },
+                    {
+                      "name": "Randall Rath 3 4 endr3"
+                    },
+                    {
+                      "name": "Jolene Schmitt MD"
+                    },
+                    {
+                      "name": "Clarence Hammes IV 3 4 endr5"
+                    },
+                    {
+                      "name": "Omar Mayer"
+                    },
+                    {
+                      "name": "Raymundo Jaskolski 3 4 endr7"
+                    }
+                  ]
+                }
+              },
+              {
+                "node": {
+                  "id": "33",
+                  "endorsements": [
+                    {
+                      "name": "Spring Brakus"
+                    },
+                    {
+                      "name": "Reiko Simonis IV 3 2 endr1"
+                    },
+                    {
+                      "name": "Dr. Jim Denesik"
+                    },
+                    {
+                      "name": "Dr. Mack Schoen 3 2 endr3"
+                    }
+                  ]
+                }
+              }
+            ]
+          }
+        }
+      ]
+    }
+  }
+}
+
+

+What is going on?

+

Until the ... on Proposals line, there is nothing new. We are requesting the Assembly participatory space identified by the id=3, then listing all its components with the type "Proposals". All the components share the id and name properties, so we can just add them at the query.

+

After that, we want content specific from the Proposals type. In order to do that we must tell the server that the content we will request shall only be executed if the types matches Proposals. We do that by wrapping the rest of the query in the ... on Proposals clause.

+

The next line is just a property of the type Proposals which is a type of collection called a "connection". A connection works similar as normal collection (such as components) but it can handle more complex cases.

+

Typically, a connection is used to paginate long results, for this purpose the results are not directly available but encapsulated inside the list edges in several node results. Also there are more arguments available in order to navigate between pages. This are the arguments:

+
    +
  • +first: Returns the first n elements from the list
  • +
  • +after: Returns the elements in the list that come after the specified cursor +
  • +
  • +last: Returns the last n elements from the list
  • +
  • +before: Returns the elements in the list that come before the specified cursor +
  • +
+

Example:

+
{
+  assembly(id: 3) {
+    components(filter: {type: "Proposals"}) {
+      id
+      name {
+        translation(locale: "en")
+      }
+      ... on Proposals {
+        proposals(first:2,after:"Mg") {
+          pageInfo {
+            endCursor
+            startCursor
+            hasPreviousPage
+            hasNextPage
+          }
+          edges {
+            node {
+              id
+              endorsements {
+                name
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+

Being the response:

+
{
+  "data": {
+    "assembly": {
+      "components": [
+        {
+          "id": "39",
+          "name": {
+            "translation": "Proposals"
+          },
+          "proposals": {
+            "pageInfo": {
+              "endCursor": "NA",
+              "startCursor": "Mw",
+              "hasPreviousPage": false,
+              "hasNextPage": true
+            },
+            "edges": [
+              {
+                "node": {
+                  "id": "32",
+                  "endorsements": []
+                }
+              },
+              {
+                "node": {
+                  "id": "31",
+                  "endorsements": [
+                    {
+                      "name": "Mr. Nicolas Raynor"
+                    },
+                    {
+                      "name": "Gerry Fritsch PhD 3 1 endr1"
+                    }
+                  ]
+                }
+              }
+            ]
+          }
+        }
+      ]
+    }
+  }
+}
+
+

As you can see, a part from the edges list, you can access to the object pageInfo which gives you the information needed to navigate through the different pages.

+

For more info on how connections work, you can check the official guide:

+

https://graphql.org/learn/pagination/

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/categoryfilter/index.html b/app/views/static/api/docs/input_object/categoryfilter/index.html new file mode 100644 index 0000000..ddf3906 --- /dev/null +++ b/app/views/static/api/docs/input_object/categoryfilter/index.html @@ -0,0 +1,1035 @@ +

+CategoryFilter

+

A type used for filtering any category objects

+

+Input Fields

+
+ parentId ([ID]) +
+

Returns the sub-categories for the given parent category or top-level categories if set to null

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/componentfilter/index.html b/app/views/static/api/docs/input_object/componentfilter/index.html new file mode 100644 index 0000000..82d055a --- /dev/null +++ b/app/views/static/api/docs/input_object/componentfilter/index.html @@ -0,0 +1,1071 @@ +

+ComponentFilter

+

A type used for filtering any component parent objects

+

+Input Fields

+
+ publishedBefore (String) +
+

List result published before (and excluding) this date. Expected format YYYY-MM-DD

+
+
+
+ publishedSince (String) +
+

List result published after (and including) this date. Expected format YYYY-MM-DD

+
+
+
+ locale (String) +
+

Specify the locale to use when searching translated fields, otherwise default organization language will be used

+
+
+
+ type (String) +
+

Filters by type of component

+
+
+
+ name (String) +
+

Filters by name of the component, additional locale parameter can be provided to specify in which to search

+
+
+
+ withGeolocationEnabled (Boolean) +
+

Returns components with geolocation activated (may be Proposals or Meetings)

+
+
+
+ withCommentsEnabled (Boolean) +
+

Returns components with comments enabled globally (can still be deactivated in the current step if the component has steps)

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/componentsort/index.html b/app/views/static/api/docs/input_object/componentsort/index.html new file mode 100644 index 0000000..3f8752d --- /dev/null +++ b/app/views/static/api/docs/input_object/componentsort/index.html @@ -0,0 +1,1059 @@ +

+ComponentSort

+

A type used for sorting any component parent objects

+

+Input Fields

+
+ locale (String) +
+

Specify the locale to use when ordering translated fields, otherwise default organization language will be used

+
+
+
+ id (String) +
+

Sort by ID, valid values are ASC or DESC

+
+
+
+ weight (String) +
+

Sort by weight (order in the website), valid values are ASC or DESC

+
+
+
+ type (String) +
+

Sort by type of component, alphabetically, valid values are ASC or DESC

+
+
+
+ name (String) +
+

Sort by name of the component, alphabetically, valid values are ASC or DESC

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/index.html b/app/views/static/api/docs/input_object/index.html new file mode 100644 index 0000000..b985f34 --- /dev/null +++ b/app/views/static/api/docs/input_object/index.html @@ -0,0 +1,1028 @@ +

+Input Objects

+

Input objects are best described as "composable objects" in that they contain a set of input fields that define a particular object. For example, the AuthorInput takes a field called emails. Providing a value for emails will transform the AuthorInput into a list of User objects which contain that email address/

+

For more information, see the GraphQL spec.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/participatoryprocessfilter/index.html b/app/views/static/api/docs/input_object/participatoryprocessfilter/index.html new file mode 100644 index 0000000..7e3a987 --- /dev/null +++ b/app/views/static/api/docs/input_object/participatoryprocessfilter/index.html @@ -0,0 +1,1047 @@ +

+ParticipatoryProcessFilter

+

A type used for filtering participatory processes

+

+Input Fields

+
+ publishedBefore (String) +
+

List result published before (and excluding) this date. Expected format YYYY-MM-DD

+
+
+
+ publishedSince (String) +
+

List result published after (and including) this date. Expected format YYYY-MM-DD

+
+
+
+ hashtag (String) +
+

List result having this hashtag

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/participatoryprocesssort/index.html b/app/views/static/api/docs/input_object/participatoryprocesssort/index.html new file mode 100644 index 0000000..c8853f9 --- /dev/null +++ b/app/views/static/api/docs/input_object/participatoryprocesssort/index.html @@ -0,0 +1,1047 @@ +

+ParticipatoryProcessSort

+

A type used for sorting participatory processess

+

+Input Fields

+
+ publishedAt (String) +
+

Sort by date of publication, valid values are ASC or DESC

+
+
+
+ id (String) +
+

Sort by ID, valid values are ASC or DESC

+
+
+
+ startDate (String) +
+

Sort by participatory process starting date, valid values are ASC or DESC

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/postfilter/index.html b/app/views/static/api/docs/input_object/postfilter/index.html new file mode 100644 index 0000000..a271fe7 --- /dev/null +++ b/app/views/static/api/docs/input_object/postfilter/index.html @@ -0,0 +1,1066 @@ +

+PostFilter

+

A type used for filtering posts inside a participatory space.

+

A typical query would look like:

+
  {
+  participatoryProcesses {
+    components {
+      ...on Blogs {
+        posts(filter:{ createdBefore: "2020-01-01" }) {
+          id
+        }
+      }
+    }
+  }
+  }
+
+

+Input Fields

+
+ createdBefore (String) +
+

List result created before (and excluding) this date. Expected format YYYY-MM-DD

+
+
+
+ createdSince (String) +
+

List result created after (and including) this date. Expected format YYYY-MM-DD

+
+
+
+ updatedBefore (String) +
+

List result updated before (and excluding) this date. Expected format YYYY-MM-DD

+
+
+
+ updatedSince (String) +
+

List result updated after (and including) this date. Expected format YYYY-MM-DD

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/postsort/index.html b/app/views/static/api/docs/input_object/postsort/index.html new file mode 100644 index 0000000..a95cba3 --- /dev/null +++ b/app/views/static/api/docs/input_object/postsort/index.html @@ -0,0 +1,1053 @@ +

+PostSort

+

A type used for sorting blog posts

+

+Input Fields

+
+ createdAt (String) +
+

Sort by date of creation, valid values are ASC or DESC

+
+
+
+ updatedAt (String) +
+

Sort by date of last modification, valid values are ASC or DESC

+
+
+
+ endorsementCount (String) +
+

Sort by number of endorsements, valid values are ASC or DESC

+
+
+
+ id (String) +
+

Sort by ID, valid values are ASC or DESC

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/proposalfilter/index.html b/app/views/static/api/docs/input_object/proposalfilter/index.html new file mode 100644 index 0000000..e66e3ef --- /dev/null +++ b/app/views/static/api/docs/input_object/proposalfilter/index.html @@ -0,0 +1,1054 @@ +

+ProposalFilter

+

A type used for filtering proposals inside a participatory space.

+

A typical query would look like:

+
  {
+  participatoryProcesses {
+    components {
+      ...on Proposals {
+        proposals(filter:{ publishedBefore: "2020-01-01" }) {
+          id
+        }
+      }
+    }
+  }
+  }
+
+

+Input Fields

+
+ publishedBefore (String) +
+

List result published before (and excluding) this date. Expected format YYYY-MM-DD

+
+
+
+ publishedSince (String) +
+

List result published after (and including) this date. Expected format YYYY-MM-DD

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/proposalsort/index.html b/app/views/static/api/docs/input_object/proposalsort/index.html new file mode 100644 index 0000000..aac848f --- /dev/null +++ b/app/views/static/api/docs/input_object/proposalsort/index.html @@ -0,0 +1,1053 @@ +

+ProposalSort

+

A type used for sorting proposals

+

+Input Fields

+
+ publishedAt (String) +
+

Sort by date of publication, valid values are ASC or DESC

+
+
+
+ endorsementCount (String) +
+

Sort by number of endorsements, valid values are ASC or DESC

+
+
+
+ id (String) +
+

Sort by ID, valid values are ASC or DESC

+
+
+
+ voteCount (String) +
+

Sort by number of votes, valid values are ASC or DESC. Will be ignored if votes are hidden

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/userentityfilter/index.html b/app/views/static/api/docs/input_object/userentityfilter/index.html new file mode 100644 index 0000000..5c500a0 --- /dev/null +++ b/app/views/static/api/docs/input_object/userentityfilter/index.html @@ -0,0 +1,1061 @@ +

+UserEntityFilter

+

A type used for filtering any user or group +A typical query would look like: +{ users(filter:{wildcard:"sandy", excludeIds:[2,10,11]}) { id ...on User { groups { name } } ...on UserGroup { members { name } } } }

+

+Input Fields

+
+ type (String) +
+

Filters by type of entity (User or UserGroup)

+
+
+
+ name (String) +
+

Filters by name of the user entity. Searches (case insensitive) any fragment of the provided string

+
+
+
+ nickname (String) +
+

Filters by nickname of the user entity. Searches (case insensitive) any fragment of the provided string

+
+
+
+ wildcard (String) +
+

Filters by nickname or name of the user entity. Searches (case insensitive) any fragment of the provided string

+
+
+
+ excludeIds ([ID!]) +
+

Excludes users contained in given ids. Valid values are one or more IDs (passed as an array)

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/input_object/userentitysort/index.html b/app/views/static/api/docs/input_object/userentitysort/index.html new file mode 100644 index 0000000..3fe539e --- /dev/null +++ b/app/views/static/api/docs/input_object/userentitysort/index.html @@ -0,0 +1,1053 @@ +

+UserEntitySort

+

A type used for sorting any component parent objects

+

+Input Fields

+
+ id (String) +
+

Sort by ID, valid values are ASC or DESC

+
+
+
+ type (String) +
+

Sort by type of user entity (user or group), alphabetically, valid values are ASC or DESC

+
+
+
+ name (String) +
+

Sort by name of the user entity (user or group), alphabetically, valid values are ASC or DESC

+
+
+
+ nickname (String) +
+

Sort by nickname of the user entity (user or group), alphabetically, valid values are ASC or DESC

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/amendableentityinterface/index.html b/app/views/static/api/docs/interface/amendableentityinterface/index.html new file mode 100644 index 0000000..09b2e1e --- /dev/null +++ b/app/views/static/api/docs/interface/amendableentityinterface/index.html @@ -0,0 +1,1040 @@ +

+AmendableEntityInterface

+

An interface that can be used in objects with amendments

+

+Implemented by

+ +

+Fields

+
+ id (ID!) +
+

ID of this entity

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/amendableinterface/index.html b/app/views/static/api/docs/interface/amendableinterface/index.html new file mode 100644 index 0000000..154cdb6 --- /dev/null +++ b/app/views/static/api/docs/interface/amendableinterface/index.html @@ -0,0 +1,1040 @@ +

+AmendableInterface

+

An interface that can be used in objects with amendments

+

+Implemented by

+ +

+Fields

+
+ amendments ([Amendment]!) +
+

This object's amendments

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/attachableinterface/index.html b/app/views/static/api/docs/interface/attachableinterface/index.html new file mode 100644 index 0000000..e1d7217 --- /dev/null +++ b/app/views/static/api/docs/interface/attachableinterface/index.html @@ -0,0 +1,1045 @@ +

+AttachableInterface

+

An interface that can be used in objects with attachments

+

+Implemented by

+ +

+Fields

+
+ attachments ([Attachment]!) +
+

This object's attachments

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/author/index.html b/app/views/static/api/docs/interface/author/index.html new file mode 100644 index 0000000..59cd73f --- /dev/null +++ b/app/views/static/api/docs/interface/author/index.html @@ -0,0 +1,1083 @@ +

+Author

+

An author

+

+Implemented by

+ +

+Fields

+
+ id (ID!) +
+

The author ID

+
+
+
+ name (String!) +
+

The author's name

+
+
+
+ nickname (String!) +
+

The author's nickname

+
+
+
+ avatarUrl (String!) +
+

The author's avatar url

+
+
+
+ profilePath (String!) +
+

The author's profile path

+
+
+
+ badge (String!) +
+

The author's badge icon

+
+
+
+ organizationName (String!) +
+

The authors's organization name

+
+
+
+ deleted (Boolean!) +
+

Whether the author's account has been deleted or not

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/authorableinterface/index.html b/app/views/static/api/docs/interface/authorableinterface/index.html new file mode 100644 index 0000000..4686d51 --- /dev/null +++ b/app/views/static/api/docs/interface/authorableinterface/index.html @@ -0,0 +1,1043 @@ +

+AuthorableInterface

+

An interface that can be used in authorable objects.

+

+Implemented by

+ +

+Fields

+
+ author (Author) +
+

The resource author

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/categoriescontainerinterface/index.html b/app/views/static/api/docs/interface/categoriescontainerinterface/index.html new file mode 100644 index 0000000..f30858c --- /dev/null +++ b/app/views/static/api/docs/interface/categoriescontainerinterface/index.html @@ -0,0 +1,1061 @@ +

+CategoriesContainerInterface

+

An interface that can be used in objects that contain categories.

+

+Implemented by

+ +

+Fields

+
+ categories ([Category]!) +
+

Categories for this space

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
filter + CategoryFilter + +

Provides several methods to filter the results

+
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/categorizableinterface/index.html b/app/views/static/api/docs/interface/categorizableinterface/index.html new file mode 100644 index 0000000..1e83730 --- /dev/null +++ b/app/views/static/api/docs/interface/categorizableinterface/index.html @@ -0,0 +1,1045 @@ +

+CategorizableInterface

+

An interface that can be used in categorizable objects.

+

+Implemented by

+ +

+Fields

+
+ category (Category) +
+

The object's category

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/coauthorableinterface/index.html b/app/views/static/api/docs/interface/coauthorableinterface/index.html new file mode 100644 index 0000000..75be79a --- /dev/null +++ b/app/views/static/api/docs/interface/coauthorableinterface/index.html @@ -0,0 +1,1052 @@ +

+CoauthorableInterface

+

An interface that can be used in coauthorable objects.

+

+Implemented by

+ +

+Fields

+
+ authorsCount (Int) +
+

The total amount of co-authors that contributed to the entity. Note that this field may include also non-user authors like meetings or the organization

+
+
+
+ author (Author) +
+

The resource author. Note that this can be null on official proposals or meeting-proposals

+
+
+
+ authors ([Author]!) +
+

The resource co-authors. Include only users or groups of users

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/commentableinterface/index.html b/app/views/static/api/docs/interface/commentableinterface/index.html new file mode 100644 index 0000000..1926475 --- /dev/null +++ b/app/views/static/api/docs/interface/commentableinterface/index.html @@ -0,0 +1,1124 @@ +

+CommentableInterface

+

A commentable interface

+

+Implemented by

+ +

+Fields

+
+ id (ID!) +
+

The commentable's ID

+
+
+
+ type (String!) +
+

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ acceptsNewComments (Boolean!) +
+

Whether the object can have new comments or not

+
+
+
+ commentsHaveAlignment (Boolean!) +
+

Whether the object comments have alignment or not

+
+
+
+ commentsHaveVotes (Boolean!) +
+

Whether the object comments have votes or not

+
+
+
+ comments ([Comment!]!) +
+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
orderBy + String + +

Order the comments

+
singleCommentId + String + +

ID of the single comment to look at

+
+
+
+
+ totalCommentsCount (Int!) +
+

The number of comments in all levels this resource holds

+
+
+
+ hasComments (Boolean!) +
+

Check if the commentable has comments

+
+
+
+ userAllowedToComment (Boolean!) +
+

Check if the current user can comment

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/componentinterface/index.html b/app/views/static/api/docs/interface/componentinterface/index.html new file mode 100644 index 0000000..020da53 --- /dev/null +++ b/app/views/static/api/docs/interface/componentinterface/index.html @@ -0,0 +1,1067 @@ +

+ComponentInterface

+

This interface is implemented by all components that belong into a Participatory Space

+

+Implemented by

+ +

+Fields

+
+ id (ID!) +
+

The Component's unique ID

+
+
+
+ name (TranslatedField!) +
+

The name of this component.

+
+
+
+ weight (Int!) +
+

The weight of the component

+
+
+
+ participatorySpace (ParticipatorySpace!) +
+

The participatory space in which this component belongs to.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/endorsableinterface/index.html b/app/views/static/api/docs/interface/endorsableinterface/index.html new file mode 100644 index 0000000..774c225 --- /dev/null +++ b/app/views/static/api/docs/interface/endorsableinterface/index.html @@ -0,0 +1,1047 @@ +

+EndorsableInterface

+

An interface that can be used in objects with endorsements

+

+Implemented by

+ +

+Fields

+
+ endorsements ([Author]!) +
+

The endorsements of this object.

+
+
+
+ endorsementsCount (Int) +
+

The total amount of endorsements the object has received

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/fingerprintinterface/index.html b/app/views/static/api/docs/interface/fingerprintinterface/index.html new file mode 100644 index 0000000..832f767 --- /dev/null +++ b/app/views/static/api/docs/interface/fingerprintinterface/index.html @@ -0,0 +1,1040 @@ +

+FingerprintInterface

+

An interface that can be used in fingerprintable objects.

+

+Implemented by

+ +

+Fields

+
+ fingerprint (Fingerprint!) +
+

This object's fingerprint

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/index.html b/app/views/static/api/docs/interface/index.html new file mode 100644 index 0000000..70c11b8 --- /dev/null +++ b/app/views/static/api/docs/interface/index.html @@ -0,0 +1,1028 @@ +

+Interfaces

+

GraphQL Interfaces are a sort of "parent object" from which other objects can "inherit" from. For example, Stars is considered an interface, because both Repository and Gist can be starred. An interface has its own list of named fields that are shared by implementing objects.

+

For more information, see the GraphQL spec.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/meetingslinkedresourcesinterface/index.html b/app/views/static/api/docs/interface/meetingslinkedresourcesinterface/index.html new file mode 100644 index 0000000..0e9a850 --- /dev/null +++ b/app/views/static/api/docs/interface/meetingslinkedresourcesinterface/index.html @@ -0,0 +1,1040 @@ +

+MeetingsLinkedResourcesInterface

+

An interface that can be used with Resourceable models.

+

+Implemented by

+ +

+Fields

+
+ proposalsFromMeeting ([Proposal]!) +
+

Proposals created in this meeting

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/participatoryspaceinterface/index.html b/app/views/static/api/docs/interface/participatoryspaceinterface/index.html new file mode 100644 index 0000000..317d812 --- /dev/null +++ b/app/views/static/api/docs/interface/participatoryspaceinterface/index.html @@ -0,0 +1,1100 @@ +

+ParticipatorySpaceInterface

+

The interface that all participatory spaces should implement.

+

+Implemented by

+ +

+Fields

+
+ id (ID!) +
+

The participatory space's unique ID

+
+
+
+ title (TranslatedField!) +
+

The graphql_name of this participatory space.

+
+
+
+ type (String!) +
+

The participatory space class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ manifest (ParticipatorySpaceManifest!) +
+

The manifest information for the participatory space.

+
+
+
+ components ([ComponentInterface!]) +
+

Lists the components this space contains.

+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
filter + ComponentFilter + +

Provides several methods to filter the results

+
order + ComponentSort + +

Provides several methods to order the results

+
+
+
+
+ stats ([Statistic]) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/participatoryspaceresourceableinterface/index.html b/app/views/static/api/docs/interface/participatoryspaceresourceableinterface/index.html new file mode 100644 index 0000000..2ac7835 --- /dev/null +++ b/app/views/static/api/docs/interface/participatoryspaceresourceableinterface/index.html @@ -0,0 +1,1041 @@ +

+ParticipatorySpaceResourceableInterface

+

An interface that can be used in objects with participatorySpaceResourceable

+

+Implemented by

+ +

+Fields

+
+ linkedParticipatorySpaces ([ParticipatorySpaceLink!]!) +
+

Lists all linked participatory spaces in a polymorphic way

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/questionnaireentityinterface/index.html b/app/views/static/api/docs/interface/questionnaireentityinterface/index.html new file mode 100644 index 0000000..3cdf455 --- /dev/null +++ b/app/views/static/api/docs/interface/questionnaireentityinterface/index.html @@ -0,0 +1,1040 @@ +

+QuestionnaireEntityInterface

+

An interface that can be used in objects with questionnaires

+

+Implemented by

+ +

+Fields

+
+ id (ID!) +
+

ID of this entity

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/scopableinterface/index.html b/app/views/static/api/docs/interface/scopableinterface/index.html new file mode 100644 index 0000000..b8455dd --- /dev/null +++ b/app/views/static/api/docs/interface/scopableinterface/index.html @@ -0,0 +1,1046 @@ +

+ScopableInterface

+

An interface that can be used in scopable objects.

+

+Implemented by

+ +

+Fields

+
+ scope (Scope) +
+

The object's scope

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/servicesinterface/index.html b/app/views/static/api/docs/interface/servicesinterface/index.html new file mode 100644 index 0000000..b0995e4 --- /dev/null +++ b/app/views/static/api/docs/interface/servicesinterface/index.html @@ -0,0 +1,1040 @@ +

+ServicesInterface

+

An interface that can be used with services.

+

+Implemented by

+ +

+Fields

+
+ services ([MeetingService]!) +
+

The object's services

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/timestampsinterface/index.html b/app/views/static/api/docs/interface/timestampsinterface/index.html new file mode 100644 index 0000000..8ea6943 --- /dev/null +++ b/app/views/static/api/docs/interface/timestampsinterface/index.html @@ -0,0 +1,1050 @@ +

+TimestampsInterface

+

An interface that can be used in objects with created_at and updated_at attributes

+

+Implemented by

+ +

+Fields

+
+ createdAt (DateTime) +
+

The date and time this object was created

+
+
+
+ updatedAt (DateTime) +
+

The date and time this object was updated

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/interface/traceableinterface/index.html b/app/views/static/api/docs/interface/traceableinterface/index.html new file mode 100644 index 0000000..66ed491 --- /dev/null +++ b/app/views/static/api/docs/interface/traceableinterface/index.html @@ -0,0 +1,1048 @@ +

+TraceableInterface

+

An interface that can be used in objects with traceability (versions)

+

+Implemented by

+ +

+Fields

+
+ versionsCount (Int!) +
+

Total number of versions

+
+
+
+ versions ([TraceVersion]!) +
+

This object's versions

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/mutation/comment/index.html b/app/views/static/api/docs/mutation/comment/index.html new file mode 100644 index 0000000..a34a94a --- /dev/null +++ b/app/views/static/api/docs/mutation/comment/index.html @@ -0,0 +1,1065 @@ +

+comment

+

A comment

+

+Input fields

+
+ id (ID!) +
+

The comment's id

+
+
+
+ locale (String) +
+

The locale for which to get the comments text

+
+
+
+ toggleTranslations (Boolean) +
+

Whether the user asked to toggle the machine translations or not.

+
+
+

+Return fields

+
+ id (ID!) +
+

The Comment's unique ID

+
+
+
+ upVote (Comment) +
+
+
+
+ downVote (Comment) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/mutation/commentable/index.html b/app/views/static/api/docs/mutation/commentable/index.html new file mode 100644 index 0000000..1e53ab3 --- /dev/null +++ b/app/views/static/api/docs/mutation/commentable/index.html @@ -0,0 +1,1106 @@ +

+commentable

+

A commentable

+

+Input fields

+
+ id (String!) +
+

The commentable's ID

+
+
+
+ type (String!) +
+

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ locale (String) +
+

The locale for which to get the comments text

+
+
+
+ toggleTranslations (Boolean) +
+

Whether the user asked to toggle the machine translations or not.

+
+
+

+Return fields

+
+ id (ID!) +
+

The Commentable's unique ID

+
+
+
+ addComment (Comment) +
+

Add a new comment to a commentable

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
body + String! + +

The comments's body

+
alignment + Int + +

The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'

+

The default value is 0.

+
userGroupId + ID + +

The comment's user group id. Replaces the author.

+
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/__directive/index.html b/app/views/static/api/docs/object/__directive/index.html new file mode 100644 index 0000000..ac0e4a3 --- /dev/null +++ b/app/views/static/api/docs/object/__directive/index.html @@ -0,0 +1,1102 @@ +

+__Directive

+

A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.

+

In some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.

+

+Fields

+
+ name (String!) +
+
+
+
+ description (String) +
+
+
+
+ locations ([__DirectiveLocation!]!) +
+
+
+
+ args ([__InputValue!]!) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
includeDeprecated + Boolean + +

The default value is false.

+
+
+
+
+ onOperation (Boolean!) +
+
+ Deprecation notice +

Use locations.

+
+
+
+
+ onFragment (Boolean!) +
+
+ Deprecation notice +

Use locations.

+
+
+
+
+ onField (Boolean!) +
+
+ Deprecation notice +

Use locations.

+
+
+
+
+ isRepeatable (Boolean) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/__enumvalue/index.html b/app/views/static/api/docs/object/__enumvalue/index.html new file mode 100644 index 0000000..bfc2c1c --- /dev/null +++ b/app/views/static/api/docs/object/__enumvalue/index.html @@ -0,0 +1,1049 @@ +

+__EnumValue

+

One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.

+

+Fields

+
+ name (String!) +
+
+
+
+ description (String) +
+
+
+
+ isDeprecated (Boolean!) +
+
+
+
+ deprecationReason (String) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/__field/index.html b/app/views/static/api/docs/object/__field/index.html new file mode 100644 index 0000000..b2496ad --- /dev/null +++ b/app/views/static/api/docs/object/__field/index.html @@ -0,0 +1,1079 @@ +

+__Field

+

Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.

+

+Fields

+
+ name (String!) +
+
+
+
+ description (String) +
+
+
+
+ args ([__InputValue!]!) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
includeDeprecated + Boolean + +

The default value is false.

+
+
+
+
+ type (__Type!) +
+
+
+
+ isDeprecated (Boolean!) +
+
+
+
+ deprecationReason (String) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/__inputvalue/index.html b/app/views/static/api/docs/object/__inputvalue/index.html new file mode 100644 index 0000000..7b01430 --- /dev/null +++ b/app/views/static/api/docs/object/__inputvalue/index.html @@ -0,0 +1,1060 @@ +

+__InputValue

+

Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.

+

+Fields

+
+ name (String!) +
+
+
+
+ description (String) +
+
+
+
+ type (__Type!) +
+
+
+
+ defaultValue (String) +
+

A GraphQL-formatted string representing the default value for this input value.

+
+
+
+ isDeprecated (Boolean!) +
+
+
+
+ deprecationReason (String) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/__schema/index.html b/app/views/static/api/docs/object/__schema/index.html new file mode 100644 index 0000000..57b4e3f --- /dev/null +++ b/app/views/static/api/docs/object/__schema/index.html @@ -0,0 +1,1064 @@ +

+__Schema

+

A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.

+

+Fields

+
+ types ([__Type!]!) +
+

A list of all types supported by this server.

+
+
+
+ queryType (__Type!) +
+

The type that query operations will be rooted at.

+
+
+
+ mutationType (__Type) +
+

If this server supports mutation, the type that mutation operations will be rooted at.

+
+
+
+ subscriptionType (__Type) +
+

If this server support subscription, the type that subscription operations will be rooted at.

+
+
+
+ directives ([__Directive!]!) +
+

A list of all directives supported by this server.

+
+
+
+ description (String) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/__type/index.html b/app/views/static/api/docs/object/__type/index.html new file mode 100644 index 0000000..b052615 --- /dev/null +++ b/app/views/static/api/docs/object/__type/index.html @@ -0,0 +1,1145 @@ +

+__Type

+

The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the __TypeKind enum.

+

Depending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name and description, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.

+

+Fields

+
+ kind (__TypeKind!) +
+
+
+
+ name (String) +
+
+
+
+ description (String) +
+
+
+
+ fields ([__Field!]) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
includeDeprecated + Boolean + +

The default value is false.

+
+
+
+
+ interfaces ([__Type!]) +
+
+
+
+ possibleTypes ([__Type!]) +
+
+
+
+ enumValues ([__EnumValue!]) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
includeDeprecated + Boolean + +

The default value is false.

+
+
+
+
+ inputFields ([__InputValue!]) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
includeDeprecated + Boolean + +

The default value is false.

+
+
+
+
+ ofType (__Type) +
+
+
+
+ specifiedByURL (String) +
+
+
+
+ isOneOf (Boolean!) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/accountability/index.html b/app/views/static/api/docs/object/accountability/index.html new file mode 100644 index 0000000..3a9da52 --- /dev/null +++ b/app/views/static/api/docs/object/accountability/index.html @@ -0,0 +1,1136 @@ +

+Accountability

+

An accountability component of a participatory space.

+

+Implements

+ +

+Connections

+
+ results (ResultConnection) +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
after + String + +

Returns the elements in the list that come after the specified cursor.

+
before + String + +

Returns the elements in the list that come before the specified cursor.

+
first + Int + +

Returns the first n elements from the list.

+
last + Int + +

Returns the last n elements from the list.

+
+
+
+

+Fields

+
+ result (Result) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +
+
+
+
+ id (ID!) +
+

The Component's unique ID

+
+
+
+ name (TranslatedField!) +
+

The name of this component.

+
+
+
+ weight (Int!) +
+

The weight of the component

+
+
+
+ participatorySpace (ParticipatorySpace!) +
+

The participatory space in which this component belongs to.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/amendment/index.html b/app/views/static/api/docs/object/amendment/index.html new file mode 100644 index 0000000..ddfaca5 --- /dev/null +++ b/app/views/static/api/docs/object/amendment/index.html @@ -0,0 +1,1071 @@ +

+Amendment

+

An amendment

+

+Fields

+
+ id (ID!) +
+

The id of this amendment

+
+
+
+ state (String!) +
+

The status of this amendment

+
+
+
+ amender (Author!) +
+

The author of this amendment

+
+
+
+ amendableType (String!) +
+

Type of the amendable object

+
+
+
+ emendationType (String!) +
+

Type of the emendation object

+
+
+
+ amendable (AmendableEntityInterface!) +
+

The original amended resource (currently, a proposal only)

+
+
+
+ emendation (AmendableEntityInterface!) +
+

The emendation (currently, a proposal only)

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/answeroption/index.html b/app/views/static/api/docs/object/answeroption/index.html new file mode 100644 index 0000000..042e630 --- /dev/null +++ b/app/views/static/api/docs/object/answeroption/index.html @@ -0,0 +1,1047 @@ +

+AnswerOption

+

An answer option for a multi-choice question in a questionnaire

+

+Fields

+
+ id (ID!) +
+

ID of this answer option

+
+
+
+ body (TranslatedField!) +
+

The text answer response option.

+
+
+
+ freeText (Boolean!) +
+

Whether if this answer accepts any free text from the user.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/area/index.html b/app/views/static/api/docs/object/area/index.html new file mode 100644 index 0000000..6cd167e --- /dev/null +++ b/app/views/static/api/docs/object/area/index.html @@ -0,0 +1,1059 @@ +

+Area

+

An area.

+

+Fields

+
+ id (ID!) +
+

Internal ID for this area

+
+
+
+ name (TranslatedField!) +
+

The graphql_name of this area.

+
+
+
+ areaType (AreaType) +
+

The area type of this area

+
+
+
+ createdAt (DateTime!) +
+

The time this assembly was created

+
+
+
+ updatedAt (DateTime!) +
+

The time this assembly was updated

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/areatype/index.html b/app/views/static/api/docs/object/areatype/index.html new file mode 100644 index 0000000..396656a --- /dev/null +++ b/app/views/static/api/docs/object/areatype/index.html @@ -0,0 +1,1047 @@ +

+AreaType

+

An area type.

+

+Fields

+
+ id (ID!) +
+

Internal ID for this area type

+
+
+
+ name (TranslatedField!) +
+

The name of this area type.

+
+
+
+ plural (TranslatedField!) +
+

The plural name of this area type

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/assembliestype/index.html b/app/views/static/api/docs/object/assembliestype/index.html new file mode 100644 index 0000000..4e458b1 --- /dev/null +++ b/app/views/static/api/docs/object/assembliestype/index.html @@ -0,0 +1,1059 @@ +

+AssembliesType

+

An assemblies type

+

+Fields

+
+ id (ID!) +
+

The assemblies type's unique ID

+
+
+
+ title (TranslatedField!) +
+

The title of this assemblies type.

+
+
+
+ createdAt (DateTime!) +
+

The time this assemblies type was created

+
+
+
+ updatedAt (DateTime!) +
+

The time this assemblies type was updated

+
+
+
+ assemblies ([Assembly]!) +
+

Assemblies with this assemblies type

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/assembly/index.html b/app/views/static/api/docs/object/assembly/index.html new file mode 100644 index 0000000..b184862 --- /dev/null +++ b/app/views/static/api/docs/object/assembly/index.html @@ -0,0 +1,1415 @@ +

+Assembly

+

An assembly

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The internal ID for this assembly

+
+
+
+ subtitle (TranslatedField) +
+

The subtitle of this assembly

+
+
+
+ shortDescription (TranslatedField) +
+

The sort description of this assembly

+
+
+
+ description (TranslatedField) +
+

The description of this assembly

+
+
+
+ slug (String!) +
+

The slug of this assembly

+
+
+
+ hashtag (String) +
+

The hashtag for this assembly

+
+
+
+ createdAt (DateTime!) +
+

The time this assembly was created

+
+
+
+ updatedAt (DateTime!) +
+

The time this assembly was updated

+
+
+
+ publishedAt (DateTime!) +
+

The time this assembly was published

+
+
+
+ reference (String!) +
+

Reference for this assembly

+
+
+
+ heroImage (String) +
+

The hero image for this assembly

+
+
+
+ bannerImage (String) +
+

The banner image for this assembly

+
+
+
+ +
+

If this assembly is promoted (therefore in the homepage)

+
+
+
+ developerGroup (TranslatedField) +
+

The promoter group of this assembly

+
+
+
+ metaScope (TranslatedField) +
+

The scope metadata of this assembly

+
+
+
+ localArea (TranslatedField) +
+

The organization area of this assembly

+
+
+
+ target (TranslatedField) +
+

Who participates in this assembly

+
+
+
+ participatoryScope (TranslatedField) +
+

What is decided on this assembly

+
+
+
+ participatoryStructure (TranslatedField) +
+

How it is decided on this assembly

+
+
+
+ showStatistics (Boolean) +
+

If this assembly should show statistics

+
+
+
+ scopesEnabled (Boolean) +
+

If this assembly has scopes enabled

+
+
+
+ privateSpace (Boolean) +
+

If this assembly is a private space

+
+
+
+ area (Area) +
+

Area of this assembly

+
+
+
+ parent (Assembly) +
+

The parent assembly of this assembly

+
+
+
+ parentsPath (String) +
+

Assembly hierarchy representation

+
+
+
+ childrenCount (Int) +
+

Number of children assemblies

+
+
+
+ purposeOfAction (TranslatedField) +
+

Purpose of action

+
+
+
+ composition (TranslatedField) +
+

Composition of this assembly

+
+
+
+ assemblyType (AssembliesType) +
+

Type of the assembly

+
+
+
+ creationDate (Date) +
+

Creation date of this assembly

+
+
+
+ createdBy (String) +
+

The creator of this assembly

+
+
+
+ createdByOther (TranslatedField) +
+

Custom creator

+
+
+
+ duration (Date) +
+

Duration of this assembly

+
+
+
+ includedAt (Date) +
+

Included at

+
+
+
+ closingDate (Date) +
+

Closing date of the assembly

+
+
+
+ closingDateReason (TranslatedField) +
+

Closing date reason of this assembly

+
+
+
+ internalOrganisation (TranslatedField) +
+

Internal organisation of this assembly

+
+
+
+ isTransparent (Boolean) +
+

If this assembly is transparent

+
+
+
+ specialFeatures (TranslatedField) +
+

Special features of this assembly

+
+
+
+ twitterHandler (String) +
+

Twitter handler

+
+
+
+ instagramHandler (String) +
+

Instagram handler

+
+
+
+ facebookHandler (String) +
+

Facebook handler

+
+
+
+ youtubeHandler (String) +
+

Youtube handler

+
+
+
+ githubHandler (String) +
+

Github handler

+
+
+
+ announcement (TranslatedField) +
+

Highlighted announcement for this assembly

+
+
+
+ members ([AssemblyMember]!) +
+

Members of this assembly

+
+
+
+ children ([Assembly]!) +
+

Childrens of this assembly

+
+
+
+ categories ([Category]!) +
+

Categories for this space

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
filter + CategoryFilter + +

Provides several methods to filter the results

+
+
+
+
+ linkedParticipatorySpaces ([ParticipatorySpaceLink!]!) +
+

Lists all linked participatory spaces in a polymorphic way

+
+
+
+ attachments ([Attachment]!) +
+

This object's attachments

+
+
+
+ title (TranslatedField!) +
+

The graphql_name of this participatory space.

+
+
+
+ type (String!) +
+

The participatory space class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ manifest (ParticipatorySpaceManifest!) +
+

The manifest information for the participatory space.

+
+
+
+ components ([ComponentInterface!]) +
+

Lists the components this space contains.

+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
filter + ComponentFilter + +

Provides several methods to filter the results

+
order + ComponentSort + +

Provides several methods to order the results

+
+
+
+
+ stats ([Statistic]) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/assemblymember/index.html b/app/views/static/api/docs/object/assemblymember/index.html new file mode 100644 index 0000000..84a2324 --- /dev/null +++ b/app/views/static/api/docs/object/assemblymember/index.html @@ -0,0 +1,1101 @@ +

+AssemblyMember

+

An assembly member

+

+Fields

+
+ id (ID!) +
+

Internal ID of the member

+
+
+
+ fullName (String) +
+

Full name of the member

+
+
+
+ position (String) +
+

Position of the member in the assembly

+
+
+
+ user (User) +
+

The corresponding decidim user

+
+
+
+ createdAt (DateTime) +
+

The time this member was created

+
+
+
+ updatedAt (DateTime) +
+

The time this member was updated

+
+
+
+ weight (Int) +
+

Order of appearance in which it should be represented

+
+
+
+ gender (String) +
+

Gender of the member

+
+
+
+ birthplace (String) +
+

Birthplace of the member

+
+
+
+ designationDate (Date) +
+

Date of designation of the member

+
+
+
+ positionOther (String) +
+

Custom position name

+
+
+
+ ceasedDate (Date) +
+

Date of cease for the member

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/attachment/index.html b/app/views/static/api/docs/object/attachment/index.html new file mode 100644 index 0000000..95cff6a --- /dev/null +++ b/app/views/static/api/docs/object/attachment/index.html @@ -0,0 +1,1059 @@ +

+Attachment

+

A file attachment

+

+Fields

+
+ title (TranslatedField!) +
+

The title of this attachment.

+
+
+
+ description (TranslatedField!) +
+

The description of this attachment.

+
+
+
+ url (String!) +
+

The url of this attachment

+
+
+
+ type (String!) +
+

The type of this attachment

+
+
+
+ thumbnail (String) +
+

A thumbnail of this attachment, if it is an image.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/blogs/index.html b/app/views/static/api/docs/object/blogs/index.html new file mode 100644 index 0000000..6e4a67b --- /dev/null +++ b/app/views/static/api/docs/object/blogs/index.html @@ -0,0 +1,1157 @@ +

+Blogs

+

A blogs component of a participatory space.

+

+Implements

+ +

+Connections

+
+ posts (PostConnection!) +
+

List all posts

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
after + String + +

Returns the elements in the list that come after the specified cursor.

+
before + String + +

Returns the elements in the list that come before the specified cursor.

+
first + Int + +

Returns the first n elements from the list.

+
last + Int + +

Returns the last n elements from the list.

+
order + PostSort + +

Provides several methods to order the results

+
filter + PostFilter + +

Provides several methods to filter the results

+
+
+
+

+Fields

+
+ post (Post) +
+

Finds one post

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +

The ID of the post

+
+
+
+
+ id (ID!) +
+

The Component's unique ID

+
+
+
+ name (TranslatedField!) +
+

The name of this component.

+
+
+
+ weight (Int!) +
+

The weight of the component

+
+
+
+ participatorySpace (ParticipatorySpace!) +
+

The participatory space in which this component belongs to.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/budget/index.html b/app/views/static/api/docs/object/budget/index.html new file mode 100644 index 0000000..8a3f756 --- /dev/null +++ b/app/views/static/api/docs/object/budget/index.html @@ -0,0 +1,1095 @@ +

+Budget

+

A budget

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The internal ID of this budget

+
+
+
+ title (TranslatedField!) +
+

The title for this budget

+
+
+
+ description (TranslatedField!) +
+

The description for this budget

+
+
+
+ total_budget (Int!) +
+

The total budget

+
+
+
+ createdAt (DateTime) +
+

When this budget was created

+
+
+
+ updatedAt (DateTime) +
+

When this budget was updated

+
+
+
+ projects ([Project]!) +
+

The projects for this budget

+
+
+
+ versionsCount (Int!) +
+

Total number of versions

+
+
+
+ versions ([TraceVersion]!) +
+

This object's versions

+
+
+
+ scope (Scope) +
+

The object's scope

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/budgetconnection/index.html b/app/views/static/api/docs/object/budgetconnection/index.html new file mode 100644 index 0000000..5f2a904 --- /dev/null +++ b/app/views/static/api/docs/object/budgetconnection/index.html @@ -0,0 +1,1047 @@ +

+BudgetConnection

+

The connection type for Budget.

+

+Fields

+
+ edges ([BudgetEdge]) +
+

A list of edges.

+
+
+
+ nodes ([Budget]) +
+

A list of nodes.

+
+
+
+ pageInfo (PageInfo!) +
+

Information to aid in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/budgetedge/index.html b/app/views/static/api/docs/object/budgetedge/index.html new file mode 100644 index 0000000..ffd6104 --- /dev/null +++ b/app/views/static/api/docs/object/budgetedge/index.html @@ -0,0 +1,1041 @@ +

+BudgetEdge

+

An edge in a connection.

+

+Fields

+
+ node (Budget) +
+

The item at the end of the edge.

+
+
+
+ cursor (String!) +
+

A cursor for use in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/budgets/index.html b/app/views/static/api/docs/object/budgets/index.html new file mode 100644 index 0000000..1a73d2e --- /dev/null +++ b/app/views/static/api/docs/object/budgets/index.html @@ -0,0 +1,1136 @@ +

+Budgets

+

A budget component of a participatory space.

+

+Implements

+ +

+Connections

+
+ budgets (BudgetConnection) +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
after + String + +

Returns the elements in the list that come after the specified cursor.

+
before + String + +

Returns the elements in the list that come before the specified cursor.

+
first + Int + +

Returns the first n elements from the list.

+
last + Int + +

Returns the last n elements from the list.

+
+
+
+

+Fields

+
+ budget (Budget) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +
+
+
+
+ id (ID!) +
+

The Component's unique ID

+
+
+
+ name (TranslatedField!) +
+

The name of this component.

+
+
+
+ weight (Int!) +
+

The weight of the component

+
+
+
+ participatorySpace (ParticipatorySpace!) +
+

The participatory space in which this component belongs to.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/category/index.html b/app/views/static/api/docs/object/category/index.html new file mode 100644 index 0000000..26c73e2 --- /dev/null +++ b/app/views/static/api/docs/object/category/index.html @@ -0,0 +1,1052 @@ +

+Category

+

A category that can be applied to other resources.

+

+Fields

+
+ id (ID!) +
+
+
+
+ name (TranslatedField!) +
+

The name of this category.

+
+
+
+ subcategories ([Category]!) +
+

Subcategories of this category.

+
+
+
+ parent (Category) +
+

This category's parent category.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/comment/index.html b/app/views/static/api/docs/object/comment/index.html new file mode 100644 index 0000000..87d7d1e --- /dev/null +++ b/app/views/static/api/docs/object/comment/index.html @@ -0,0 +1,1188 @@ +

+Comment

+

A comment

+

+Implements

+ +

+Fields

+
+ author (Author!) +
+

The resource author

+
+
+
+ id (ID!) +
+

The Comment's unique ID

+
+
+
+ sgid (String!) +
+

The Comment's signed global id

+
+
+
+ body (String!) +
+

The comment message

+
+
+
+ formattedBody (String!) +
+

The comment message ready to display (it is expected to include HTML)

+
+
+
+ createdAt (String!) +
+

The creation date of the comment

+
+
+
+ formattedCreatedAt (String!) +
+

The creation date of the comment in relative format

+
+
+
+ alignment (Int) +
+

The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'

+
+
+
+ upVotes (Int!) +
+

The number of comment's upVotes

+
+
+
+ upVoted (Boolean!) +
+

Check if the current user has upvoted the comment

+
+
+
+ downVotes (Int!) +
+

The number of comment's downVotes

+
+
+
+ downVoted (Boolean!) +
+

Check if the current user has downvoted the comment

+
+
+
+ hasComments (Boolean!) +
+

Check if the commentable has comments

+
+
+
+ alreadyReported (Boolean!) +
+

Check if the current user has reported the comment

+
+
+
+ userAllowedToComment (Boolean!) +
+

Check if the current user can comment

+
+
+
+ type (String!) +
+

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ acceptsNewComments (Boolean!) +
+

Whether the object can have new comments or not

+
+
+
+ commentsHaveAlignment (Boolean!) +
+

Whether the object comments have alignment or not

+
+
+
+ commentsHaveVotes (Boolean!) +
+

Whether the object comments have votes or not

+
+
+
+ comments ([Comment!]!) +
+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
orderBy + String + +

Order the comments

+
singleCommentId + String + +

ID of the single comment to look at

+
+
+
+
+ totalCommentsCount (Int!) +
+

The number of comments in all levels this resource holds

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/commentable/index.html b/app/views/static/api/docs/object/commentable/index.html new file mode 100644 index 0000000..10b2d39 --- /dev/null +++ b/app/views/static/api/docs/object/commentable/index.html @@ -0,0 +1,1116 @@ +

+Commentable

+

A commentable object

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The commentable's ID

+
+
+
+ type (String!) +
+

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ acceptsNewComments (Boolean!) +
+

Whether the object can have new comments or not

+
+
+
+ commentsHaveAlignment (Boolean!) +
+

Whether the object comments have alignment or not

+
+
+
+ commentsHaveVotes (Boolean!) +
+

Whether the object comments have votes or not

+
+
+
+ comments ([Comment!]!) +
+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
orderBy + String + +

Order the comments

+
singleCommentId + String + +

ID of the single comment to look at

+
+
+
+
+ totalCommentsCount (Int!) +
+

The number of comments in all levels this resource holds

+
+
+
+ hasComments (Boolean!) +
+

Check if the commentable has comments

+
+
+
+ userAllowedToComment (Boolean!) +
+

Check if the current user can comment

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/commentablemutation/index.html b/app/views/static/api/docs/object/commentablemutation/index.html new file mode 100644 index 0000000..0387e21 --- /dev/null +++ b/app/views/static/api/docs/object/commentablemutation/index.html @@ -0,0 +1,1080 @@ +

+CommentableMutation

+

A commentable which includes its available mutations

+

+Fields

+
+ id (ID!) +
+

The Commentable's unique ID

+
+
+
+ addComment (Comment) +
+

Add a new comment to a commentable

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
body + String! + +

The comments's body

+
alignment + Int + +

The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'

+

The default value is 0.

+
userGroupId + ID + +

The comment's user group id. Replaces the author.

+
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/commentmutation/index.html b/app/views/static/api/docs/object/commentmutation/index.html new file mode 100644 index 0000000..ce8314c --- /dev/null +++ b/app/views/static/api/docs/object/commentmutation/index.html @@ -0,0 +1,1045 @@ +

+CommentMutation

+

A comment which includes its available mutations

+

+Fields

+
+ id (ID!) +
+

The Comment's unique ID

+
+
+
+ upVote (Comment) +
+
+
+
+ downVote (Comment) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/coordinates/index.html b/app/views/static/api/docs/object/coordinates/index.html new file mode 100644 index 0000000..45414d6 --- /dev/null +++ b/app/views/static/api/docs/object/coordinates/index.html @@ -0,0 +1,1041 @@ +

+Coordinates

+

Physical coordinates for a location

+

+Fields

+
+ latitude (Float!) +
+

Latitude of this coordinate

+
+
+
+ longitude (Float!) +
+

Longitude of this coordinate

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/debate/index.html b/app/views/static/api/docs/object/debate/index.html new file mode 100644 index 0000000..8979d83 --- /dev/null +++ b/app/views/static/api/docs/object/debate/index.html @@ -0,0 +1,1197 @@ +

+Debate

+

A debate

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The internal ID for this debate

+
+
+
+ title (TranslatedField) +
+

The title for this debate

+
+
+
+ description (TranslatedField) +
+

The description for this debate

+
+
+
+ instructions (TranslatedField) +
+

The instructions for this debate

+
+
+
+ startTime (DateTime) +
+

The start time for this debate

+
+
+
+ endTime (DateTime) +
+

The end time for this debate

+
+
+
+ image (String) +
+

The image of this debate

+
+
+
+ createdAt (DateTime) +
+

When this debate was created

+
+
+
+ updatedAt (DateTime) +
+

When this debate was updated

+
+
+
+ informationUpdates (TranslatedField) +
+

The information updates for this debate

+
+
+
+ reference (String) +
+

The reference for this debate

+
+
+
+ scope (Scope) +
+

The object's scope

+
+
+
+ author (Author) +
+

The resource author

+
+
+
+ type (String!) +
+

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ acceptsNewComments (Boolean!) +
+

Whether the object can have new comments or not

+
+
+
+ commentsHaveAlignment (Boolean!) +
+

Whether the object comments have alignment or not

+
+
+
+ commentsHaveVotes (Boolean!) +
+

Whether the object comments have votes or not

+
+
+
+ comments ([Comment!]!) +
+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
orderBy + String + +

Order the comments

+
singleCommentId + String + +

ID of the single comment to look at

+
+
+
+
+ totalCommentsCount (Int!) +
+

The number of comments in all levels this resource holds

+
+
+
+ hasComments (Boolean!) +
+

Check if the commentable has comments

+
+
+
+ userAllowedToComment (Boolean!) +
+

Check if the current user can comment

+
+
+
+ category (Category) +
+

The object's category

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/debateconnection/index.html b/app/views/static/api/docs/object/debateconnection/index.html new file mode 100644 index 0000000..a88d4d7 --- /dev/null +++ b/app/views/static/api/docs/object/debateconnection/index.html @@ -0,0 +1,1047 @@ +

+DebateConnection

+

The connection type for Debate.

+

+Fields

+
+ edges ([DebateEdge]) +
+

A list of edges.

+
+
+
+ nodes ([Debate]) +
+

A list of nodes.

+
+
+
+ pageInfo (PageInfo!) +
+

Information to aid in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/debateedge/index.html b/app/views/static/api/docs/object/debateedge/index.html new file mode 100644 index 0000000..4c9b23c --- /dev/null +++ b/app/views/static/api/docs/object/debateedge/index.html @@ -0,0 +1,1041 @@ +

+DebateEdge

+

An edge in a connection.

+

+Fields

+
+ node (Debate) +
+

The item at the end of the edge.

+
+
+
+ cursor (String!) +
+

A cursor for use in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/debates/index.html b/app/views/static/api/docs/object/debates/index.html new file mode 100644 index 0000000..35060e7 --- /dev/null +++ b/app/views/static/api/docs/object/debates/index.html @@ -0,0 +1,1136 @@ +

+Debates

+

A debates component of a participatory space.

+

+Implements

+ +

+Connections

+
+ debates (DebateConnection) +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
after + String + +

Returns the elements in the list that come after the specified cursor.

+
before + String + +

Returns the elements in the list that come before the specified cursor.

+
first + Int + +

Returns the first n elements from the list.

+
last + Int + +

Returns the last n elements from the list.

+
+
+
+

+Fields

+
+ debate (Debate) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +
+
+
+
+ id (ID!) +
+

The Component's unique ID

+
+
+
+ name (TranslatedField!) +
+

The name of this component.

+
+
+
+ weight (Int!) +
+

The weight of the component

+
+
+
+ participatorySpace (ParticipatorySpace!) +
+

The participatory space in which this component belongs to.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/decidim/index.html b/app/views/static/api/docs/object/decidim/index.html new file mode 100644 index 0000000..3979e6d --- /dev/null +++ b/app/views/static/api/docs/object/decidim/index.html @@ -0,0 +1,1041 @@ +

+Decidim

+

Decidim's framework-related properties.

+

+Fields

+
+ version (String!) +
+

The current decidim's version of this deployment.

+
+
+
+ applicationName (String!) +
+

The current installation's name.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/fingerprint/index.html b/app/views/static/api/docs/object/fingerprint/index.html new file mode 100644 index 0000000..bce83a2 --- /dev/null +++ b/app/views/static/api/docs/object/fingerprint/index.html @@ -0,0 +1,1041 @@ +

+Fingerprint

+

A fingerprint object

+

+Fields

+
+ value (String!) +
+

The the hash value for the fingerprint

+
+
+
+ source (String!) +
+

Returns the source String (usually a json) from which the fingerprint is generated.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/hashtagtype/index.html b/app/views/static/api/docs/object/hashtagtype/index.html new file mode 100644 index 0000000..ac9a27c --- /dev/null +++ b/app/views/static/api/docs/object/hashtagtype/index.html @@ -0,0 +1,1035 @@ +

+HashtagType

+

hashtags list

+

+Fields

+
+ name (String!) +
+

The hashtag's name

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/index.html b/app/views/static/api/docs/object/index.html new file mode 100644 index 0000000..b242983 --- /dev/null +++ b/app/views/static/api/docs/object/index.html @@ -0,0 +1,1028 @@ +

+Objects

+

Objects in GraphQL represent the resources that you can access. Objects can contain a list of fields, which are specifically typed. For example, the Repository object has a field called name, which is a String.

+

For more information, see the GraphQL spec.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/localizedstring/index.html b/app/views/static/api/docs/object/localizedstring/index.html new file mode 100644 index 0000000..e69d100 --- /dev/null +++ b/app/views/static/api/docs/object/localizedstring/index.html @@ -0,0 +1,1047 @@ +

+LocalizedString

+

Represents a particular translation of a LocalizedStringType

+

+Fields

+
+ locale (String!) +
+

The standard locale of this translation.

+
+
+
+ text (String) +
+

The content of this translation.

+
+
+
+ machineTranslated (Boolean!) +
+

Whether this string is machine translated or not.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/meeting/index.html b/app/views/static/api/docs/object/meeting/index.html new file mode 100644 index 0000000..6b90fa2 --- /dev/null +++ b/app/views/static/api/docs/object/meeting/index.html @@ -0,0 +1,1340 @@ +

+Meeting

+

A meeting

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

ID of this meeting

+
+
+
+ reference (String!) +
+

Reference for this meeting

+
+
+
+ title (TranslatedField!) +
+

The title of this meeting.

+
+
+
+ description (TranslatedField) +
+

The description of this meeting.

+
+
+
+ startTime (DateTime!) +
+

The time this meeting starts

+
+
+
+ endTime (DateTime!) +
+

The time this meeting ends

+
+
+
+ agenda (MeetingAgenda) +
+

Agenda for this meeting, if available

+
+
+
+ closed (Boolean!) +
+

Whether this meeting is closed or not.

+
+
+
+ isWithdrawn (Boolean!) +
+

Whether this meeting is withdrawn or not.

+
+
+
+ closingReport (TranslatedField) +
+

The closing report of this meeting.

+
+
+
+ videoUrl (String) +
+

URL for the video of the session, if any

+
+
+
+ audioUrl (String) +
+

URL for the audio of the session, if any

+
+
+
+ createdAt (DateTime) +
+

The date and time this minutes was created

+
+
+
+ updatedAt (DateTime) +
+

The date and time this minutes was updated

+
+
+
+ attendingOrganizations (String) +
+

list of attending organizations

+
+
+
+ attendeeCount (Int) +
+

Amount of attendees to this meeting

+
+
+
+ contributionCount (Int) +
+

Amount of contributions to this meeting

+
+
+
+ privateMeeting (Boolean!) +
+

Whether the meeting is private or not (it can only be true if transparent)

+
+
+
+ transparent (Boolean!) +
+

For private meetings, information is public if transparent

+
+
+
+ registrationsEnabled (Boolean!) +
+

Whether the registrations are enabled or not

+
+
+
+ registrationTerms (TranslatedField) +
+

The registration terms

+
+
+
+ remainingSlots (Int) +
+

Amount of slots available for this meeting

+
+
+
+ registrationFormEnabled (Boolean!) +
+

Whether the registrations have a form or not

+
+
+
+ registrationForm (Questionnaire) +
+

If registration requires to fill a form, this is the questionnaire

+
+
+
+ location (TranslatedField) +
+

The location of this meeting (free format)

+
+
+
+ locationHints (TranslatedField) +
+

The location of this meeting (free format)

+
+
+
+ address (String) +
+

The physical address of this meeting (used for geolocation)

+
+
+
+ coordinates (Coordinates) +
+

Physical coordinates for this meeting

+
+
+
+ typeOfMeeting (String!) +
+

The type of the meeting (online or in-person)

+
+
+
+ onlineMeetingUrl (String!) +
+

The URL of the meeting (when the type is online)

+
+
+
+ iframeEmbedType (String) +
+

The type of displaying of the online meeting URL

+
+
+
+ proposalsFromMeeting ([Proposal]!) +
+

Proposals created in this meeting

+
+
+
+ services ([MeetingService]!) +
+

The object's services

+
+
+
+ attachments ([Attachment]!) +
+

This object's attachments

+
+
+
+ scope (Scope) +
+

The object's scope

+
+
+
+ category (Category) +
+

The object's category

+
+
+
+ author (Author) +
+

The resource author

+
+
+
+ type (String!) +
+

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ acceptsNewComments (Boolean!) +
+

Whether the object can have new comments or not

+
+
+
+ commentsHaveAlignment (Boolean!) +
+

Whether the object comments have alignment or not

+
+
+
+ commentsHaveVotes (Boolean!) +
+

Whether the object comments have votes or not

+
+
+
+ comments ([Comment!]!) +
+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
orderBy + String + +

Order the comments

+
singleCommentId + String + +

ID of the single comment to look at

+
+
+
+
+ totalCommentsCount (Int!) +
+

The number of comments in all levels this resource holds

+
+
+
+ hasComments (Boolean!) +
+

Check if the commentable has comments

+
+
+
+ userAllowedToComment (Boolean!) +
+

Check if the current user can comment

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/meetingagenda/index.html b/app/views/static/api/docs/object/meetingagenda/index.html new file mode 100644 index 0000000..2b196bb --- /dev/null +++ b/app/views/static/api/docs/object/meetingagenda/index.html @@ -0,0 +1,1059 @@ +

+MeetingAgenda

+

A meeting agenda

+

+Fields

+
+ id (ID!) +
+

The ID for the agenda

+
+
+
+ title (TranslatedField) +
+

The title for the agenda

+
+
+
+ items ([MeetingAgendaItem]!) +
+

Items and sub-items of the agenda

+
+
+
+ createdAt (DateTime) +
+

The date and time this agenda was created

+
+
+
+ updatedAt (DateTime) +
+

The date and time this agenda was updated

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/meetingagendaitem/index.html b/app/views/static/api/docs/object/meetingagendaitem/index.html new file mode 100644 index 0000000..f95f363 --- /dev/null +++ b/app/views/static/api/docs/object/meetingagendaitem/index.html @@ -0,0 +1,1089 @@ +

+MeetingAgendaItem

+

A meeting agenda item

+

+Fields

+
+ id (ID!) +
+

The ID for this agenda item

+
+
+
+ title (TranslatedField) +
+

The title for this agenda item

+
+
+
+ description (TranslatedField) +
+

The description for this agenda item

+
+
+
+ items ([MeetingAgendaItem]!) +
+

Sub-items (children) of this agenda item

+
+
+
+ parent (MeetingAgendaItem) +
+

Parent agenda item, if available

+
+
+
+ agenda (MeetingAgenda) +
+

Belonging agenda

+
+
+
+ duration (Int!) +
+

Duration in number of minutes for this item in this agenda

+
+
+
+ position (Int!) +
+

Order position for this agenda item

+
+
+
+ createdAt (DateTime) +
+

The date and time this agenda item was created

+
+
+
+ updatedAt (DateTime) +
+

The date and time this agenda item was updated

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/meetingconnection/index.html b/app/views/static/api/docs/object/meetingconnection/index.html new file mode 100644 index 0000000..6a7f139 --- /dev/null +++ b/app/views/static/api/docs/object/meetingconnection/index.html @@ -0,0 +1,1047 @@ +

+MeetingConnection

+

The connection type for Meeting.

+

+Fields

+
+ edges ([MeetingEdge]) +
+

A list of edges.

+
+
+
+ nodes ([Meeting]) +
+

A list of nodes.

+
+
+
+ pageInfo (PageInfo!) +
+

Information to aid in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/meetingedge/index.html b/app/views/static/api/docs/object/meetingedge/index.html new file mode 100644 index 0000000..54fd3cb --- /dev/null +++ b/app/views/static/api/docs/object/meetingedge/index.html @@ -0,0 +1,1041 @@ +

+MeetingEdge

+

An edge in a connection.

+

+Fields

+
+ node (Meeting) +
+

The item at the end of the edge.

+
+
+
+ cursor (String!) +
+

A cursor for use in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/meetings/index.html b/app/views/static/api/docs/object/meetings/index.html new file mode 100644 index 0000000..09fc860 --- /dev/null +++ b/app/views/static/api/docs/object/meetings/index.html @@ -0,0 +1,1136 @@ +

+Meetings

+

A meetings component of a participatory space.

+

+Implements

+ +

+Connections

+
+ meetings (MeetingConnection) +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
after + String + +

Returns the elements in the list that come after the specified cursor.

+
before + String + +

Returns the elements in the list that come before the specified cursor.

+
first + Int + +

Returns the first n elements from the list.

+
last + Int + +

Returns the last n elements from the list.

+
+
+
+

+Fields

+
+ meeting (Meeting) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +
+
+
+
+ id (ID!) +
+

The Component's unique ID

+
+
+
+ name (TranslatedField!) +
+

The name of this component.

+
+
+
+ weight (Int!) +
+

The weight of the component

+
+
+
+ participatorySpace (ParticipatorySpace!) +
+

The participatory space in which this component belongs to.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/meetingservice/index.html b/app/views/static/api/docs/object/meetingservice/index.html new file mode 100644 index 0000000..6a575ef --- /dev/null +++ b/app/views/static/api/docs/object/meetingservice/index.html @@ -0,0 +1,1041 @@ +

+MeetingService

+

A meeting service

+

+Fields

+
+ title (TranslatedField) +
+

The title for the service

+
+
+
+ description (TranslatedField) +
+

The description for the service

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/metric/index.html b/app/views/static/api/docs/object/metric/index.html new file mode 100644 index 0000000..09a22d8 --- /dev/null +++ b/app/views/static/api/docs/object/metric/index.html @@ -0,0 +1,1047 @@ +

+Metric

+

Metric data

+

+Fields

+
+ name (String!) +
+

The graphql_name of the metric

+
+
+
+ count (Int!) +
+

The last value of the metric

+
+
+
+ history ([MetricHistory]!) +
+

The historic values for this metric

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/metrichistory/index.html b/app/views/static/api/docs/object/metrichistory/index.html new file mode 100644 index 0000000..deb756c --- /dev/null +++ b/app/views/static/api/docs/object/metrichistory/index.html @@ -0,0 +1,1040 @@ +

+MetricHistory

+

+Fields

+
+ key (String!) +
+

The key value

+
+
+
+ value (Int!) +
+

The value for each key

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/organization/index.html b/app/views/static/api/docs/object/organization/index.html new file mode 100644 index 0000000..7ae605f --- /dev/null +++ b/app/views/static/api/docs/object/organization/index.html @@ -0,0 +1,1041 @@ +

+Organization

+

The current organization

+

+Fields

+
+ name (String) +
+

The name of the current organization

+
+
+
+ stats ([Statistic]) +
+

The statistics associated to this object

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/page/index.html b/app/views/static/api/docs/object/page/index.html new file mode 100644 index 0000000..b9af382 --- /dev/null +++ b/app/views/static/api/docs/object/page/index.html @@ -0,0 +1,1058 @@ +

+Page

+

A page

+

+Fields

+
+ id (ID!) +
+
+
+
+ title (TranslatedField!) +
+

The title of this page (same as the component name).

+
+
+
+ body (TranslatedField) +
+

The body of this page.

+
+
+
+ createdAt (DateTime!) +
+

The time this page was created

+
+
+
+ updatedAt (DateTime!) +
+

The time this page was updated

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/pageconnection/index.html b/app/views/static/api/docs/object/pageconnection/index.html new file mode 100644 index 0000000..687ad04 --- /dev/null +++ b/app/views/static/api/docs/object/pageconnection/index.html @@ -0,0 +1,1047 @@ +

+PageConnection

+

The connection type for Page.

+

+Fields

+
+ edges ([PageEdge]) +
+

A list of edges.

+
+
+
+ nodes ([Page]) +
+

A list of nodes.

+
+
+
+ pageInfo (PageInfo!) +
+

Information to aid in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/pageedge/index.html b/app/views/static/api/docs/object/pageedge/index.html new file mode 100644 index 0000000..d5923bd --- /dev/null +++ b/app/views/static/api/docs/object/pageedge/index.html @@ -0,0 +1,1041 @@ +

+PageEdge

+

An edge in a connection.

+

+Fields

+
+ node (Page) +
+

The item at the end of the edge.

+
+
+
+ cursor (String!) +
+

A cursor for use in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/pageinfo/index.html b/app/views/static/api/docs/object/pageinfo/index.html new file mode 100644 index 0000000..7301f1b --- /dev/null +++ b/app/views/static/api/docs/object/pageinfo/index.html @@ -0,0 +1,1053 @@ +

+PageInfo

+

Information about pagination in a connection.

+

+Fields

+
+ hasNextPage (Boolean!) +
+

When paginating forwards, are there more items?

+
+
+
+ hasPreviousPage (Boolean!) +
+

When paginating backwards, are there more items?

+
+
+
+ startCursor (String) +
+

When paginating backwards, the cursor to continue.

+
+
+
+ endCursor (String) +
+

When paginating forwards, the cursor to continue.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/pages/index.html b/app/views/static/api/docs/object/pages/index.html new file mode 100644 index 0000000..e7df824 --- /dev/null +++ b/app/views/static/api/docs/object/pages/index.html @@ -0,0 +1,1136 @@ +

+Pages

+

A pages component of a participatory space.

+

+Implements

+ +

+Connections

+
+ pages (PageConnection) +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
after + String + +

Returns the elements in the list that come after the specified cursor.

+
before + String + +

Returns the elements in the list that come before the specified cursor.

+
first + Int + +

Returns the first n elements from the list.

+
last + Int + +

Returns the last n elements from the list.

+
+
+
+

+Fields

+
+ page (Page) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +
+
+
+
+ id (ID!) +
+

The Component's unique ID

+
+
+
+ name (TranslatedField!) +
+

The name of this component.

+
+
+
+ weight (Int!) +
+

The weight of the component

+
+
+
+ participatorySpace (ParticipatorySpace!) +
+

The participatory space in which this component belongs to.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/participatoryprocess/index.html b/app/views/static/api/docs/object/participatoryprocess/index.html new file mode 100644 index 0000000..cb43a7b --- /dev/null +++ b/app/views/static/api/docs/object/participatoryprocess/index.html @@ -0,0 +1,1301 @@ +

+ParticipatoryProcess

+

A participatory process

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The internal ID for this participatory process

+
+
+
+ slug (String!) +
+
+
+
+ hashtag (String) +
+

The hashtag for this participatory process

+
+
+
+ createdAt (DateTime!) +
+

The time this page was created

+
+
+
+ updatedAt (DateTime!) +
+

The time this page was updated

+
+
+
+ publishedAt (DateTime!) +
+

The time this page was published

+
+
+
+ subtitle (TranslatedField) +
+

The subtitle of this participatory process.

+
+
+
+ description (TranslatedField) +
+

The description of this participatory process.

+
+
+
+ shortDescription (TranslatedField) +
+

The short description of this participatory process.

+
+
+
+ startDate (Date) +
+

This participatory process' start date.

+
+
+
+ endDate (Date) +
+

This participatory process' end date.

+
+
+
+ bannerImage (String) +
+

The banner image for this participatory process

+
+
+
+ heroImage (String) +
+

The hero image for this participatory process

+
+
+
+ +
+

If this participatory process is promoted (therefore in the homepage)

+
+
+
+ developerGroup (TranslatedField) +
+

The promoter group of this participatory process.

+
+
+
+ metaScope (TranslatedField) +
+

The scope metadata of this participatory process.

+
+
+
+ localArea (TranslatedField) +
+

The organization area of this participatory process.

+
+
+
+ target (TranslatedField) +
+

Who participates in this participatory process.

+
+
+
+ participatoryScope (TranslatedField) +
+

What is decided on this participatory process.

+
+
+
+ participatoryStructure (TranslatedField) +
+

How it is decided on this participatory process.

+
+
+
+ showMetrics (Boolean) +
+

If this participatory process should show metrics

+
+
+
+ showStatistics (Boolean) +
+

If this participatory process should show statistics

+
+
+
+ scopesEnabled (Boolean) +
+

If this participatory process has scopes enabled

+
+
+
+ announcement (TranslatedField) +
+

Highlighted announcement for this participatory process.

+
+
+
+ reference (String) +
+

Reference prefix for this participatory process

+
+
+
+ steps ([ParticipatoryProcessStep]!) +
+

All the steps of this process.

+
+
+
+ participatoryProcessGroup (ParticipatoryProcessGroup) +
+

The participatory process group in which this process belong to

+
+
+
+ categories ([Category]!) +
+

Categories for this space

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
filter + CategoryFilter + +

Provides several methods to filter the results

+
+
+
+
+ attachments ([Attachment]!) +
+

This object's attachments

+
+
+
+ scope (Scope) +
+

The object's scope

+
+
+
+ linkedParticipatorySpaces ([ParticipatorySpaceLink!]!) +
+

Lists all linked participatory spaces in a polymorphic way

+
+
+
+ title (TranslatedField!) +
+

The graphql_name of this participatory space.

+
+
+
+ type (String!) +
+

The participatory space class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ manifest (ParticipatorySpaceManifest!) +
+

The manifest information for the participatory space.

+
+
+
+ components ([ComponentInterface!]) +
+

Lists the components this space contains.

+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
filter + ComponentFilter + +

Provides several methods to filter the results

+
order + ComponentSort + +

Provides several methods to order the results

+
+
+
+
+ stats ([Statistic]) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/participatoryprocessgroup/index.html b/app/views/static/api/docs/object/participatoryprocessgroup/index.html new file mode 100644 index 0000000..2359f44 --- /dev/null +++ b/app/views/static/api/docs/object/participatoryprocessgroup/index.html @@ -0,0 +1,1059 @@ +

+ParticipatoryProcessGroup

+

A participatory process group

+

+Fields

+
+ id (ID!) +
+

ID of this participatory process group

+
+
+
+ title (TranslatedField) +
+

The title of this participatory process group

+
+
+
+ description (TranslatedField) +
+

The description of this participatory process group

+
+
+
+ participatoryProcesses ([ParticipatoryProcess]!) +
+

Lists all the participatory processes belonging to this group

+
+
+
+ heroImage (String) +
+

The hero image for this participatory process group

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/participatoryprocessstep/index.html b/app/views/static/api/docs/object/participatoryprocessstep/index.html new file mode 100644 index 0000000..50690f5 --- /dev/null +++ b/app/views/static/api/docs/object/participatoryprocessstep/index.html @@ -0,0 +1,1089 @@ +

+ParticipatoryProcessStep

+

A participatory process step

+

+Fields

+
+ id (ID!) +
+

The unique ID of this step.

+
+
+
+ participatoryProcess (ParticipatoryProcess!) +
+

The participatory process in which this step belongs to.

+
+
+
+ title (TranslatedField!) +
+

The title of this step

+
+
+
+ description (TranslatedField) +
+

The description of this step

+
+
+
+ startDate (DateTime) +
+

This step's start date

+
+
+
+ endDate (DateTime) +
+

This step's end date

+
+
+
+ callToActionPath (String) +
+

A call to action URL for this step

+
+
+
+ callToActionText (TranslatedField) +
+

The call to action text for this step

+
+
+
+ active (Boolean) +
+

If this step is the active one

+
+
+
+ position (Int) +
+

Ordering position among all the steps

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/participatoryprocesstype/index.html b/app/views/static/api/docs/object/participatoryprocesstype/index.html new file mode 100644 index 0000000..ee90d07 --- /dev/null +++ b/app/views/static/api/docs/object/participatoryprocesstype/index.html @@ -0,0 +1,1059 @@ +

+ParticipatoryProcessType

+

A participatory process type

+

+Fields

+
+ id (ID!) +
+

Unique ID of this participatory process type

+
+
+
+ title (TranslatedField) +
+

The title of this participatory process type

+
+
+
+ createdAt (DateTime!) +
+

The time this participatory process type was created

+
+
+
+ updatedAt (DateTime!) +
+

The time this participatory process type was updated

+
+
+
+ processes ([ParticipatoryProcess]!) +
+

Lists all the participatory processes belonging to this type

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/participatoryspace/index.html b/app/views/static/api/docs/object/participatoryspace/index.html new file mode 100644 index 0000000..ba44d4a --- /dev/null +++ b/app/views/static/api/docs/object/participatoryspace/index.html @@ -0,0 +1,1098 @@ +

+ParticipatorySpace

+

A participatory space

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The participatory space's unique ID

+
+
+
+ title (TranslatedField!) +
+

The graphql_name of this participatory space.

+
+
+
+ type (String!) +
+

The participatory space class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ manifest (ParticipatorySpaceManifest!) +
+

The manifest information for the participatory space.

+
+
+
+ components ([ComponentInterface!]) +
+

Lists the components this space contains.

+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
filter + ComponentFilter + +

Provides several methods to filter the results

+
order + ComponentSort + +

Provides several methods to order the results

+
+
+
+
+ stats ([Statistic]) +
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/participatoryspacelink/index.html b/app/views/static/api/docs/object/participatoryspacelink/index.html new file mode 100644 index 0000000..3570acf --- /dev/null +++ b/app/views/static/api/docs/object/participatoryspacelink/index.html @@ -0,0 +1,1059 @@ +

+ParticipatorySpaceLink

+

A link representation between participatory spaces

+

+Fields

+
+ id (ID!) +
+

The id of this participatory space link

+
+
+
+ fromType (String!) +
+

The origin participatory space type for this participatory space link

+
+
+
+ toType (String!) +
+

The destination participatory space type for this participatory space link

+
+
+
+ name (String!) +
+

The name (purpose) of this participatory space link

+
+
+
+ participatorySpace (ParticipatorySpaceInterface!) +
+

The linked participatory space (polymorphic)

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/participatoryspacemanifest/index.html b/app/views/static/api/docs/object/participatoryspacemanifest/index.html new file mode 100644 index 0000000..c1b35c1 --- /dev/null +++ b/app/views/static/api/docs/object/participatoryspacemanifest/index.html @@ -0,0 +1,1041 @@ +

+ParticipatorySpaceManifest

+

A participatory manifest

+

+Fields

+
+ name (String!) +
+

The name of the manifest

+
+
+
+ humanName (QuantifiableTranslatedField!) +
+

The human readable name for the manifest

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/post/index.html b/app/views/static/api/docs/object/post/index.html new file mode 100644 index 0000000..3550adb --- /dev/null +++ b/app/views/static/api/docs/object/post/index.html @@ -0,0 +1,1187 @@ +

+Post

+

A post

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The internal ID of this post

+
+
+
+ title (TranslatedField) +
+

The title for this post

+
+
+
+ body (TranslatedField) +
+

The body of this post

+
+
+
+ publishedAt (DateTime!) +
+

The time this page was published

+
+
+
+ createdAt (DateTime) +
+

The date and time this object was created

+
+
+
+ updatedAt (DateTime) +
+

The date and time this object was updated

+
+
+
+ endorsements ([Author]!) +
+

The endorsements of this object.

+
+
+
+ endorsementsCount (Int) +
+

The total amount of endorsements the object has received

+
+
+
+ versionsCount (Int!) +
+

Total number of versions

+
+
+
+ versions ([TraceVersion]!) +
+

This object's versions

+
+
+
+ author (Author) +
+

The resource author

+
+
+
+ attachments ([Attachment]!) +
+

This object's attachments

+
+
+
+ type (String!) +
+

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ acceptsNewComments (Boolean!) +
+

Whether the object can have new comments or not

+
+
+
+ commentsHaveAlignment (Boolean!) +
+

Whether the object comments have alignment or not

+
+
+
+ commentsHaveVotes (Boolean!) +
+

Whether the object comments have votes or not

+
+
+
+ comments ([Comment!]!) +
+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
orderBy + String + +

Order the comments

+
singleCommentId + String + +

ID of the single comment to look at

+
+
+
+
+ totalCommentsCount (Int!) +
+

The number of comments in all levels this resource holds

+
+
+
+ hasComments (Boolean!) +
+

Check if the commentable has comments

+
+
+
+ userAllowedToComment (Boolean!) +
+

Check if the current user can comment

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/postconnection/index.html b/app/views/static/api/docs/object/postconnection/index.html new file mode 100644 index 0000000..8221566 --- /dev/null +++ b/app/views/static/api/docs/object/postconnection/index.html @@ -0,0 +1,1047 @@ +

+PostConnection

+

The connection type for Post.

+

+Fields

+
+ edges ([PostEdge]) +
+

A list of edges.

+
+
+
+ nodes ([Post]) +
+

A list of nodes.

+
+
+
+ pageInfo (PageInfo!) +
+

Information to aid in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/postedge/index.html b/app/views/static/api/docs/object/postedge/index.html new file mode 100644 index 0000000..431d53a --- /dev/null +++ b/app/views/static/api/docs/object/postedge/index.html @@ -0,0 +1,1041 @@ +

+PostEdge

+

An edge in a connection.

+

+Fields

+
+ node (Post) +
+

The item at the end of the edge.

+
+
+
+ cursor (String!) +
+

A cursor for use in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/project/index.html b/app/views/static/api/docs/object/project/index.html new file mode 100644 index 0000000..ce39522 --- /dev/null +++ b/app/views/static/api/docs/object/project/index.html @@ -0,0 +1,1179 @@ +

+Project

+

A project

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The internal ID for this project

+
+
+
+ title (TranslatedField) +
+

The title for this project

+
+
+
+ description (TranslatedField) +
+

The description for this project

+
+
+
+ budget_amount (Int) +
+

The budget amount for this project

+
+
+
+ selected (Boolean) +
+

Whether this proposal is selected or not

+
+
+
+ createdAt (DateTime) +
+

When this project was created

+
+
+
+ updatedAt (DateTime) +
+

When this project was updated

+
+
+
+ reference (String) +
+

The reference for this project

+
+
+
+ category (Category) +
+

The object's category

+
+
+
+ type (String!) +
+

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ acceptsNewComments (Boolean!) +
+

Whether the object can have new comments or not

+
+
+
+ commentsHaveAlignment (Boolean!) +
+

Whether the object comments have alignment or not

+
+
+
+ commentsHaveVotes (Boolean!) +
+

Whether the object comments have votes or not

+
+
+
+ comments ([Comment!]!) +
+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
orderBy + String + +

Order the comments

+
singleCommentId + String + +

ID of the single comment to look at

+
+
+
+
+ totalCommentsCount (Int!) +
+

The number of comments in all levels this resource holds

+
+
+
+ hasComments (Boolean!) +
+

Check if the commentable has comments

+
+
+
+ userAllowedToComment (Boolean!) +
+

Check if the current user can comment

+
+
+
+ attachments ([Attachment]!) +
+

This object's attachments

+
+
+
+ scope (Scope) +
+

The object's scope

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/proposal/index.html b/app/views/static/api/docs/object/proposal/index.html new file mode 100644 index 0000000..93f07cd --- /dev/null +++ b/app/views/static/api/docs/object/proposal/index.html @@ -0,0 +1,1299 @@ +

+Proposal

+

A proposal

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+
+
+
+ title (TranslatedField) +
+

The title for this title

+
+
+
+ body (TranslatedField) +
+

The description for this body

+
+
+
+ address (String) +
+

The physical address (location) of this proposal

+
+
+
+ coordinates (Coordinates) +
+

Physical coordinates for this proposal

+
+
+
+ reference (String) +
+

This proposal's unique reference

+
+
+
+ state (String) +
+

The answer status in which proposal is in

+
+
+
+ answer (TranslatedField) +
+

The answer feedback for the status for this proposal

+
+
+
+ answeredAt (DateTime) +
+

The date and time this proposal was answered

+
+
+
+ publishedAt (DateTime) +
+

The date and time this proposal was published

+
+
+
+ participatoryTextLevel (String) +
+

If it is a participatory text, the level indicates the type of paragraph

+
+
+
+ position (Int) +
+

Position of this proposal in the participatory text

+
+
+
+ official (Boolean) +
+

Whether this proposal is official or not

+
+
+
+ createdInMeeting (Boolean) +
+

Whether this proposal comes from a meeting or not

+
+
+
+ meeting (Meeting) +
+

If the proposal comes from a meeting, the related meeting

+
+
+
+ voteCount (Int) +
+

The total amount of votes the proposal has received

+
+
+
+ createdAt (DateTime) +
+

The date and time this object was created

+
+
+
+ updatedAt (DateTime) +
+

The date and time this object was updated

+
+
+
+ endorsements ([Author]!) +
+

The endorsements of this object.

+
+
+
+ endorsementsCount (Int) +
+

The total amount of endorsements the object has received

+
+
+
+ versionsCount (Int!) +
+

Total number of versions

+
+
+
+ versions ([TraceVersion]!) +
+

This object's versions

+
+
+
+ amendments ([Amendment]!) +
+

This object's amendments

+
+
+
+ fingerprint (Fingerprint!) +
+

This object's fingerprint

+
+
+
+ attachments ([Attachment]!) +
+

This object's attachments

+
+
+
+ scope (Scope) +
+

The object's scope

+
+
+
+ category (Category) +
+

The object's category

+
+
+
+ authorsCount (Int) +
+

The total amount of co-authors that contributed to the entity. Note that this field may include also non-user authors like meetings or the organization

+
+
+
+ author (Author) +
+

The resource author. Note that this can be null on official proposals or meeting-proposals

+
+
+
+ authors ([Author]!) +
+

The resource co-authors. Include only users or groups of users

+
+
+
+ type (String!) +
+

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ acceptsNewComments (Boolean!) +
+

Whether the object can have new comments or not

+
+
+
+ commentsHaveAlignment (Boolean!) +
+

Whether the object comments have alignment or not

+
+
+
+ commentsHaveVotes (Boolean!) +
+

Whether the object comments have votes or not

+
+
+
+ comments ([Comment!]!) +
+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
orderBy + String + +

Order the comments

+
singleCommentId + String + +

ID of the single comment to look at

+
+
+
+
+ totalCommentsCount (Int!) +
+

The number of comments in all levels this resource holds

+
+
+
+ hasComments (Boolean!) +
+

Check if the commentable has comments

+
+
+
+ userAllowedToComment (Boolean!) +
+

Check if the current user can comment

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/proposalconnection/index.html b/app/views/static/api/docs/object/proposalconnection/index.html new file mode 100644 index 0000000..8af5226 --- /dev/null +++ b/app/views/static/api/docs/object/proposalconnection/index.html @@ -0,0 +1,1047 @@ +

+ProposalConnection

+

The connection type for Proposal.

+

+Fields

+
+ edges ([ProposalEdge]) +
+

A list of edges.

+
+
+
+ nodes ([Proposal]) +
+

A list of nodes.

+
+
+
+ pageInfo (PageInfo!) +
+

Information to aid in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/proposaledge/index.html b/app/views/static/api/docs/object/proposaledge/index.html new file mode 100644 index 0000000..a9e9f3c --- /dev/null +++ b/app/views/static/api/docs/object/proposaledge/index.html @@ -0,0 +1,1041 @@ +

+ProposalEdge

+

An edge in a connection.

+

+Fields

+
+ node (Proposal) +
+

The item at the end of the edge.

+
+
+
+ cursor (String!) +
+

A cursor for use in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/proposals/index.html b/app/views/static/api/docs/object/proposals/index.html new file mode 100644 index 0000000..cc620ac --- /dev/null +++ b/app/views/static/api/docs/object/proposals/index.html @@ -0,0 +1,1157 @@ +

+Proposals

+

A proposals component of a participatory space.

+

+Implements

+ +

+Connections

+
+ proposals (ProposalConnection) +
+

List all proposals

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
after + String + +

Returns the elements in the list that come after the specified cursor.

+
before + String + +

Returns the elements in the list that come before the specified cursor.

+
first + Int + +

Returns the first n elements from the list.

+
last + Int + +

Returns the last n elements from the list.

+
order + ProposalSort + +

Provides several methods to order the results

+
filter + ProposalFilter + +

Provides several methods to filter the results

+
+
+
+

+Fields

+
+ proposal (Proposal) +
+

Finds one proposal

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +

The ID of the proposal

+
+
+
+
+ id (ID!) +
+

The Component's unique ID

+
+
+
+ name (TranslatedField!) +
+

The name of this component.

+
+
+
+ weight (Int!) +
+

The weight of the component

+
+
+
+ participatorySpace (ParticipatorySpace!) +
+

The participatory space in which this component belongs to.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/quantifiabletranslatedfield/index.html b/app/views/static/api/docs/object/quantifiabletranslatedfield/index.html new file mode 100644 index 0000000..34397f6 --- /dev/null +++ b/app/views/static/api/docs/object/quantifiabletranslatedfield/index.html @@ -0,0 +1,1041 @@ +

+QuantifiableTranslatedField

+

A quantifiable translated field with singular and plural formats

+

+Fields

+
+ single (TranslatedField!) +
+

The singular format.

+
+
+
+ plural (TranslatedField!) +
+

The plural format.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/question/index.html b/app/views/static/api/docs/object/question/index.html new file mode 100644 index 0000000..395b851 --- /dev/null +++ b/app/views/static/api/docs/object/question/index.html @@ -0,0 +1,1100 @@ +

+Question

+

A question in a questionnaire

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

ID of this question

+
+
+
+ body (TranslatedField!) +
+

What is being asked in this question.

+
+
+
+ description (TranslatedField) +
+

The description of this question.

+
+
+
+ mandatory (Boolean!) +
+

Whether if this question is mandatory.

+
+
+
+ position (Int) +
+

Order position of the question in the questionnaire

+
+
+
+ maxChoices (Int) +
+

On questions with answer options, maximum number of choices the user has

+
+
+
+ maxCharacters (Int!) +
+

On questions with free text answers, maximum number of characters the answer can have (0 if no limit)

+
+
+
+ questionType (String) +
+

Type of question.

+
+
+
+ answerOptions ([AnswerOption]!) +
+

List of answer options in multi-choice questions.

+
+
+
+ createdAt (DateTime) +
+

The date and time this object was created

+
+
+
+ updatedAt (DateTime) +
+

The date and time this object was updated

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/questionnaire/index.html b/app/views/static/api/docs/object/questionnaire/index.html new file mode 100644 index 0000000..cc0a8b5 --- /dev/null +++ b/app/views/static/api/docs/object/questionnaire/index.html @@ -0,0 +1,1088 @@ +

+Questionnaire

+

A questionnaire

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

ID of this questionnaire

+
+
+
+ title (TranslatedField!) +
+

The title of this questionnaire.

+
+
+
+ description (TranslatedField) +
+

The description of this questionnaire.

+
+
+
+ tos (TranslatedField) +
+

The Terms of Service for this questionnaire.

+
+
+
+ forType (String) +
+

Type of entity using this questionnaire.

+
+
+
+ forEntity (QuestionnaireEntityInterface) +
+

Entity using this questionnaire.

+
+
+
+ questions ([Question]!) +
+

Questions in this questionnaire.

+
+
+
+ createdAt (DateTime) +
+

The date and time this object was created

+
+
+
+ updatedAt (DateTime) +
+

The date and time this object was updated

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/result/index.html b/app/views/static/api/docs/object/result/index.html new file mode 100644 index 0000000..dc8d0b4 --- /dev/null +++ b/app/views/static/api/docs/object/result/index.html @@ -0,0 +1,1233 @@ +

+Result

+

A result

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The internal ID for this result

+
+
+
+ title (TranslatedField) +
+

The title for this result

+
+
+
+ description (TranslatedField) +
+

The description for this result

+
+
+
+ reference (String) +
+

The reference for this result

+
+
+
+ startDate (Date) +
+

The start date for this result

+
+
+
+ endDate (Date) +
+

The end date for this result

+
+
+
+ progress (Float) +
+

The progress for this result

+
+
+
+ createdAt (DateTime) +
+

When this result was created

+
+
+
+ updatedAt (DateTime) +
+

When this result was updated

+
+
+
+ childrenCount (Int) +
+

The number of children results

+
+
+
+ weight (Int!) +
+

The order of this result

+
+
+
+ externalId (String) +
+

The external ID for this result

+
+
+
+ children ([Result]) +
+

The childrens results

+
+
+
+ parent (Result) +
+

The parent result

+
+
+
+ status (Status) +
+

The status for this result

+
+
+
+ timelineEntries ([TimelineEntry]) +
+

The timeline entries for this result

+
+
+
+ scope (Scope) +
+

The object's scope

+
+
+
+ type (String!) +
+

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ acceptsNewComments (Boolean!) +
+

Whether the object can have new comments or not

+
+
+
+ commentsHaveAlignment (Boolean!) +
+

Whether the object comments have alignment or not

+
+
+
+ commentsHaveVotes (Boolean!) +
+

Whether the object comments have votes or not

+
+
+
+ comments ([Comment!]!) +
+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
orderBy + String + +

Order the comments

+
singleCommentId + String + +

ID of the single comment to look at

+
+
+
+
+ totalCommentsCount (Int!) +
+

The number of comments in all levels this resource holds

+
+
+
+ hasComments (Boolean!) +
+

Check if the commentable has comments

+
+
+
+ userAllowedToComment (Boolean!) +
+

Check if the current user can comment

+
+
+
+ category (Category) +
+

The object's category

+
+
+
+ name (TranslatedField!) +
+

The name of this component.

+
+
+
+ participatorySpace (ParticipatorySpace!) +
+

The participatory space in which this component belongs to.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/resultconnection/index.html b/app/views/static/api/docs/object/resultconnection/index.html new file mode 100644 index 0000000..5b932fb --- /dev/null +++ b/app/views/static/api/docs/object/resultconnection/index.html @@ -0,0 +1,1047 @@ +

+ResultConnection

+

The connection type for Result.

+

+Fields

+
+ edges ([ResultEdge]) +
+

A list of edges.

+
+
+
+ nodes ([Result]) +
+

A list of nodes.

+
+
+
+ pageInfo (PageInfo!) +
+

Information to aid in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/resultedge/index.html b/app/views/static/api/docs/object/resultedge/index.html new file mode 100644 index 0000000..a2e68d5 --- /dev/null +++ b/app/views/static/api/docs/object/resultedge/index.html @@ -0,0 +1,1041 @@ +

+ResultEdge

+

An edge in a connection.

+

+Fields

+
+ node (Result) +
+

The item at the end of the edge.

+
+
+
+ cursor (String!) +
+

A cursor for use in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/scope/index.html b/app/views/static/api/docs/object/scope/index.html new file mode 100644 index 0000000..9bd258f --- /dev/null +++ b/app/views/static/api/docs/object/scope/index.html @@ -0,0 +1,1052 @@ +

+Scope

+

A scope

+

+Fields

+
+ id (ID!) +
+
+
+
+ name (TranslatedField!) +
+

The graphql_name of this scope.

+
+
+
+ children ([Scope]!) +
+

Descendants of this scope

+
+
+
+ parent (Scope) +
+

This scope's parent scope.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/session/index.html b/app/views/static/api/docs/object/session/index.html new file mode 100644 index 0000000..f80043d --- /dev/null +++ b/app/views/static/api/docs/object/session/index.html @@ -0,0 +1,1041 @@ +

+Session

+

The current session

+

+Fields

+
+ user (User) +
+

The current user

+
+
+
+ verifiedUserGroups ([UserGroup!]!) +
+

The current user verified user groups

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/sortition/index.html b/app/views/static/api/docs/object/sortition/index.html new file mode 100644 index 0000000..5a94bb0 --- /dev/null +++ b/app/views/static/api/docs/object/sortition/index.html @@ -0,0 +1,1214 @@ +

+Sortition

+

A sortition

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The internal ID for this sortition

+
+
+
+ dice (Int) +
+

The dice for this sortition

+
+
+
+ targetItems (Int) +
+

The target items for this sortition

+
+
+
+ requestTimestamp (Date) +
+

The request time stamp for this request

+
+
+
+ selectedProposals ([Int]) +
+

The selected proposals for this sortition

+
+
+
+ createdAt (DateTime) +
+

When this sortition was created

+
+
+
+ updatedAt (DateTime) +
+

When this sortition was updated

+
+
+
+ witnesses (TranslatedField) +
+

The witnesses for this sortition

+
+
+
+ additionalInfo (TranslatedField) +
+

The additional info for this sortition

+
+
+
+ reference (String) +
+

The reference for this sortition

+
+
+
+ title (TranslatedField) +
+

The title for this sortition

+
+
+
+ cancelReason (TranslatedField) +
+

The cancel reason for this sortition

+
+
+
+ cancelledOn (Date) +
+

When this sortition was cancelled

+
+
+
+ cancelledByUser (User) +
+

Who cancelled this sortition

+
+
+
+ candidateProposals ([Int]) +
+

The candidate proposal for this sortition

+
+
+
+ category (Category) +
+

The object's category

+
+
+
+ type (String!) +
+

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
+
+
+ acceptsNewComments (Boolean!) +
+

Whether the object can have new comments or not

+
+
+
+ commentsHaveAlignment (Boolean!) +
+

Whether the object comments have alignment or not

+
+
+
+ commentsHaveVotes (Boolean!) +
+

Whether the object comments have votes or not

+
+
+
+ comments ([Comment!]!) +
+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
orderBy + String + +

Order the comments

+
singleCommentId + String + +

ID of the single comment to look at

+
+
+
+
+ totalCommentsCount (Int!) +
+

The number of comments in all levels this resource holds

+
+
+
+ hasComments (Boolean!) +
+

Check if the commentable has comments

+
+
+
+ userAllowedToComment (Boolean!) +
+

Check if the current user can comment

+
+
+
+ author (Author) +
+

The resource author

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/sortitionconnection/index.html b/app/views/static/api/docs/object/sortitionconnection/index.html new file mode 100644 index 0000000..c7b21ec --- /dev/null +++ b/app/views/static/api/docs/object/sortitionconnection/index.html @@ -0,0 +1,1047 @@ +

+SortitionConnection

+

The connection type for Sortition.

+

+Fields

+
+ edges ([SortitionEdge]) +
+

A list of edges.

+
+
+
+ nodes ([Sortition]) +
+

A list of nodes.

+
+
+
+ pageInfo (PageInfo!) +
+

Information to aid in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/sortitionedge/index.html b/app/views/static/api/docs/object/sortitionedge/index.html new file mode 100644 index 0000000..7271e50 --- /dev/null +++ b/app/views/static/api/docs/object/sortitionedge/index.html @@ -0,0 +1,1041 @@ +

+SortitionEdge

+

An edge in a connection.

+

+Fields

+
+ node (Sortition) +
+

The item at the end of the edge.

+
+
+
+ cursor (String!) +
+

A cursor for use in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/sortitions/index.html b/app/views/static/api/docs/object/sortitions/index.html new file mode 100644 index 0000000..bbd18f3 --- /dev/null +++ b/app/views/static/api/docs/object/sortitions/index.html @@ -0,0 +1,1136 @@ +

+Sortitions

+

A sortition component of a participatory space.

+

+Implements

+ +

+Connections

+
+ sortitions (SortitionConnection) +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
after + String + +

Returns the elements in the list that come after the specified cursor.

+
before + String + +

Returns the elements in the list that come before the specified cursor.

+
first + Int + +

Returns the first n elements from the list.

+
last + Int + +

Returns the last n elements from the list.

+
+
+
+

+Fields

+
+ sortition (Sortition) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +
+
+
+
+ id (ID!) +
+

The Component's unique ID

+
+
+
+ name (TranslatedField!) +
+

The name of this component.

+
+
+
+ weight (Int!) +
+

The weight of the component

+
+
+
+ participatorySpace (ParticipatorySpace!) +
+

The participatory space in which this component belongs to.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/statistic/index.html b/app/views/static/api/docs/object/statistic/index.html new file mode 100644 index 0000000..2eb57f2 --- /dev/null +++ b/app/views/static/api/docs/object/statistic/index.html @@ -0,0 +1,1041 @@ +

+Statistic

+

Represents a single statistic

+

+Fields

+
+ name (String!) +
+

The name of the statistic

+
+
+
+ value (Int!) +
+

The actual value of the statistic

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/status/index.html b/app/views/static/api/docs/object/status/index.html new file mode 100644 index 0000000..d12b383 --- /dev/null +++ b/app/views/static/api/docs/object/status/index.html @@ -0,0 +1,1077 @@ +

+Status

+

A status

+

+Fields

+
+ id (ID!) +
+

The internal ID for this status

+
+
+
+ key (String) +
+

The key for this status

+
+
+
+ name (TranslatedField) +
+

The name for this status

+
+
+
+ createdAt (Date) +
+

When this status was created

+
+
+
+ updatedAt (Date) +
+

When this status was updated

+
+
+
+ description (TranslatedField) +
+

The description for this status

+
+
+
+ progress (Int) +
+

The progress for this status

+
+
+
+ results ([Result]) +
+

The results for this status

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/survey/index.html b/app/views/static/api/docs/object/survey/index.html new file mode 100644 index 0000000..ca723da --- /dev/null +++ b/app/views/static/api/docs/object/survey/index.html @@ -0,0 +1,1053 @@ +

+Survey

+

A survey

+

+Fields

+
+ id (ID!) +
+

The internal ID for this survey

+
+
+
+ createdAt (DateTime) +
+

The time this survey was created

+
+
+
+ updatedAt (DateTime) +
+

The time this survey was updated

+
+
+
+ questionnaire (Questionnaire) +
+

The questionnaire for this survey

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/surveyconnection/index.html b/app/views/static/api/docs/object/surveyconnection/index.html new file mode 100644 index 0000000..77828fe --- /dev/null +++ b/app/views/static/api/docs/object/surveyconnection/index.html @@ -0,0 +1,1047 @@ +

+SurveyConnection

+

The connection type for Survey.

+

+Fields

+
+ edges ([SurveyEdge]) +
+

A list of edges.

+
+
+
+ nodes ([Survey]) +
+

A list of nodes.

+
+
+
+ pageInfo (PageInfo!) +
+

Information to aid in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/surveyedge/index.html b/app/views/static/api/docs/object/surveyedge/index.html new file mode 100644 index 0000000..9a3dd5f --- /dev/null +++ b/app/views/static/api/docs/object/surveyedge/index.html @@ -0,0 +1,1041 @@ +

+SurveyEdge

+

An edge in a connection.

+

+Fields

+
+ node (Survey) +
+

The item at the end of the edge.

+
+
+
+ cursor (String!) +
+

A cursor for use in pagination.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/surveys/index.html b/app/views/static/api/docs/object/surveys/index.html new file mode 100644 index 0000000..1628f47 --- /dev/null +++ b/app/views/static/api/docs/object/surveys/index.html @@ -0,0 +1,1136 @@ +

+Surveys

+

A surveys component of a participatory space.

+

+Implements

+ +

+Connections

+
+ surveys (SurveyConnection) +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
after + String + +

Returns the elements in the list that come after the specified cursor.

+
before + String + +

Returns the elements in the list that come before the specified cursor.

+
first + Int + +

Returns the first n elements from the list.

+
last + Int + +

Returns the last n elements from the list.

+
+
+
+

+Fields

+
+ survey (Survey) +
+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +
+
+
+
+ id (ID!) +
+

The Component's unique ID

+
+
+
+ name (TranslatedField!) +
+

The name of this component.

+
+
+
+ weight (Int!) +
+

The weight of the component

+
+
+
+ participatorySpace (ParticipatorySpace!) +
+

The participatory space in which this component belongs to.

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/timelineentry/index.html b/app/views/static/api/docs/object/timelineentry/index.html new file mode 100644 index 0000000..a50e1d0 --- /dev/null +++ b/app/views/static/api/docs/object/timelineentry/index.html @@ -0,0 +1,1071 @@ +

+TimelineEntry

+

A Timeline Entry

+

+Fields

+
+ id (ID!) +
+

The internal ID for this timeline entry

+
+
+
+ entryDate (Date) +
+

The entry date for this timeline entry

+
+
+
+ title (TranslatedField) +
+

The title for this timeline entry

+
+
+
+ description (TranslatedField) +
+

The description for this timeline entry

+
+
+
+ createdAt (DateTime) +
+

When this timeline entry was created

+
+
+
+ updatedAt (DateTime) +
+

When this timeline entry was updated

+
+
+
+ result (Result) +
+

The result for this timeline entry

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/traceversion/index.html b/app/views/static/api/docs/object/traceversion/index.html new file mode 100644 index 0000000..68b4146 --- /dev/null +++ b/app/views/static/api/docs/object/traceversion/index.html @@ -0,0 +1,1053 @@ +

+TraceVersion

+

A trace version type

+

+Fields

+
+ id (ID!) +
+

The ID of the version

+
+
+
+ createdAt (DateTime) +
+

The date and time this version was created

+
+
+
+ editor (Author) +
+

The editor/author of this version

+
+
+
+ changeset (JSON) +
+

Object with the changes in this version

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/translatedfield/index.html b/app/views/static/api/docs/object/translatedfield/index.html new file mode 100644 index 0000000..9a632b5 --- /dev/null +++ b/app/views/static/api/docs/object/translatedfield/index.html @@ -0,0 +1,1087 @@ +

+TranslatedField

+

A translated field

+

+Fields

+
+ locales ([String]) +
+

Lists all the locales in which this translation is available

+
+
+
+ translations ([LocalizedString]!) +
+

All the localized strings for this translation.

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
locales + [String!] + +

A list of locales to scope the translations to.

+
+
+
+
+ translation (String) +
+

Returns a single translation given a locale.

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
locale + String! + +

A locale to search for

+
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/user/index.html b/app/views/static/api/docs/object/user/index.html new file mode 100644 index 0000000..895b1bc --- /dev/null +++ b/app/views/static/api/docs/object/user/index.html @@ -0,0 +1,1094 @@ +

+User

+

A user

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The user's id

+
+
+
+ name (String!) +
+

The user's name

+
+
+
+ nickname (String!) +
+

The user's nickname

+
+
+
+ avatarUrl (String!) +
+

The user's avatar url

+
+
+
+ profilePath (String!) +
+

The user's profile url

+
+
+
+ directMessagesEnabled (String!) +
+

If the user making the request is logged in, it will return whether this recipient accepts a conversation or not. It will return false for non-logged requests.

+
+
+
+ organizationName (String!) +
+

The user's organization name

+
+
+
+ deleted (Boolean!) +
+

Whether the user's account has been deleted or not

+
+
+
+ badge (String!) +
+

A badge for the user group

+
+
+
+ groups ([UserGroup]!) +
+

Groups where this user belongs

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/object/usergroup/index.html b/app/views/static/api/docs/object/usergroup/index.html new file mode 100644 index 0000000..98dbf30 --- /dev/null +++ b/app/views/static/api/docs/object/usergroup/index.html @@ -0,0 +1,1094 @@ +

+UserGroup

+

A user group

+

+Implements

+ +

+Fields

+
+ id (ID!) +
+

The user group's id

+
+
+
+ name (String!) +
+

The user group's name

+
+
+
+ nickname (String!) +
+

The user group nickname

+
+
+
+ avatarUrl (String!) +
+

The user's avatar url

+
+
+
+ profilePath (String!) +
+

The user group's profile url

+
+
+
+ organizationName (String!) +
+

The user group's organization name

+
+
+
+ deleted (Boolean!) +
+

Whether the user group's has been deleted or not

+
+
+
+ badge (String!) +
+

A badge for the user group

+
+
+
+ members ([User]!) +
+

Members of this group

+
+
+
+ membersCount (Int!) +
+

Number of members in this group

+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/operation/mutation/index.html b/app/views/static/api/docs/operation/mutation/index.html new file mode 100644 index 0000000..9c1f893 --- /dev/null +++ b/app/views/static/api/docs/operation/mutation/index.html @@ -0,0 +1,1029 @@ +

+Mutations

+

Every GraphQL schema has a root type for both queries and mutations.

+

The mutation type defines how GraphQL operations change data. It is analogous to performing HTTP verbs such as POST, PATCH, and DELETE.

+

For more information, see the GraphQL spec.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/operation/query/index.html b/app/views/static/api/docs/operation/query/index.html new file mode 100644 index 0000000..b90c62c --- /dev/null +++ b/app/views/static/api/docs/operation/query/index.html @@ -0,0 +1,1491 @@ +

+Query

+

Every GraphQL schema has a root type for both queries and mutations. The query type defines GraphQL operations that retrieve data from the server.

+

+Fields

+
+ participatoryProcesses ([ParticipatoryProcess!]) +
+

Lists all participatory_processes

+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
filter + ParticipatoryProcessFilter + +

This argument lets you filter the results

+
order + ParticipatoryProcessSort + +

This argument lets you order the results

+
+
+
+
+ participatoryProcess (ParticipatoryProcess) +
+

Finds a participatory_process

+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID + +

The ID of the participatory space

+
slug + String + +

The slug of the participatory process

+
+
+
+
+ component (ComponentInterface) +
+

Lists the components this space contains.

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +

The ID of the component to be found

+
+
+
+
+ session (Session) +
+

Return's information about the logged in user

+
+
+
+ decidim (Decidim) +
+

Decidim's framework properties.

+
+
+
+ organization (Organization) +
+

The current organization

+
+
+
+ hashtags ([HashtagType!]) +
+

The hashtags for current organization

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
name + String + +

The name of the hashtag

+
+
+
+
+ metrics ([Metric!]) +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
names + [String!] + +

The names of the metrics you want to retrieve

+
space_type + String + +

The type of ParticipatorySpace you want to filter with

+
space_id + Int + +

The ID of ParticipatorySpace you want to filter with

+
+
+
+
+ user (Author) +
+

A participant (user or group) in the current organization

+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID + +

The ID of the participant

+
nickname + String + +

The @nickname of the participant

+
+
+
+
+ users ([Author!]) +
+

The participants (users or groups) for the current organization

+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
order + UserEntitySort + +

Provides several methods to order the results

+
filter + UserEntityFilter + +

Provides several methods to filter the results

+
+
+
+
+ participatoryProcessGroups ([ParticipatoryProcessGroup!]!) +
+

Lists all participatory process groups

+
+
+
+ participatoryProcessGroup (ParticipatoryProcessGroup) +
+

Finds a participatory process group

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +

The ID of the Participatory process group

+
+
+
+
+ participatoryProcessTypes ([ParticipatoryProcessType!]!) +
+

List all participatory process types

+
+
+
+ participatoryProcessType (ParticipatoryProcessType) +
+

Finds a participatory process type

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +

The ID of the participatory process type

+
+
+
+
+ assembliesTypes ([AssembliesType!]!) +
+

Lists all assemblies types

+
+
+
+ assembliesType (AssembliesType) +
+

Finds an assemblies type group

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID! + +

The ID of the Assemblies type

+
+
+
+
+ assemblies ([Assembly!]) +
+

Lists all assemblies

+ + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
filter + ParticipatoryProcessFilter + +

This argument lets you filter the results

+
order + ParticipatoryProcessSort + +

This argument lets you order the results

+
+
+
+
+ assembly (Assembly) +
+

Finds an assembly

+ + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + ID + +

The ID of the participatory space

+
+
+
+
+ commentable (Commentable!) +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentTypeDescription
id + String! + +

The commentable's ID

+
type + String! + +

The commentable's class name. i.e. Decidim::ParticipatoryProcess

+
locale + String! + +

The locale for which to get the comments text

+
toggleTranslations + Boolean! + +

Whether the user asked to toggle the machine translations or not.

+
+
+
+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/scalar/boolean/index.html b/app/views/static/api/docs/scalar/boolean/index.html new file mode 100644 index 0000000..f76f6e3 --- /dev/null +++ b/app/views/static/api/docs/scalar/boolean/index.html @@ -0,0 +1,1027 @@ +

+Boolean

+

Represents true or false values.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/scalar/date/index.html b/app/views/static/api/docs/scalar/date/index.html new file mode 100644 index 0000000..e5d00ce --- /dev/null +++ b/app/views/static/api/docs/scalar/date/index.html @@ -0,0 +1,1027 @@ +

+Date

+

An ISO8601 date

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/scalar/datetime/index.html b/app/views/static/api/docs/scalar/datetime/index.html new file mode 100644 index 0000000..564e527 --- /dev/null +++ b/app/views/static/api/docs/scalar/datetime/index.html @@ -0,0 +1,1027 @@ +

+DateTime

+

An ISO8601 date with time

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/scalar/float/index.html b/app/views/static/api/docs/scalar/float/index.html new file mode 100644 index 0000000..7d28181 --- /dev/null +++ b/app/views/static/api/docs/scalar/float/index.html @@ -0,0 +1,1027 @@ +

+Float

+

Represents signed double-precision fractional values as specified by IEEE 754.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/scalar/id/index.html b/app/views/static/api/docs/scalar/id/index.html new file mode 100644 index 0000000..5b352e7 --- /dev/null +++ b/app/views/static/api/docs/scalar/id/index.html @@ -0,0 +1,1027 @@ +

+ID

+

Represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "VXNlci0xMA==") or integer (such as 4) input value will be accepted as an ID.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/scalar/index.html b/app/views/static/api/docs/scalar/index.html new file mode 100644 index 0000000..c9612bc --- /dev/null +++ b/app/views/static/api/docs/scalar/index.html @@ -0,0 +1,1028 @@ +

+Scalars

+

Scalars are primitive values such as Int or String.

+

For more information, see the GraphQL spec.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/scalar/int/index.html b/app/views/static/api/docs/scalar/int/index.html new file mode 100644 index 0000000..b602330 --- /dev/null +++ b/app/views/static/api/docs/scalar/int/index.html @@ -0,0 +1,1027 @@ +

+Int

+

Represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/scalar/json/index.html b/app/views/static/api/docs/scalar/json/index.html new file mode 100644 index 0000000..00af21b --- /dev/null +++ b/app/views/static/api/docs/scalar/json/index.html @@ -0,0 +1,1027 @@ +

+JSON

+

Represents untyped JSON

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/scalar/string/index.html b/app/views/static/api/docs/scalar/string/index.html new file mode 100644 index 0000000..3e4a028 --- /dev/null +++ b/app/views/static/api/docs/scalar/string/index.html @@ -0,0 +1,1027 @@ +

+String

+

Represents textual data as UTF-8 character sequences. This type is most often used by GraphQL to represent free-form human-readable text.

+ + + +
+ ☰ +
diff --git a/app/views/static/api/docs/union/index.html b/app/views/static/api/docs/union/index.html new file mode 100644 index 0000000..54d5de6 --- /dev/null +++ b/app/views/static/api/docs/union/index.html @@ -0,0 +1,1028 @@ +

+Unions

+

A union is a type of object that can represent one of many kinds of objects. For example, a field marked as a ReactableUnion could be a CommitComment, an Issue, an IssueComment, or a PullRequestReviewComment, because each of those objects can be reacted on.

+

For more information, see the GraphQL spec.

+ + + +
+ ☰ +
diff --git a/babel.config.json b/babel.config.json new file mode 100644 index 0000000..86a38f8 --- /dev/null +++ b/babel.config.json @@ -0,0 +1,25 @@ +{ + "presets": [ + [ + "@babel/preset-env", { + "forceAllTransforms": true, + "useBuiltIns": "entry", + "corejs": 3, + "modules": false + } + ], + ["@babel/preset-react"] + ], + "plugins": [ + "@babel/plugin-transform-classes", + [ + "@babel/plugin-transform-runtime", + { + "helpers": false, + "regenerator": true, + "corejs": false + } + ], + ["@babel/plugin-transform-regenerator", { "async": false }] + ] +} diff --git a/bin/dev b/bin/dev new file mode 100755 index 0000000..4900cca --- /dev/null +++ b/bin/dev @@ -0,0 +1,8 @@ +#!/usr/bin/env sh + +if ! gem list foreman -i --silent; then + echo "Installing foreman..." + gem install foreman +fi + +exec foreman start -f Procfile.dev "$@" \ No newline at end of file diff --git a/bin/rails b/bin/rails new file mode 100755 index 0000000..21d3e02 --- /dev/null +++ b/bin/rails @@ -0,0 +1,5 @@ +#!/usr/bin/env ruby +load File.expand_path("spring", __dir__) +APP_PATH = File.expand_path('../config/application', __dir__) +require_relative "../config/boot" +require "rails/commands" diff --git a/bin/rake b/bin/rake new file mode 100755 index 0000000..7327f47 --- /dev/null +++ b/bin/rake @@ -0,0 +1,5 @@ +#!/usr/bin/env ruby +load File.expand_path("spring", __dir__) +require_relative "../config/boot" +require "rake" +Rake.application.run diff --git a/bin/setup b/bin/setup new file mode 100755 index 0000000..90700ac --- /dev/null +++ b/bin/setup @@ -0,0 +1,36 @@ +#!/usr/bin/env ruby +require "fileutils" + +# path to your application root. +APP_ROOT = File.expand_path('..', __dir__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +FileUtils.chdir APP_ROOT do + # This script is a way to set up or update your development environment automatically. + # This script is idempotent, so that you can run it at any time and get an expectable outcome. + # Add necessary setup steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') + + # Install JavaScript dependencies + system! 'bin/yarn' + + # puts "\n== Copying sample files ==" + # unless File.exist?('config/database.yml') + # FileUtils.cp 'config/database.yml.sample', 'config/database.yml' + # end + + puts "\n== Preparing database ==" + system! 'bin/rails db:prepare' + + puts "\n== Removing old logs and tempfiles ==" + system! 'bin/rails log:clear tmp:clear' + + puts "\n== Restarting application server ==" + system! 'bin/rails restart' +end diff --git a/bin/shakapacker b/bin/shakapacker new file mode 100755 index 0000000..abd14d6 --- /dev/null +++ b/bin/shakapacker @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby + +ENV["RAILS_ENV"] ||= "development" +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__) + +require "bundler/setup" + +# Add the Decidim override load path to override webpacker functionality +$LOAD_PATH.unshift "#{Gem.loaded_specs["decidim-core"].full_gem_path}/lib/gem_overrides" +require "shakapacker" +require "shakapacker/webpack_runner" + +APP_ROOT = File.expand_path("..", __dir__) +Dir.chdir(APP_ROOT) do + Shakapacker::WebpackRunner.run(ARGV) +end diff --git a/bin/shakapacker-dev-server b/bin/shakapacker-dev-server new file mode 100755 index 0000000..de85418 --- /dev/null +++ b/bin/shakapacker-dev-server @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby + +ENV["RAILS_ENV"] ||= "development" +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__) + +require "bundler/setup" + +# Add the Decidim override load path to override webpacker functionality +$LOAD_PATH.unshift "#{Gem.loaded_specs["decidim-core"].full_gem_path}/lib/gem_overrides" +require "shakapacker" +require "shakapacker/dev_server_runner" + +APP_ROOT = File.expand_path("..", __dir__) +Dir.chdir(APP_ROOT) do + Shakapacker::DevServerRunner.run(ARGV) +end diff --git a/bin/spring b/bin/spring new file mode 100755 index 0000000..b4147e8 --- /dev/null +++ b/bin/spring @@ -0,0 +1,14 @@ +#!/usr/bin/env ruby +if !defined?(Spring) && [nil, "development", "test"].include?(ENV["RAILS_ENV"]) + gem "bundler" + require "bundler" + + # Load Spring without loading other gems in the Gemfile, for speed. + Bundler.locked_gems&.specs&.find { |spec| spec.name == "spring" }&.tap do |spring| + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem "spring", spring.version + require "spring/binstub" + rescue Gem::LoadError + # Ignore when Spring is not installed. + end +end diff --git a/config.ru b/config.ru new file mode 100644 index 0000000..2e03084 --- /dev/null +++ b/config.ru @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +# This file is used by Rack-based servers to start the application. + +require_relative "config/environment" + +run Rails.application +Rails.application.load_server diff --git a/config/application.rb b/config/application.rb new file mode 100644 index 0000000..9c84a66 --- /dev/null +++ b/config/application.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +require_relative "boot" + +require "decidim/rails" + +# Add the frameworks used by your app that are not loaded by Decidim. +# require "action_mailbox/engine" +# require "action_text/engine" +require "action_cable/engine" +require "rails/test_unit/railtie" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module DecidimInspire + class Application < Rails::Application + # Initialize configuration defaults for originally generated Rails version. + config.load_defaults 6.1 + + # Configuration for the application, engines, and railties goes here. + # + # These settings can be overridden in specific environments using the files + # in config/environments, which are processed later. + # + # config.time_zone = "Central Time (US & Canada)" + # config.eager_load_paths << Rails.root.join("extras") + end +end diff --git a/config/boot.rb b/config/boot.rb new file mode 100644 index 0000000..c154378 --- /dev/null +++ b/config/boot.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +require "bundler/setup" # Set up gems listed in the Gemfile. +require "bootsnap" + +env = ENV["RAILS_ENV"] || "development" + +Bootsnap.setup( + cache_dir: File.expand_path(File.join("..", "tmp", "cache"), __dir__), + development_mode: env == "development", + load_path_cache: true, + compile_cache_iseq: !ENV["SIMPLECOV"], + compile_cache_yaml: true +) diff --git a/config/cable.yml b/config/cable.yml new file mode 100644 index 0000000..dc9270f --- /dev/null +++ b/config/cable.yml @@ -0,0 +1,9 @@ +development: + adapter: async + +test: + adapter: async + +production: + adapter: redis + url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %> diff --git a/config/credentials.yml.enc b/config/credentials.yml.enc new file mode 100644 index 0000000..486adda --- /dev/null +++ b/config/credentials.yml.enc @@ -0,0 +1 @@ +JeL9DIws83BdfLKFzTSh7KzqhmeBKmQydG3vGZ5b5CqtRKniM4L43LDFsxSuQwYJK/mIRcIV9edOYmjYFnXzPcssN4nxtgQM9y0TplsDsjSBOqQCdFMvWcC/tVNMOf1PgJPpFBTQ/78WMGhJ3unqBqS1drJptWTYpOJ7uF13LlJkkImx+Gytanj/cMBMvksGXiLjj/OJi9+bEvM/E2Mz4kotgVeNa0bqNlWjD9CJbkB7H+wXlUpLMwDqI3j4wLXo5dNrmTZXeflKhe6KJwwkPYxRnIr3FaPhzS8fZvChkMwzV6zfwaclLIjt4Nzcymkss+lUVB2LQLhz6+3ei/k3+yzMB/sPylEPjhuLoK2GPuSYIxVrE0dm9wNPLZjVWy88sdDUCQlRfBQP/1+gND4X7VleLfjR0TqppBEs--c2JGipr/ZYVO6FWR--0dJNVlVLkqTj2GHR9+fcZA== \ No newline at end of file diff --git a/config/database.yml b/config/database.yml new file mode 100644 index 0000000..ebc559a --- /dev/null +++ b/config/database.yml @@ -0,0 +1,89 @@ +# PostgreSQL. Versions 9.5 and up are supported. +# +# Install the pg driver: +# gem install pg +# On OS X with Homebrew: +# gem install pg -- --with-pg-config=/usr/local/bin/pg_config +# On OS X with MacPorts: +# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config +# On Windows: +# gem install pg +# Choose the win32 build. +# Install PostgreSQL and put its /bin directory on your path. +# +# Configure Using Gemfile +# gem 'pg' +# +# On Linux, the 'host: "localhost"' line below should be commented out to avoid 'password required' error. +# +default: &default + adapter: postgresql + encoding: unicode + # For details on connection pooling, see rails configuration guide + # http://guides.rubyonrails.org/configuring.html#database-pooling + pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> + host: <%= ENV.fetch("DATABASE_HOST") { "localhost" } %> + port: <%= ENV.fetch("DATABASE_PORT") { "5432" } %> + username: <%= ENV.fetch("DATABASE_USERNAME") { "" } %> + password: <%= ENV.fetch("DATABASE_PASSWORD") { "" } %> + +development: + <<: *default + database: <%= ENV.fetch("DATABASE_HOST") { "decidim_inspire_development" } %> + + # The specified database role being used to connect to postgres. + # To create additional roles in postgres see `$ createuser --help`. + # When left blank, postgres will use the default role. This is + # the same name as the operating system user that initialized the database. + #username: decidim_inspire + + # The password associated with the postgres role (username). + #password: + + # Connect on a TCP socket. Omitted by default since the client uses a + # domain socket that does not need configuration. Windows does not have + # domain sockets, so uncomment these lines. + #host: localhost + + # The TCP port the server listens on. Defaults to 5432. + # If your server runs on a different port number, change accordingly. + #port: 5432 + + # Schema search path. The server defaults to $user,public + #schema_search_path: myapp,sharedapp,public + + # Minimum log levels, in increasing order: + # debug5, debug4, debug3, debug2, debug1, + # log, notice, warning, error, fatal, and panic + # Defaults to warning. + #min_messages: notice + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: decidim_inspire_test<%= ENV.fetch('TEST_ENV_NUMBER', "") %> + +# As with config/secrets.yml, you never want to store sensitive information, +# like your database password, in your source code. If your source code is +# ever seen by anyone, they now have access to your database. +# +# Instead, provide the password as a unix environment variable when you boot +# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database +# for a full rundown on how to provide these environment variables in a +# production deployment. +# +# On some platform providers, you may have a full connection URL +# available as an environment variable. For example: +# +# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" +# +# You can use this database configuration with: +# +# production: +# url: <%= ENV['DATABASE_URL'] %> + +production: + <<: *default + url: <%= ENV['DATABASE_URL'] %> diff --git a/config/environment.rb b/config/environment.rb new file mode 100644 index 0000000..7df99e8 --- /dev/null +++ b/config/environment.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +# Load the Rails application. +require_relative "application" + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb new file mode 100644 index 0000000..b843b36 --- /dev/null +++ b/config/environments/development.rb @@ -0,0 +1,92 @@ +# frozen_string_literal: true + +require "active_support/core_ext/integer/time" + +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded any time + # it changes. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports. + config.consider_all_requests_local = true + + # Enable/disable caching. By default caching is disabled. + # Run rails dev:cache to toggle caching. + if Rails.root.join("tmp/caching-dev.txt").exist? + config.action_controller.perform_caching = true + config.action_controller.enable_fragment_cache_logging = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + "Cache-Control" => "public, max-age=#{2.days.to_i}" + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end + + # Store uploaded files on the local file system (see config/storage.yml for options). + config.active_storage.service = :local + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + config.action_mailer.delivery_method = :letter_opener_web + config.action_mailer.default_url_options = { port: 3000 } + + config.action_mailer.perform_caching = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise exceptions for disallowed deprecations. + config.active_support.disallowed_deprecation = :raise + + # Tell Active Support which deprecation messages to disallow. + config.active_support.disallowed_deprecation_warnings = [] + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Highlight code that triggered database queries in logs. + config.active_record.verbose_query_logs = true + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + + # Suppress logger output for asset requests. + + # Raises error for missing translations. + # config.i18n.raise_on_missing_translations = true + + # Annotate rendered view with file names. + # config.action_view.annotate_rendered_view_with_filenames = true + + # Use an evented file watcher to asynchronously detect changes in source code, + # routes, locales, etc. This feature depends on the listen gem. + config.file_watcher = ActiveSupport::EventedFileUpdateChecker + + # Uncomment if you wish to allow Action Cable access from any origin. + # config.action_cable.disable_request_forgery_protection = true + + # Performance configs for local testing + if ENV.fetch("RAILS_BOOST_PERFORMANCE", false).to_s == "true" + # Indicate boost performance mode + config.boost_performance = true + # Enable caching and eager load + config.eager_load = true + config.cache_classes = true + # Logging + config.log_level = :info + config.action_view.logger = nil + # Compress the HTML responses with gzip + config.middleware.use Rack::Deflater + end +end diff --git a/config/environments/production.rb b/config/environments/production.rb new file mode 100644 index 0000000..2ecc1f9 --- /dev/null +++ b/config/environments/production.rb @@ -0,0 +1,131 @@ +# frozen_string_literal: true + +require "active_support/core_ext/integer/time" + +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"] + # or in config/master.key. This key is used to decrypt credentials (and other encrypted files). + # config.require_master_key = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present? + + # Compress CSS using a preprocessor. + # + + # Do not fallback to assets pipeline if a precompiled asset is missed. + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + config.asset_host = ENV["RAILS_ASSET_HOST"] if ENV["RAILS_ASSET_HOST"].present? + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + + # Store uploaded files on the local file system (see config/storage.yml for options). + config.active_storage.service = Rails.application.secrets.dig(:storage, :provider) || :local + + # Mount Action Cable outside main process or domain. + # config.action_cable.mount_path = nil + # config.action_cable.url = 'wss://example.com/cable' + # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Include generic and useful information about system operation, but avoid logging too much + # information to avoid inadvertent exposure of personally identifiable information (PII). + config.log_level = %w(debug info warn error fatal).include?(ENV["RAILS_LOG_LEVEL"]) ? ENV["RAILS_LOG_LEVEL"] : :info + + # Prepend all log lines with the following tags. + config.log_tags = [:request_id] + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Use a real queuing backend for Active Job (and separate queues per environment). + config.active_job.queue_adapter = :sidekiq + # config.active_job.queue_name_prefix = "decidim_inspire_production" + + config.action_mailer.perform_caching = false + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Log disallowed deprecations. + config.active_support.disallowed_deprecation = :log + + # Tell Active Support which deprecation messages to disallow. + config.active_support.disallowed_deprecation_warnings = [] + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = Logger::Formatter.new + config.action_mailer.smtp_settings = { + address: Rails.application.secrets.smtp_address, + port: Rails.application.secrets.smtp_port, + authentication: Rails.application.secrets.smtp_authentication, + user_name: Rails.application.secrets.smtp_username, + password: Rails.application.secrets.smtp_password, + domain: Rails.application.secrets.smtp_domain, + enable_starttls_auto: Rails.application.secrets.smtp_starttls_auto, + openssl_verify_mode: "none" + } + + # Use a different logger for distributed setups. + # require "syslog/logger" + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + + if ENV["RAILS_LOG_TO_STDOUT"].present? + logger = ActiveSupport::Logger.new($stdout) + logger.formatter = config.log_formatter + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false + + # Inserts middleware to perform automatic connection switching. + # The `database_selector` hash is used to pass options to the DatabaseSelector + # middleware. The `delay` is used to determine how long to wait after a write + # to send a subsequent read to the primary. + # + # The `database_resolver` class is used by the middleware to determine which + # database is appropriate to use based on the time delay. + # + # The `database_resolver_context` class is used by the middleware to set + # timestamps for the last write to the primary. The resolver uses the context + # class timestamps to determine how long to wait before reading from the + # replica. + # + # By default Rails will store a last write timestamp in the session. The + # DatabaseSelector middleware is designed as such you can define your own + # strategy for connection switching and pass that into the middleware through + # these configuration options. + # config.active_record.database_selector = { delay: 2.seconds } + # config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver + # config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session +end diff --git a/config/environments/test.rb b/config/environments/test.rb new file mode 100644 index 0000000..83625a0 --- /dev/null +++ b/config/environments/test.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +require "active_support/core_ext/integer/time" + +# The test environment is used exclusively to run your application's +# test suite. You never need to work with it otherwise. Remember that +# your test database is "scratch space" for the test suite and is wiped +# and recreated between test runs. Don't rely on the data there! + +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + config.cache_classes = false + config.action_view.cache_template_loading = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure public file server for tests with Cache-Control for performance. + config.public_file_server.enabled = true + config.public_file_server.headers = { + "Cache-Control" => "public, max-age=#{1.hour.to_i}" + } + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + config.cache_store = :null_store + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Store uploaded files on the local file system in a temporary directory. + config.active_storage.service = :test + + config.action_mailer.perform_caching = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raise exceptions for disallowed deprecations. + config.active_support.disallowed_deprecation = :raise + + # Tell Active Support which deprecation messages to disallow. + config.active_support.disallowed_deprecation_warnings = [] + + # Raises error for missing translations. + # config.i18n.raise_on_missing_translations = true + + # Annotate rendered view with file names. + # config.action_view.annotate_rendered_view_with_filenames = true +end diff --git a/config/initializers/application_controller_renderer.rb b/config/initializers/application_controller_renderer.rb new file mode 100644 index 0000000..f4556db --- /dev/null +++ b/config/initializers/application_controller_renderer.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# Be sure to restart your server when you modify this file. + +# ActiveSupport::Reloader.to_prepare do +# ApplicationController.renderer.defaults.merge!( +# http_host: 'example.org', +# https: false +# ) +# end diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..74f30e8 --- /dev/null +++ b/config/initializers/backtrace_silencers.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| /my_noisy_library/.match?(line) } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code +# by setting BACKTRACE=1 before calling your invocation, like "BACKTRACE=1 ./bin/rails runner 'MyClass.perform'". +Rails.backtrace_cleaner.remove_silencers! if ENV["BACKTRACE"] diff --git a/config/initializers/carrierwave.rb b/config/initializers/carrierwave.rb new file mode 100644 index 0000000..64d7e18 --- /dev/null +++ b/config/initializers/carrierwave.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +# Default CarrierWave setup. +# +CarrierWave.configure do |config| + config.permissions = 0o666 + config.directory_permissions = 0o777 + config.storage = :file + config.enable_processing = !Rails.env.test? +end + +# Setup CarrierWave to use Amazon S3. Add `gem "fog-aws" to your Gemfile. +# +# CarrierWave.configure do |config| +# config.storage = :fog +# config.fog_provider = 'fog/aws' # required +# config.fog_credentials = { +# provider: 'AWS', # required +# aws_access_key_id: Rails.application.secrets.aws_access_key_id, # required +# aws_secret_access_key: Rails.application.secrets.aws_secret_access_key, # required +# region: 'eu-west-1', # optional, defaults to 'us-east-1' +# host: 's3.example.com', # optional, defaults to nil +# endpoint: 'https://s3.example.com:8080' # optional, defaults to nil +# } +# config.fog_directory = 'name_of_directory' # required +# config.fog_public = false # optional, defaults to true +# config.fog_attributes = { +# 'Cache-Control' => "max-age=#{365.day.to_i}", +# 'X-Content-Type-Options' => "nosniff" +# } +# end diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb new file mode 100644 index 0000000..b15a372 --- /dev/null +++ b/config/initializers/content_security_policy.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true +# For tuning the Content Security Policy, check the Decidim documentation site +# https://docs.decidim.org/develop/en/customize/content_security_policy diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..ee8dff9 --- /dev/null +++ b/config/initializers/cookies_serializer.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +# Be sure to restart your server when you modify this file. + +# Specify a serializer for the signed and encrypted cookie jars. +# Valid options are :json, :marshal, and :hybrid. +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/config/initializers/decidim.rb b/config/initializers/decidim.rb new file mode 100644 index 0000000..253e436 --- /dev/null +++ b/config/initializers/decidim.rb @@ -0,0 +1,496 @@ +# frozen_string_literal: true + +Decidim.configure do |config| + # The name of the application + config.application_name = Rails.application.secrets.decidim[:application_name] + + # The email that will be used as sender in all emails from Decidim + config.mailer_sender = Rails.application.secrets.decidim[:mailer_sender] + + # Sets the list of available locales for the whole application. + # + # When an organization is created through the System area, system admins will + # be able to choose the available languages for that organization. That list + # of languages will be equal or a subset of the list in this file. + config.available_locales = Rails.application.secrets.decidim[:available_locales].presence || [:en] + # Or block set it up manually and prevent ENV manipulation: + # config.available_locales = %w(en ca es) + + # Sets the default locale for new organizations. When creating a new + # organization from the System area, system admins will be able to overwrite + # this value for that specific organization. + config.default_locale = Rails.application.secrets.decidim[:default_locale].presence || :en + + # Restrict access to the system part with an authorized ip list. + # You can use a single ip like ("1.2.3.4"), or an ip subnet like ("1.2.3.4/24") + # You may specify multiple ip in an array ["1.2.3.4", "1.2.3.4/24"] + config.system_accesslist_ips = Rails.application.secrets.decidim[:system_accesslist_ips] if Rails.application.secrets.decidim[:system_accesslist_ips].present? + + # Defines a list of custom content processors. They are used to parse and + # render specific tags inside some user-provided content. Check the docs for + # more info. + # config.content_processors = [] + + # Whether SSL should be enabled or not. + # if this var is not defined, it is decided automatically per-rails-environment + config.force_ssl = Rails.application.secrets.decidim[:force_ssl].present? unless Rails.application.secrets.decidim[:force_ssl] == "auto" + # or set it up manually and prevent any ENV manipulation: + # config.force_ssl = true + + # Enable the service worker. By default is disabled in development and enabled in the rest of environments + config.service_worker_enabled = Rails.application.secrets.decidim[:service_worker_enabled].present? + + # Sets the list of static pages' slugs that can include content blocks. + # By default is only enabled in the terms-of-service static page to allow a summary to be added and include + # sections with a two-pane view + config.page_blocks = Rails.application.secrets.decidim[:page_blocks].presence || %w(terms-of-service) + + # Map and Geocoder configuration + # + # See Decidim docs at https://docs.decidim.org/en/develop/services/maps.html + # for more information about how it works and how to set it up. + # + # == HERE Maps == + # config.maps = { + # provider: :here, + # api_key: Rails.application.secrets.maps[:api_key], + # static: { url: "https://image.maps.ls.hereapi.com/mia/1.6/mapview" } + # } + # + # == OpenStreetMap (OSM) services == + # To use the OSM map service providers, you will need a service provider for + # the following map servers or host all of them yourself: + # - A tile server for the dynamic maps + # (https://wiki.openstreetmap.org/wiki/Tile_servers) + # - A Nominatim geocoding server for the geocoding functionality + # (https://wiki.openstreetmap.org/wiki/Nominatim) + # - A static map server for static map images + # (https://github.com/jperelli/osm-static-maps) + # + # When used, please read carefully the terms of service for your service + # provider. + # + # config.maps = { + # provider: :osm, + # api_key: Rails.application.secrets.maps[:api_key], + # dynamic: { + # tile_layer: { + # url: "https://tiles.example.org/{z}/{x}/{y}.png?key={apiKey}&{foo}", + # api_key: true, + # foo: "bar=baz", + # attribution: %( + # © OpenStreetMap contributors + # ).strip + # # Translatable attribution: + # # attribution: -> { I18n.t("tile_layer_attribution") } + # } + # }, + # static: { url: "https://staticmap.example.org/" }, + # geocoding: { host: "nominatim.example.org", use_https: true } + # } + # + # == Combination (OpenStreetMap default + HERE Maps dynamic map tiles) == + # config.maps = { + # provider: :osm, + # api_key: Rails.application.secrets.maps[:api_key], + # dynamic: { + # provider: :here, + # api_key: Rails.application.secrets.maps[:here_api_key] + # }, + # static: { url: "https://staticmap.example.org/" }, + # geocoding: { host: "nominatim.example.org", use_https: true } + # } + + # Geocoder configurations if you want to customize the default geocoding + # settings. The maps configuration will manage which geocoding service to use, + # so that does not need any additional configuration here. Use this only for + # the global geocoder preferences. + # config.geocoder = { + # # geocoding service request timeout, in seconds (default 3): + # timeout: 5, + # # set default units to kilometers: + # units: :km, + # # caching (see https://github.com/alexreisner/geocoder#caching for details): + # cache: Redis.new, + # cache_prefix: "..." + # } + if Rails.application.secrets.maps.present? && Rails.application.secrets.maps[:static_provider].present? + static_provider = Rails.application.secrets.maps[:static_provider] + dynamic_provider = Rails.application.secrets.maps[:dynamic_provider] + dynamic_url = Rails.application.secrets.maps[:dynamic_url] + static_url = Rails.application.secrets.maps[:static_url] + static_url = "https://image.maps.ls.hereapi.com/mia/1.6/mapview" if static_provider == "here" && static_url.blank? + config.maps = { + provider: static_provider, + api_key: Rails.application.secrets.maps[:static_api_key], + static: { url: static_url }, + dynamic: { + provider: dynamic_provider, + api_key: Rails.application.secrets.maps[:dynamic_api_key] + } + } + config.maps[:geocoding] = { host: Rails.application.secrets.maps[:geocoding_host], use_https: true } if Rails.application.secrets.maps[:geocoding_host] + config.maps[:dynamic][:tile_layer] = {} + config.maps[:dynamic][:tile_layer][:url] = dynamic_url if dynamic_url + config.maps[:dynamic][:tile_layer][:attribution] = Rails.application.secrets.maps[:attribution] if Rails.application.secrets.maps[:attribution] + if Rails.application.secrets.maps[:extra_vars].present? + vars = URI.decode_www_form(Rails.application.secrets.maps[:extra_vars]) + vars.each do |key, value| + # perform a naive type conversion + config.maps[:dynamic][:tile_layer][key] = case value + when /^true$|^false$/i + value.downcase == "true" + when /\A[-+]?\d+\z/ + value.to_i + else + value + end + end + end + end + + # Custom resource reference generator method. Check the docs for more info. + # config.reference_generator = lambda do |resource, component| + # # Implement your custom method to generate resources references + # "1234-#{resource.id}" + # end + + # Currency unit + config.currency_unit = Rails.application.secrets.decidim[:currency_unit] if Rails.application.secrets.decidim[:currency_unit].present? + + # Workaround to enable SVG assets cors + config.cors_enabled = Rails.application.secrets.decidim[:cors_enabled].present? + + # Defines the quality of image uploads after processing. Image uploads are + # processed by Decidim, this value helps reduce the size of the files. + config.image_uploader_quality = Rails.application.secrets.decidim[:image_uploader_quality].to_i + + config.maximum_attachment_size = Rails.application.secrets.decidim[:maximum_attachment_size].to_i.megabytes + config.maximum_avatar_size = Rails.application.secrets.decidim[:maximum_avatar_size].to_i.megabytes + + # The number of reports which a resource can receive before hiding it + config.max_reports_before_hiding = Rails.application.secrets.decidim[:max_reports_before_hiding].to_i + + # Custom HTML Header snippets + # + # The most common use is to integrate third-party services that require some + # extra JavaScript or CSS. Also, you can use it to add extra meta tags to the + # HTML. Note that this will only be rendered in public pages, not in the admin + # section. + # + # Before enabling this you should ensure that any tracking that might be done + # is in accordance with the rules and regulations that apply to your + # environment and usage scenarios. This component also comes with the risk + # that an organization's administrator injects malicious scripts to spy on or + # take over user accounts. + # + config.enable_html_header_snippets = Rails.application.secrets.decidim[:enable_html_header_snippets].present? + + # Allow organizations admins to track newsletter links. + config.track_newsletter_links = Rails.application.secrets.decidim[:track_newsletter_links].present? unless Rails.application.secrets.decidim[:track_newsletter_links] == "auto" + + # Amount of time that the download your data files will be available in the server. + config.download_your_data_expiry_time = Rails.application.secrets.decidim[:download_your_data_expiry_time].to_i.days + + # Max requests in a time period to prevent DoS attacks. Only applied on production. + config.throttling_max_requests = Rails.application.secrets.decidim[:throttling_max_requests].to_i + + # Time window in which the throttling is applied. + config.throttling_period = Rails.application.secrets.decidim[:throttling_period].to_i.minutes + + # Time window were users can access the website even if their email is not confirmed. + config.unconfirmed_access_for = Rails.application.secrets.decidim[:unconfirmed_access_for].to_i.days + + # A base path for the uploads. If set, make sure it ends in a slash. + # Uploads will be set to `/uploads/`. This can be useful if you + # want to use the same uploads place for both staging and production + # environments, but in different folders. + # + # If not set, it will be ignored. + config.base_uploads_path = Rails.application.secrets.decidim[:base_uploads_path] if Rails.application.secrets.decidim[:base_uploads_path].present? + + # SMS gateway configuration + # + # If you want to verify your users by sending a verification code via + # SMS you need to provide a SMS gateway service class. + # + # An example class would be something like: + # + # class MySMSGatewayService + # attr_reader :mobile_phone_number, :code + # + # def initialize(mobile_phone_number, code) + # @mobile_phone_number = mobile_phone_number + # @code = code + # end + # + # def deliver_code + # # Actual code to deliver the code + # true + # end + # end + # + # config.sms_gateway_service = "MySMSGatewayService" + + # Timestamp service configuration + # + # Provide a class to generate a timestamp for a document. The instances of + # this class are initialized with a hash containing the :document key with + # the document to be timestamped as value. The istances respond to a + # timestamp public method with the timestamp + # + # An example class would be something like: + # + # class MyTimestampService + # attr_accessor :document + # + # def initialize(args = {}) + # @document = args.fetch(:document) + # end + # + # def timestamp + # # Code to generate timestamp + # "My timestamp" + # end + # end + # + # + # config.timestamp_service = "MyTimestampService" + + # PDF signature service configuration + # + # Provide a class to process a pdf and return the document including a + # digital signature. The instances of this class are initialized with a hash + # containing the :pdf key with the pdf file content as value. The instances + # respond to a signed_pdf method containing the pdf with the signature + # + # An example class would be something like: + # + # class MyPDFSignatureService + # attr_accessor :pdf + # + # def initialize(args = {}) + # @pdf = args.fetch(:pdf) + # end + # + # def signed_pdf + # # Code to return the pdf signed + # end + # end + # + # config.pdf_signature_service = "MyPDFSignatureService" + + # Etherpad configuration + # + # Only needed if you want to have Etherpad integration with Decidim. See + # Decidim docs at https://docs.decidim.org/en/services/etherpad/ in order to set it up. + # + if Rails.application.secrets.etherpad.present? && Rails.application.secrets.etherpad[:server].present? + config.etherpad = { + server: Rails.application.secrets.etherpad[:server], + api_key: Rails.application.secrets.etherpad[:api_key], + api_version: Rails.application.secrets.etherpad[:api_version] + } + end + + # Sets Decidim::Exporters::CSV's default column separator + config.default_csv_col_sep = Rails.application.secrets.decidim[:default_csv_col_sep] if Rails.application.secrets.decidim[:default_csv_col_sep].present? + + # The list of roles a user can have, not considering the space-specific roles. + # config.user_roles = %w(admin user_manager) + + # The list of visibility options for amendments. An Array of Strings that + # serve both as locale keys and values to construct the input collection in + # Decidim::Amendment::VisibilityStepSetting::options. + # + # This collection is used in Decidim::Admin::SettingsHelper to generate a + # radio buttons collection input field form for a Decidim::Component + # step setting :amendments_visibility. + # config.amendments_visibility_options = %w(all participants) + + # Machine Translation Configuration + # + # See Decidim docs at https://docs.decidim.org/en/develop/machine_translations/ + # for more information about how it works and how to set it up. + # + # Enable machine translations + config.enable_machine_translations = false + # + # If you want to enable machine translation you can create your own service + # to interact with third party service to translate the user content. + # + # If you still want to use "Decidim::Dev::DummyTranslator" as translator placeholder, + # add the follwing line at the beginning of this file: + # require "decidim/dev/dummy_translator" + # + # An example class would be something like: + # + # class MyTranslationService + # attr_reader :text, :original_locale, :target_locale + # + # def initialize(text, original_locale, target_locale) + # @text = text + # @original_locale = original_locale + # @target_locale = target_locale + # end + # + # def translate + # # Actual code to translate the text + # end + # end + # + # config.machine_translation_service = "MyTranslationService" + + # Defines the social networking services used for social sharing + config.social_share_services = Rails.application.secrets.decidim[:social_share_services] + + # Defines the name of the cookie used to check if the user allows Decidim to + # set cookies. + config.consent_cookie_name = Rails.application.secrets.decidim[:consent_cookie_name] if Rails.application.secrets.decidim[:consent_cookie_name].present? + + # Defines data consent categories and the data stored in each category. + # config.consent_categories = [ + # { + # slug: "essential", + # mandatory: true, + # items: [ + # { + # type: "cookie", + # name: "_session_id" + # }, + # { + # type: "cookie", + # name: Decidim.consent_cookie_name + # } + # ] + # }, + # { + # slug: "preferences", + # mandatory: false + # }, + # { + # slug: "analytics", + # mandatory: false + # }, + # { + # slug: "marketing", + # mandatory: false + # } + # ] + + # Defines additional content security policies following the structure + # Read more: https://docs.decidim.org/en/develop/configure/initializer#_content_security_policy + config.content_security_policies_extra = {} + + # Admin admin password configurations + Rails.application.secrets.dig(:decidim, :admin_password, :strong).tap do |strong_pw| + # When the strong password is not configured, default to true + config.admin_password_strong = strong_pw.nil? ? true : strong_pw.present? + end + config.admin_password_expiration_days = Rails.application.secrets.dig(:decidim, :admin_password, :expiration_days).presence || 90 + config.admin_password_min_length = Rails.application.secrets.dig(:decidim, :admin_password, :min_length).presence || 15 + config.admin_password_repetition_times = Rails.application.secrets.dig(:decidim, :admin_password, :repetition_times).presence || 5 + + # Additional optional configurations (see decidim-core/lib/decidim/core.rb) + config.cache_key_separator = Rails.application.secrets.decidim[:cache_key_separator] if Rails.application.secrets.decidim[:cache_key_separator].present? + config.expire_session_after = Rails.application.secrets.decidim[:expire_session_after].to_i.minutes if Rails.application.secrets.decidim[:expire_session_after].present? + config.enable_remember_me = Rails.application.secrets.decidim[:enable_remember_me].present? unless Rails.application.secrets.decidim[:enable_remember_me] == "auto" + if Rails.application.secrets.decidim[:session_timeout_interval].present? + config.session_timeout_interval = Rails.application.secrets.decidim[:session_timeout_interval].to_i.seconds + end + config.follow_http_x_forwarded_host = Rails.application.secrets.decidim[:follow_http_x_forwarded_host].present? + config.maximum_conversation_message_length = Rails.application.secrets.decidim[:maximum_conversation_message_length].to_i + config.password_similarity_length = Rails.application.secrets.decidim[:password_similarity_length] if Rails.application.secrets.decidim[:password_similarity_length].present? + config.denied_passwords = Rails.application.secrets.decidim[:denied_passwords] if Rails.application.secrets.decidim[:denied_passwords].present? + config.allow_open_redirects = Rails.application.secrets.decidim[:allow_open_redirects] if Rails.application.secrets.decidim[:allow_open_redirects].present? +end + +if Decidim.module_installed? :api + Decidim::Api.configure do |config| + config.schema_max_per_page = Rails.application.secrets.dig(:decidim, :api, :schema_max_per_page).presence || 50 + config.schema_max_complexity = Rails.application.secrets.dig(:decidim, :api, :schema_max_complexity).presence || 5000 + config.schema_max_depth = Rails.application.secrets.dig(:decidim, :api, :schema_max_depth).presence || 15 + end +end + +if Decidim.module_installed? :proposals + Decidim::Proposals.configure do |config| + config.similarity_threshold = Rails.application.secrets.dig(:decidim, :proposals, :similarity_threshold).presence || 0.25 + config.similarity_limit = Rails.application.secrets.dig(:decidim, :proposals, :similarity_limit).presence || 10 + config.participatory_space_highlighted_proposals_limit = Rails.application.secrets.dig(:decidim, :proposals, :participatory_space_highlighted_proposals_limit).presence || 4 + config.process_group_highlighted_proposals_limit = Rails.application.secrets.dig(:decidim, :proposals, :process_group_highlighted_proposals_limit).presence || 3 + end +end + +if Decidim.module_installed? :meetings + Decidim::Meetings.configure do |config| + config.upcoming_meeting_notification = Rails.application.secrets.dig(:decidim, :meetings, :upcoming_meeting_notification).to_i.days + if Rails.application.secrets.dig(:decidim, :meetings, :embeddable_services).present? + config.embeddable_services = Rails.application.secrets.dig(:decidim, :meetings, :embeddable_services) + end + unless Rails.application.secrets.dig(:decidim, :meetings, :enable_proposal_linking) == "auto" + config.enable_proposal_linking = Rails.application.secrets.dig(:decidim, :meetings, :enable_proposal_linking).present? + end + end +end + +if Decidim.module_installed? :budgets + Decidim::Budgets.configure do |config| + unless Rails.application.secrets.dig(:decidim, :budgets, :enable_proposal_linking) == "auto" + config.enable_proposal_linking = Rails.application.secrets.dig(:decidim, :budgets, :enable_proposal_linking).present? + end + end +end + +if Decidim.module_installed? :accountability + Decidim::Accountability.configure do |config| + unless Rails.application.secrets.dig(:decidim, :accountability, :enable_proposal_linking) == "auto" + config.enable_proposal_linking = Rails.application.secrets.dig(:decidim, :accountability, :enable_proposal_linking).present? + end + end +end + +if Decidim.module_installed? :initiatives + Decidim::Initiatives.configure do |config| + unless Rails.application.secrets.dig(:decidim, :initiatives, :creation_enabled) == "auto" + config.creation_enabled = Rails.application.secrets.dig(:decidim, :initiatives, :creation_enabled).present? + end + config.similarity_threshold = Rails.application.secrets.dig(:decidim, :initiatives, :similarity_threshold).presence || 0.25 + config.similarity_limit = Rails.application.secrets.dig(:decidim, :initiatives, :similarity_limit).presence || 5 + config.minimum_committee_members = Rails.application.secrets.dig(:decidim, :initiatives, :minimum_committee_members).presence || 2 + config.default_signature_time_period_length = Rails.application.secrets.dig(:decidim, :initiatives, :default_signature_time_period_length).presence || 120 + config.default_components = Rails.application.secrets.dig(:decidim, :initiatives, :default_components) + config.first_notification_percentage = Rails.application.secrets.dig(:decidim, :initiatives, :first_notification_percentage).presence || 33 + config.second_notification_percentage = Rails.application.secrets.dig(:decidim, :initiatives, :second_notification_percentage).presence || 66 + config.stats_cache_expiration_time = Rails.application.secrets.dig(:decidim, :initiatives, :stats_cache_expiration_time).to_i.minutes + config.max_time_in_validating_state = Rails.application.secrets.dig(:decidim, :initiatives, :max_time_in_validating_state).to_i.days + unless Rails.application.secrets.dig(:decidim, :initiatives, :print_enabled) == "auto" + config.print_enabled = Rails.application.secrets.dig(:decidim, :initiatives, :print_enabled).present? + end + config.do_not_require_authorization = Rails.application.secrets.dig(:decidim, :initiatives, :do_not_require_authorization).present? + end +end + +if Decidim.module_installed? :elections + Decidim::Elections.configure do |config| + config.setup_minimum_hours_before_start = Rails.application.secrets.dig(:elections, :setup_minimum_hours_before_start).presence || 1 + config.start_vote_maximum_hours_before_start = Rails.application.secrets.dig(:elections, :start_vote_maximum_hours_before_start).presence || 6 + config.voter_token_expiration_minutes = Rails.application.secrets.dig(:elections, :voter_token_expiration_minutes).presence || 120 + config.document_types = Rails.application.secrets.dig(:elections, :document_types).presence || %w(identification_number passport) + end + + Decidim::Votings.configure do |config| + config.check_census_max_requests = Rails.application.secrets.dig(:elections, :votings, :check_census_max_requests).presence || 5 + config.throttling_period = Rails.application.secrets.dig(:elections, :votings, :throttling_period).to_i.minutes + end + + Decidim::Votings::Census.configure do |config| + config.census_access_codes_export_expiry_time = Rails.application.secrets.dig(:elections, :votings, :census, :access_codes_export_expiry_time).to_i.days + end +end + +Rails.application.config.i18n.available_locales = Decidim.available_locales +Rails.application.config.i18n.default_locale = Decidim.default_locale + +# Inform Decidim about the assets folder +Decidim.register_assets_path File.expand_path("app/packs", Rails.application.root) diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..5118eb6 --- /dev/null +++ b/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [ + :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn +] diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100644 index 0000000..aa7435f --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100644 index 0000000..6e1d16f --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/config/initializers/permissions_policy.rb b/config/initializers/permissions_policy.rb new file mode 100644 index 0000000..50bcf4e --- /dev/null +++ b/config/initializers/permissions_policy.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# Define an application-wide HTTP permissions policy. For further +# information see https://developers.google.com/web/updates/2018/06/feature-policy +# +# Rails.application.config.permissions_policy do |f| +# f.camera :none +# f.gyroscope :none +# f.microphone :none +# f.usb :none +# f.fullscreen :self +# f.payment :self, "https://secure.example.com" +# end diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..2f3c0db --- /dev/null +++ b/config/initializers/wrap_parameters.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..63f1c3e --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1 @@ +en: diff --git a/config/puma.rb b/config/puma.rb new file mode 100644 index 0000000..e663c14 --- /dev/null +++ b/config/puma.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +# Puma can serve each request in a thread from an internal thread pool. +# The `threads` method setting takes two numbers: a minimum and maximum. +# Any libraries that use thread pools should be configured to match +# the maximum value specified for Puma. Default is set to 5 threads for minimum +# and maximum; this matches the default thread size of Active Record. +# +max_threads_count = ENV.fetch("RAILS_MAX_THREADS", 5) +min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count } +threads min_threads_count, max_threads_count + +# Specifies the `worker_timeout` threshold that Puma will use to wait before +# terminating a worker in development environments. +# +worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development" + +# Specifies the `port` that Puma will listen on to receive requests; default is 3000. +# +port ENV.fetch("PORT", 3000) + +# Specifies the `environment` that Puma will run in. +# +environment ENV.fetch("RAILS_ENV", "development") + +# Specifies the `pidfile` that Puma will use. +pidfile ENV.fetch("PIDFILE", "tmp/pids/server.pid") + +# Specifies the number of `workers` to boot in clustered mode. +# Workers are forked web server processes. If using threads and workers together +# the concurrency of the application would be max `threads` * `workers`. +# Workers do not work on JRuby or Windows (both of which do not support +# processes). +# +# workers ENV.fetch("WEB_CONCURRENCY") { 2 } + +# Use the `preload_app!` method when specifying a `workers` number. +# This directive tells Puma to first boot the application and load code +# before forking the application. This takes advantage of Copy On Write +# process behavior so workers use less memory. +# +# preload_app! + +# Allow puma to be restarted by `rails restart` command. +plugin :tmp_restart diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000..a4a759c --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +require "sidekiq/web" + +Rails.application.routes.draw do + authenticate :user, ->(u) { u.admin? } do + mount Sidekiq::Web => "/sidekiq" + end + + mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? + + mount Decidim::Core::Engine => "/" + # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html +end diff --git a/config/schedule.rb b/config/schedule.rb new file mode 100644 index 0000000..9e02536 --- /dev/null +++ b/config/schedule.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +every "30 1 * * *" do + rake "decidim:metrics:all" +end + +every "3 3 * * *" do + rake "decidim:delete_download_your_data_files" + rake "decidim:open_data:export" +end diff --git a/config/secrets.yml b/config/secrets.yml new file mode 100644 index 0000000..178f5d7 --- /dev/null +++ b/config/secrets.yml @@ -0,0 +1,222 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you will be exposed to dictionary attacks. +# You can use `rails secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you are sharing your code publicly. + +decidim_default: &decidim_default + application_name: <%= Decidim::Env.new("DECIDIM_APPLICATION_NAME", "Decidim INSPIRE").to_json %> + mailer_sender: <%= Decidim::Env.new("DECIDIM_MAILER_SENDER", "inspire@platoniq.net").to_s %> + available_locales: <%= Decidim::Env.new("DECIDIM_AVAILABLE_LOCALES", "en").to_array.to_json %> + default_locale: <%= Decidim::Env.new("DECIDIM_DEFAULT_LOCALE", "en").to_s %> + force_ssl: <%= Decidim::Env.new("DECIDIM_FORCE_SSL", "auto").default_or_present_if_exists.to_s %> + enable_html_header_snippets: <%= Decidim::Env.new("DECIDIM_ENABLE_HTML_HEADER_SNIPPETS").to_boolean_string %> + currency_unit: <%= Decidim::Env.new("DECIDIM_CURRENCY_UNIT", "€").to_s %> + cors_enabled: <%= Decidim::Env.new("DECIDIM_CORS_ENABLED").to_boolean_string %> + image_uploader_quality: <%= Decidim::Env.new("DECIDIM_IMAGE_UPLOADER_QUALITY", "80").to_i %> + maximum_attachment_size: <%= Decidim::Env.new("DECIDIM_MAXIMUM_ATTACHMENT_SIZE", "10").to_i %> + maximum_avatar_size: <%= Decidim::Env.new("DECIDIM_MAXIMUM_AVATAR_SIZE", "5").to_i %> + max_reports_before_hiding: <%= Decidim::Env.new("DECIDIM_MAX_REPORTS_BEFORE_HIDING", "3").to_i %> + track_newsletter_links: <%= Decidim::Env.new("DECIDIM_TRACK_NEWSLETTER_LINKS", "auto").default_or_present_if_exists.to_s %> + download_your_data_expiry_time: <%= Decidim::Env.new("DECIDIM_DOWNLOAD_YOUR_DATA_EXPIRY_TIME", "7").to_i %> + throttling_max_requests: <%= Decidim::Env.new("DECIDIM_THROTTLING_MAX_REQUESTS", "100").to_i %> + throttling_period: <%= Decidim::Env.new("DECIDIM_THROTTLING_PERIOD", "1").to_i %> + unconfirmed_access_for: <%= Decidim::Env.new("DECIDIM_UNCONFIRMED_ACCESS_FOR", "0").to_i %> + system_accesslist_ips: <%= Decidim::Env.new("DECIDIM_SYSTEM_ACCESSLIST_IPS").to_array.to_json %> + base_uploads_path: <%= Decidim::Env.new("DECIDIM_BASE_UPLOADS_PATH").to_json %> + default_csv_col_sep: <%= Decidim::Env.new("DECIDIM_DEFAULT_CSV_COL_SEP", ";").to_json %> + consent_cookie_name: <%= Decidim::Env.new("DECIDIM_CONSENT_COOKIE_NAME", "decidim-consent").to_json %> + cache_key_separator: <%= Decidim::Env.new("DECIDIM_CACHE_KEY_SEPARATOR", "/").to_json %> + expire_session_after: <%= Decidim::Env.new("DECIDIM_EXPIRE_SESSION_AFTER", "30").to_i %> + session_timeout_interval: <%= Decidim::Env.new("DECIDIM_SESSION_TIMEOUT_INTERVAL", "10").to_i %> + enable_remember_me: <%= Decidim::Env.new("DECIDIM_ENABLE_REMEMBER_ME", "auto").default_or_present_if_exists.to_s %> + follow_http_x_forwarded_host: <%= Decidim::Env.new("DECIDIM_FOLLOW_HTTP_X_FORWARDED_HOST").to_boolean_string %> + maximum_conversation_message_length: <%= Decidim::Env.new("DECIDIM_MAXIMUM_CONVERSATION_MESSAGE_LENGTH", "1000").to_i %> + password_similarity_length: <%= Decidim::Env.new("DECIDIM_PASSWORD_SIMILARITY_LENGTH", 4).to_i %> + denied_passwords: <%= Decidim::Env.new("DECIDIM_DENIED_PASSWORDS").to_array(separator: ", ").to_json %> + allow_open_redirects: <%= Decidim::Env.new("DECIDIM_ALLOW_OPEN_REDIRECTS").to_boolean_string %> + social_share_services: <%= Decidim::Env.new("DECIDIM_SOCIAL_SHARE_SERVICES", "X, Facebook, WhatsApp, Telegram").to_array.to_json %> + service_worker_enabled: <%= Decidim::Env.new("DECIDIM_SERVICE_WORKER_ENABLED", Rails.env.exclude?("development")).to_boolean_string %> + page_blocks: <%= Decidim::Env.new("DECIDIM_PAGE_BLOCKS", "terms-of-service").to_array %> + admin_password: + expiration_days: <%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_EXPIRATION_DAYS", 90).to_i %> + min_length: <%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_MIN_LENGTH", 15).to_i %> + repetition_times: <%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_REPETITION_TIMES", 5).to_i %> + strong: <%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_STRONG", true).to_boolean_string %> + api: + schema_max_per_page: <%= Decidim::Env.new("API_SCHEMA_MAX_PER_PAGE", 50).to_i %> + schema_max_complexity: <%= Decidim::Env.new("API_SCHEMA_MAX_COMPLEXITY", 5000).to_i %> + schema_max_depth: <%= Decidim::Env.new("API_SCHEMA_MAX_DEPTH", 15).to_i %> + proposals: + similarity_threshold: <%= Decidim::Env.new("PROPOSALS_SIMILARITY_THRESHOLD", 0.25).to_f %> + similarity_limit: <%= Decidim::Env.new("PROPOSALS_SIMILARITY_LIMIT", 10).to_i %> + participatory_space_highlighted_proposals_limit: <%= Decidim::Env.new("PROPOSALS_PARTICIPATORY_SPACE_HIGHLIGHTED_PROPOSALS_LIMIT", 4).to_i %> + process_group_highlighted_proposals_limit: <%= Decidim::Env.new("PROPOSALS_PROCESS_GROUP_HIGHLIGHTED_PROPOSALS_LIMIT", 3).to_i %> + meetings: + upcoming_meeting_notification: <%= Decidim::Env.new("MEETINGS_UPCOMING_MEETING_NOTIFICATION", 2).to_i %> + enable_proposal_linking: <%= Decidim::Env.new("MEETINGS_ENABLE_PROPOSAL_LINKING", "auto").default_or_present_if_exists.to_s %> + embeddable_services: <%= Decidim::Env.new("MEETINGS_EMBEDDABLE_SERVICES").to_array(separator: " ").to_json %> + budgets: + enable_proposal_linking: <%= Decidim::Env.new("BUDGETS_ENABLE_PROPOSAL_LINKING", "auto").default_or_present_if_exists.to_s %> + accountability: + enable_proposal_linking: <%= Decidim::Env.new("ACCOUNTABILITY_ENABLE_PROPOSAL_LINKING", "auto").default_or_present_if_exists.to_s %> + initiatives: + creation_enabled: <%= Decidim::Env.new("INITIATIVES_CREATION_ENABLED", "auto").default_or_present_if_exists.to_s %> + similarity_threshold: <%= Decidim::Env.new("INITIATIVES_SIMILARITY_THRESHOLD", 0.25).to_f %> + similarity_limit: <%= Decidim::Env.new("INITIATIVES_SIMILARITY_LIMIT", 5).to_i %> + minimum_committee_members: <%= Decidim::Env.new("INITIATIVES_MINIMUM_COMMITTEE_MEMBERS", 2).to_i %> + default_signature_time_period_length: <%= Decidim::Env.new("INITIATIVES_DEFAULT_SIGNATURE_TIME_PERIOD_LENGTH", 120).to_i %> + default_components: <%= Decidim::Env.new("INITIATIVES_DEFAULT_COMPONENTS", "pages, meetings").to_array.to_json %> + first_notification_percentage: <%= Decidim::Env.new("INITIATIVES_FIRST_NOTIFICATION_PERCENTAGE", 33).to_i %> + second_notification_percentage: <%= Decidim::Env.new("INITIATIVES_SECOND_NOTIFICATION_PERCENTAGE", 66).to_i %> + stats_cache_expiration_time: <%= Decidim::Env.new("INITIATIVES_STATS_CACHE_EXPIRATION_TIME", 5).to_i %> + max_time_in_validating_state: <%= Decidim::Env.new("INITIATIVES_MAX_TIME_IN_VALIDATING_STATE", 60).to_i %> + print_enabled: <%= Decidim::Env.new("INITIATIVES_PRINT_ENABLED", "auto").default_or_present_if_exists.to_s %> + do_not_require_authorization: <%= Decidim::Env.new("INITIATIVES_DO_NOT_REQUIRE_AUTHORIZATION").to_boolean_string %> + +elections_default: &elections_default + bulletin_board_server: <%= Decidim::Env.new("ELECTIONS_BULLETIN_BOARD_SERVER", 'http://bulletin-board.lvh.me:8000/api').to_s %> + bulletin_board_public_key: {"kty":"RSA","n":"zMXsZpYPKkDlSmezX898y7zNOaJ7ENIN4kj4UhQ95Vm4HlgTpIs2VMMsO0eqynMaOR_G1mXdqbpbaJtXijBe4V8323QwGm6WVAa71E7pDXa5g6-uo5f8GePitN0YER9y2yNQN4uTaNzJiWV2uLBUYfMdj3SIif31YwLULHAOj3B_oleFK8coE_Qr3NzATcYBmsqE8AR4NljxTO6KDmP1SLdf5GBOBhOAIFbnL_Kpj2xkm7MS3hjMVKpiRhqA1UgX5oKZ8ixBv46fNJF0pBsHi3fHNjK9oZzgdx_AI-YFpdE_40-8bh_g9sWzxacqOM2-MdQLHbvRPEVltO3E8tr6I5YWrylcP7l9VD8OJeqjq2qFYHnGYdmLoD2XuXmI9EuBvSb9H4-qcartxZSIQCimKib_fxZvgrG1FSRRhK6YpvIdGv4-G2zfCCRsC4XD80TYI2bf-oYCoy7eU3_eVHFMV2yg4p1Wnuw2Vgq0edPL_bKaV9JvGx7F-U5juxNN0WZR9LzbPl4ReejzN95lyHgbj0nTH_u3bSpZmgJrQF-PwdnPcG46deVjJgUeosrlC4lQxVrRz0GL58BuFunnz2uYDBDrcJCiG60EbdkAFHjOcXU4wrUWATin7je_aqdBXhSnkTafcJAMvL7Y2Ld7vDge8nLqjAVlAi5am3rN0kqKT6M","e":"AQAB","kid":"a8e86f02ca27e1861bfc49e2a9a4614ca9068f8efdb6d42d19d3aab0eb2a31be"} + authority_private_key: {"kty":"RSA","n":"pNgMt8lnPDD3TlWYGhRiV1oZkPQmnLdiUzwyb_-35qKD9k-HU86xo0uSgoOUWkBtnvFscq8zNDPAGAlZVokaN_z9ksZblSce0LEl8lJa3ICgghg7e8vg_7Lz5dyHSQ3PCLgenyFGcL401aglDde1Xo4ujdz33Lklc4U9zoyoLUI2_viYmNOU6n5Mn0sJd30FeICMrLD2gX46pGe3MGug6groT9EvpKcdOoJHKoO5yGSVaeY5-Bo3gngvlgjlS2mfwjCtF4NYwIQSd2al-p4BKnuYAVKRSgr8rYnnjhWfJ4GsCaqiyXNi5NPYRV6gl_cx_1jUcA1rRJqQR32I8c8QbAXm5qNO4URcdaKys9tNcVgXBL1FsSdbrLVVFWen1tfWNfHm-8BjiWCWD79-uk5gI0SjC9tWvTzVvswWXI5weNqqVXqpDydr46AsHE2sG40HRCR3UF3LupT-HwXTcYcOZr5dJClJIsU3Hrvy4wLssub69YSNR1Jxn-KX2vUc06xY8CNIuSMpfufEq5cZopL6O2l1pRsW1FQnF3s078_Y9MaQ1gPyBo0IipLBVUj5IjEIfPuiEk4jxkiUYDeqzf7bAvSFckp94yLkRWTs_pEZs7b_ogwRG6WMHjtcaNYe4CufhIm9ekkKDeAWOPRTHfKNmohRBh09XuvSjqrx5Z7rqb8","e":"AQAB","kid":"b8dba1459df956d60107690c34fa490db681eac4f73ffaf6e4055728c02ddc8e","d":"Uh3KIBe1VJez6pLbBUrYPlmE2N-3CGSWF46qNX62lq6ofB_b8xTJCuaPonJ3iYoE0aPEeVDrefq5m3-0wFXl-LQPgXlMj_1_7UgB9jeuSZ_N1WDK6P2EJPx5YS09O1gkpVxK7Mx_sZQe77wmUUH-eI7tg__qfUrB7E0Yn_cTpBATI2qlYaQsz6-A7e1MVvixq_ilmzVAZvuBrPp5mCZVb6FlXrV_PU9-UPIrD3O1La1lfO6SPBSbSGQkmGHwD2QbkHn9D_R_Vs-z_0TkM_dX71jIPQhrle3pN222KuJ8eQqwr9QP6biQMBuT5eKgr3MVtfUDRpp4sCEq9GIFwSd8LvbmGPrOoz8ueOEQ05nisIBQuOTYiWpYs2CEV062HR1bLFRLDUcSlflGNr0bgiXTUFx4wxRG06OaI-rQ6nG3M8TE0I0phMNCG3c7YyV28z_k2I65oQF9aKtiwFwc0YsUSGPTOFZGWHuCCPLm0lFeebpI_JIYqIv70NJxbSZEBY8DAIqZPqP6y_CRo2_C7piCgsjg9pnF8cp45vz4L6DWZ0Tumc_5aRuqIBkYXXwP9TjqhzxL-2SQHIqUAjj6Y6S35tZT6ekZSbnPIKX_e42y6bDT_Ztf01QfKiTkcx3_I8RwOuh6CzJzr72AykQpU3XKOKF1x1GBtYyrno4jG5LgaGE","p":"1UARZ-rRnpKG5NHKlXTys3irCy-d91edHL3fEIzDKvhMRQCIWh7dt8l0_sIpcBF-EbVilbFKj7yfgZBTr8EkAXHgweayK8rnlMqi2jte1_u-5DBtrGVVUTSQltSLDOZHK5QfUxVK6Bbk8K5ROLvef91oNgnSNWNOeoCZdlS55nMZcAgY_6mxSuuMq54Tgy8o4Ip890-ZEYY6OSFXhU-ieoGO4Jw--c6QzmCa3gGo2oVClidMNaM1jquK4Pj6xaoxR2NWeIX9Ix7k1P2B24pegyHXjSIpQ6JYdn352VViXi2tx7TTJh6ClNVjgoRmL4Gfy_IJNx0GhF5OB3yughUc7w","q":"xePJGBt466qM9F0BPxWFjyWbIs_GNXr-lBGASui0Z94cfgFbsZwqRsWQEf7jDVQsDNVnPSWZ_Wd6UqoQaIxc0tE8gaokPG6A4EUDyoLaZ231ZydDVoWof8FnPDaJwrcPwZ4R6ZLKGmkfytCZuU9I_9B4uuV0dyjEzKfS-Os3UcLumKPlgJ71OZAb49GTqUHuTePcSJjyYOYXx6eE7i_1m8TjU9Ut18BJNQhLqWmerA6X1ijbR2_syY6GXhGSfciSBH8xVkiUnqXb2jt1bE8nwWw-Sam5ikjzNbXqqs978IcCE5HTddQmy99bwuArA8PLqIFj3OOO1CSo8oyn2XDgMQ","dp":"Diky_rOZN-6DBq7nxQT_GOvqb9O5qbMnu8DgDzlJvJDAf9SJOXLTRmEaY9CA7_A5bvOcmFQtn13nObNb20_4FCB7zGSFcGMI_dh2-Ab5RV5yTrTok4onID1dXKbAlRq1ny825U2Eq-TZTyJEQoA3RkZtpSkBzInLrFbd2f3GWodKKSZggpnCLDd4H-1fXlbDYCXSJpoikAdZ1nFgXnnrUDdKRaAajnwpIYtIvXVewSQYR-BULzunUtIRZt8hx_6FRzhRha9gH_TtPTeYZ_vISuz0Y2rhUpx1Q2kaLlR9M8PUxm47l0xvX3LMKN6h6oWxFtn7wq0qwZ-Bjv24mOrOAQ","dq":"nXGD10hURrwk9W7hxP0sjB2Rdnr06iv3THs4JWFL16_h32bZO1BSWoho_chbgYlMmtFXGFFIWVLxAcAI2gWC_MA4cbmapvIMW2LNh1vgxJW5v95_NuGUlECeEEwcAu1-_b7z5XBCmAy3nLem9sbb_5wv0hMpPH0VRvbnZeBO3SBIkO0lddYCqU-8wN9HqkyoexQleSUnAm1O0iy4GIHT2aEmdNaRaKy2EhmNiTZdZeseZueOvyGPtTVONp2ofacMdcN0z39jr22qo9DWtdusd7nVPOpqkllEF6GrGUeHBnGD92n4YjDuxRnqefu8fXxUFrcLav0p8CNSv9ek291woQ","qi":"w6hfKEBLLHRWPkjajgxZyyetj-UFfVkILRT0plOllJ2JV8whcOXRXbiXH2r8zqMeyMFrrMwmuvv4TVQaruKB0ZQOG7Tz5Lw0RZEREOLnBwc3vSi_iLd-jBz01LdExTpqsAHMkaMQR9x62J8DE1ZNxVdn3ELYKik0f1L2r_WErzhvT1uq69HAybUp6WHcFYH0PSqHg4LOneXAdU1_g-ji2Zn9dlA_2oYGQ5S6JXPV7v2IVbEFpxyVD1lPbFT0iKhyZZevictjgD_JGHveIVqsq5w0Csyz08h0oEW9hYEq-4bquMxSf18gjldoS5uQPD7FUECgL8bxsCdc4hP6UEKYGw"} + authority_name: "Decidim Test Authority" + authority_api_key: "89Ht70GZNcicu8WEyagz_rRae6brbqZAGuBEICYBCii-PTV3MAstAtx1aRVe5H5YfODi-JgYPvyf9ZMH7tOeZ15e3mf9B2Ymgw7eknvBFMRP213YFGo1SPn_C4uLK90G" + scheme_name: "dummy" + quorum: 2 + number_of_trustees: 3 + setup_minimum_hours_before_start: 1 + document_types: <%= Decidim::Env.new("ELECTIONS_DOCUMENT_TYPES", "identification_number,passport").to_array.to_json %> + +storage_default: &storage_default + provider: <%= Decidim::Env.new("STORAGE_PROVIDER", "local").to_s %> + cdn_host: <%= ENV["STORAGE_CDN_HOST"] %> + s3: + access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> + secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %> + region: <%= ENV["AWS_REGION"] %> + bucket: <%= ENV["AWS_BUCKET"] %> + endpoint: <%= ENV["AWS_ENDPOINT"] %> + azure: + storage_access_key: <%= ENV["AZURE_STORAGE_ACCESS_KEY"] %> + storage_account_name: <%= ENV["AZURE_STORAGE_ACCOUNT_NAME"] %> + container: <%= ENV["AZURE_CONTAINER"] %> + gcs: + project: <%= ENV["GCS_PROJECT"] %> + bucket: <%= ENV["GCS_BUCKET"] %> + type: <%= Decidim::Env.new("GCS_TYPE", "service_account").to_s %> + project_id: <%= Decidim::Env.new("GCS_PROJECT_ID").to_s %> + private_key_id: <%= Decidim::Env.new("GCS_PRIVATE_KEY_ID").to_s %> + private_key: <%= Decidim::Env.new("GCS_PRIVATE_KEY").to_s %> + client_email: <%= Decidim::Env.new("GCS_CLIENT_EMAIL").to_s %> + client_id: <%= Decidim::Env.new("GCS_CLIENT_ID").to_s %> + auth_uri: <%= Decidim::Env.new("GCS_AUTH_URI", "https://accounts.google.com/o/oauth2/auth").to_s %> + token_uri: <%= Decidim::Env.new("GCS_TOKEN_URI", "https://accounts.google.com/o/oauth2/token").to_s %> + auth_provider_x509_cert_url: <%= Decidim::Env.new("GCS_AUTH_PROVIDER_X509_CERT_URL", "https://www.googleapis.com/oauth2/v1/certs").to_s %> + client_x509_cert_url: <%= Decidim::Env.new("GCS_CLIENT_X509_CERT_URL").to_s %> + +default: &default + decidim: + <<: *decidim_default + omniauth: + facebook: + enabled: <%= Decidim::Env.new("OMNIAUTH_FACEBOOK_APP_ID").to_boolean_string %> + app_id: <%= ENV["OMNIAUTH_FACEBOOK_APP_ID"] %> + app_secret: <%= ENV["OMNIAUTH_FACEBOOK_APP_SECRET"] %> + icon: facebook-fill + twitter: + enabled: <%= Decidim::Env.new("OMNIAUTH_TWITTER_API_KEY").to_boolean_string %> + api_key: <%= ENV["OMNIAUTH_TWITTER_API_KEY"] %> + api_secret: <%= ENV["OMNIAUTH_TWITTER_API_SECRET"] %> + icon: twitter-x-fill + google_oauth2: + enabled: <%= Decidim::Env.new("OMNIAUTH_GOOGLE_CLIENT_ID").to_boolean_string %> + icon: google-fill + client_id: <%= ENV["OMNIAUTH_GOOGLE_CLIENT_ID"] %> + client_secret: <%= ENV["OMNIAUTH_GOOGLE_CLIENT_SECRET"] %> + maps: + dynamic_provider: <%= Decidim::Env.new("MAPS_DYNAMIC_PROVIDER", ENV["MAPS_PROVIDER"]).to_s %> + static_provider: <%= Decidim::Env.new("MAPS_STATIC_PROVIDER", ENV["MAPS_PROVIDER"]).to_s %> + static_api_key: <%= Decidim::Env.new("MAPS_STATIC_API_KEY", ENV["MAPS_API_KEY"]).to_s %> + dynamic_api_key: <%= Decidim::Env.new("MAPS_DYNAMIC_API_KEY", ENV["MAPS_API_KEY"]).to_s %> + dynamic_url: <%= ENV["MAPS_DYNAMIC_URL"] %> + static_url: <%= ENV["MAPS_STATIC_URL"] %> + attribution: <%= ENV["MAPS_ATTRIBUTION"].to_json %> + extra_vars: <%= ENV["MAPS_EXTRA_VARS"].to_json %> + geocoding_host: <%= ENV["MAPS_GEOCODING_HOST"] %> + etherpad: + server: <%= ENV["ETHERPAD_SERVER"] %> + api_key: <%= ENV["ETHERPAD_API_KEY"] %> + api_version: <%= Decidim::Env.new("ETHERPAD_API_VERSION", "1.2.1") %> + elections: + <<: *elections_default + storage: + <<: *storage_default + vapid: + enabled: <%= Decidim::Env.new("VAPID_PUBLIC_KEY").to_boolean_string %> + public_key: <%= ENV["VAPID_PUBLIC_KEY"] %> + private_key: <%= ENV["VAPID_PRIVATE_KEY"] %> + +development: + <<: *default + secret_key_base: <%= Decidim::Env.new("SECRET_KEY_BASE", "20030a99bcc7efa3a3e98e2db40723909aaedc499ba757dbe83819a5836a229a5dd5a1b6e43bcc8fcde9f5622c7a373332c84a8e5ccb44a182be3def0d968734") %> + omniauth: + developer: + enabled: true + icon: phone-line + +test: + <<: *default + secret_key_base: 7800ae81e99faaad7257ee040ea674b2ea9abc202b8e4e0caf7a0c51e8bf9802f76bb2ade265dcfc23551630f7316b760e85d64b40e92983e8d9405d9465f005 + omniauth: + facebook: + enabled: true + app_id: fake-facebook-app-id + app_secret: fake-facebook-app-secret + twitter: + enabled: true + api_key: fake-twitter-api-key + api_secret: fake-twitter-api-secret + google_oauth2: + enabled: true + client_id: + client_secret: + elections: + <<: *elections_default + bulletin_board_server: <%= Decidim::Env.new("ELECTIONS_BULLETIN_BOARD_SERVER", 'http://bulletin-board.lvh.me:5017/api').to_s %> + + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + <<: *default + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> + smtp_username: <%= ENV["SMTP_USERNAME"] %> + smtp_password: <%= ENV["SMTP_PASSWORD"] %> + smtp_address: <%= ENV["SMTP_ADDRESS"] %> + smtp_domain: <%= ENV["SMTP_DOMAIN"] %> + smtp_port: <%= Decidim::Env.new("SMTP_PORT", 587).to_i %> + smtp_starttls_auto: <%= Decidim::Env.new("SMTP_STARTTLS_AUTO").to_boolean_string %> + smtp_authentication: <%= Decidim::Env.new("SMTP_AUTHENTICATION", "plain").to_s %> + elections: + bulletin_board_server: <%= ENV["BULLETIN_BOARD_SERVER"] %> + bulletin_board_public_key: <%= ENV["BULLETIN_BOARD_PUBLIC_KEY"] %> + authority_api_key: <%= ENV["BULLETIN_BOARD_API_KEY"] %> + authority_name: <%= ENV["AUTHORITY_NAME"] %> + authority_private_key: <%= ENV["AUTHORITY_PRIVATE_KEY"] %> + scheme_name: <%= Decidim::Env.new("ELECTIONS_SCHEME_NAME", "electionguard").to_s %> + number_of_trustees: <%= Decidim::Env.new("ELECTIONS_NUMBER_OF_TRUSTEES").to_i %> + quorum: <%= Decidim::Env.new("ELECTIONS_QUORUM").to_i %> + setup_minimum_hours_before_start: <%= Decidim::Env.new("ELECTIONS_SETUP_MINIMUM_HOURS_BEFORE_START", 1).to_i %> + start_vote_maximum_hours_before_start: <%= Decidim::Env.new("ELECTIONS_START_VOTE_MAXIMUM_HOURS_BEFORE_START", 6).to_i %> + voter_token_expiration_minutes: <%= Decidim::Env.new("ELECTIONS_VOTER_TOKEN_EXPIRATION_MINUTES", 120).to_i %> + document_types: <%= Decidim::Env.new("ELECTIONS_DOCUMENT_TYPES", "identification_number,passport").to_array.to_json %> + votings: + check_census_max_requests: <%= Decidim::Env.new("VOTINGS_CHECK_CENSUS_MAX_REQUESTS", 5).to_i %> + throttling_period: <%= Decidim::Env.new("VOTINGS_THROTTLING_PERIOD", 1).to_i %> + census: + access_codes_export_expiry_time: <%= Decidim::Env.new("VOTINGS_CENSUS_ACCESS_CODES_EXPORT_EXPIRY_TIME", 2).to_i %> diff --git a/config/shakapacker.yml b/config/shakapacker.yml new file mode 100644 index 0000000..25fe7e4 --- /dev/null +++ b/config/shakapacker.yml @@ -0,0 +1,89 @@ +# File written by Decidim generator +# Note: You must restart bin/webpack-dev-server for changes to take effect + +default: &default + source_path: app/packs + source_entry_path: entrypoints + nested_entries: true + css_extract_ignore_order_warnings: false + + public_root_path: public + public_output_path: decidim-packs + cache_path: tmp/shakapacker + webpack_compile_output: true + extract_css: true + shakapacker_precompile: true + + additional_paths: + - node_modules + - app/packs + + # Reload manifest.json on all requests so we reload latest compiled packs + cache_manifest: false + + # Select loader to use, available options are 'babel' (default), 'swc' or 'esbuild' + webpack_loader: 'babel' + + # Set to true to enable check for matching versions of shakapacker gem and NPM package - will raise an error if there is a mismatch or wildcard versioning is used + ensure_consistent_versioning: true + + # Select whether the compiler will use SHA digest ('digest' option) or most most recent modified timestamp ('mtime') to determine freshness + compiler_strategy: digest + + # Select whether the compiler will always use a content hash and not just in production + # Do not use contentHash except for production for performance + # https://webpack.js.org/guides/build-performance/#avoid-production-specific-tooling + useContentHash: false + +development: + <<: *default + compile: true + compiler_strategy: mtime + # Compile test packs to decidim decidim-packs folder + + # Reference: https://webpack.js.org/configuration/dev-server/ + dev_server: + https: false + host: localhost + # Notice that we use a different port (to prevent blocking the default one) as + # there will be at least two webpack servers running + port: 3035 + # Hot Module Replacement updates modules while the application is running without a full reload + hmr: false + # mini-css-extract-plugin is a required dependency in both cases. + inline_css: true + client: + # Should we show a full-screen overlay in the browser when there are compiler errors or warnings? + overlay: false + # May also be a string + # webSocketURL: + # hostname: "0.0.0.0" + # pathname: "/ws" + # port: 8080 + # Should we use gzip compression? + compress: true + # Note that apps that do not check the host are vulnerable to DNS rebinding attacks + allowed_hosts: "all" + pretty: true + headers: + 'Access-Control-Allow-Origin': '*' + static: + watch: + ignored: '**/node_modules/**' + +test: + <<: *default + compile: true + public_output_path: packs-test + +production: + <<: *default + + # Production depends on precompilation of packs prior to booting for performance. + compile: false + + # Use content hash for naming assets. Cannot be overridden by for production. + useContentHash: true + + # Cache manifest.json for performance + cache_manifest: true diff --git a/config/sidekiq.yml b/config/sidekiq.yml new file mode 100644 index 0000000..e5c223a --- /dev/null +++ b/config/sidekiq.yml @@ -0,0 +1,15 @@ +:queues: + - [mailers, 4] + - [vote_reminder, 2] + - [reminders, 2] + - [default, 2] + - [newsletter, 2] + - [newsletters_opt_in, 2] + - [conference_diplomas, 2] + - [events, 2] + - [translations, 2] + - [user_report, 2] + - [block_user, 2] + - [metrics, 1] + - [exports, 1] + - [close_meeting_reminder, 1] diff --git a/config/spring.rb b/config/spring.rb new file mode 100644 index 0000000..6a854d5 --- /dev/null +++ b/config/spring.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +require "decidim/spring" + +Spring.watch( + ".ruby-version", + ".rbenv-vars", + "tmp/restart.txt", + "tmp/caching-dev.txt" +) diff --git a/config/storage.yml b/config/storage.yml new file mode 100644 index 0000000..8f18353 --- /dev/null +++ b/config/storage.yml @@ -0,0 +1,42 @@ +test: + service: Disk + root: <%= Rails.root.join("tmp/storage") %> + +local: + service: Disk + root: <%= Rails.root.join("storage") %> + +s3: + service: S3 + access_key_id: <%= Rails.application.secrets.dig(:storage, :s3, :access_key_id) %> + secret_access_key: <%= Rails.application.secrets.dig(:storage, :s3, :secret_access_key) %> + bucket: <%= Rails.application.secrets.dig(:storage, :s3, :bucket) %> + <%= "region: #{Rails.application.secrets.dig(:storage, :s3, :region)}" if Rails.application.secrets.dig(:storage, :s3, :region) %> + <%= "endpoint: #{Rails.application.secrets.dig(:storage, :s3, :endpoint)}" if Rails.application.secrets.dig(:storage, :s3, :endpoint) %> + +azure: + service: AzureStorage + storage_account_name: <%= Rails.application.secrets.dig(:storage, :azure, :storage_account_name) %> + storage_access_key: <%= Rails.application.secrets.dig(:storage, :azure, :storage_access_key) %> + container: <%= Rails.application.secrets.dig(:storage, :azure, :container) %> + +gcs: + service: GCS + project: <%= Rails.application.secrets.dig(:storage, :gcs, :project) %> + bucket: <%= Rails.application.secrets.dig(:storage, :gcs, :bucket) %> + credentials: + type: <%= Rails.application.secrets.dig(:storage, :gcs, :type) %> + project_id: <%= Rails.application.secrets.dig(:storage, :gcs, :project_id) %> + private_key_id: <%= Rails.application.secrets.dig(:storage, :gcs, :private_key_id) %> + private_key: <%= Rails.application.secrets.dig(:storage, :gcs, :private_key) %> + client_email: <%= Rails.application.secrets.dig(:storage, :gcs, :client_email) %> + client_id: <%= Rails.application.secrets.dig(:storage, :gcs, :client_id) %> + auth_uri: <%= Rails.application.secrets.dig(:storage, :gcs, :auth_uri) %> + token_uri: <%= Rails.application.secrets.dig(:storage, :gcs, :token_uri) %> + auth_provider_x509_cert_url: <%= Rails.application.secrets.dig(:storage, :gcs, :auth_provider_x509_cert_url) %> + client_x509_cert_url: <%= Rails.application.secrets.dig(:storage, :gcs, :client_x509_cert_url) %> + +# mirror: +# service: Mirror +# primary: local +# mirrors: [ s3, gcs, azure ] diff --git a/config/webpack/custom.js b/config/webpack/custom.js new file mode 100644 index 0000000..6d84dd5 --- /dev/null +++ b/config/webpack/custom.js @@ -0,0 +1,125 @@ +/* eslint-disable */ +const { config } = require("shakapacker"); +const { InjectManifest } = require("workbox-webpack-plugin"); +const TerserPlugin = require('terser-webpack-plugin') + +module.exports = { + module: { + rules: [ + { + test: require.resolve("jquery"), + loader: "expose-loader", + options: { + exposes: ["$", "jQuery"] + } + }, + { + test: /\.(js|jsx)$/, + exclude: /node_modules\/(?!tributejs)/, + loader: "babel-loader" + }, + { + test: /\.(graphql|gql)$/, + loader: "graphql-tag/loader" + }, + { + test: require.resolve("react"), + loader: "expose-loader", + options: { + exposes: ["React"] + } + }, + { + test: require.resolve("@rails/ujs"), + loader: "expose-loader", + options: { + exposes: ["Rails"] + } + }, + { + test: [ + /\.md$/, + /\.odt$/, + ], + exclude: [/\.(js|mjs|jsx|ts|tsx)$/], + type: 'asset/resource', + generator: { + filename: 'media/documents/[hash][ext][query]' + } + }, + // Overwrite webpacker files rule to amend the filename output + // and include the name of the file, otherwise some SVGs + // are not generated because the hash is the same between them + { + test: [ + /\.bmp$/, + /\.gif$/, + /\.jpe?g$/, + /\.png$/, + /\.tiff$/, + /\.ico$/, + /\.avif$/, + /\.webp$/, + /\.eot$/, + /\.otf$/, + /\.ttf$/, + /\.woff$/, + /\.woff2$/, + /\.svg$/ + ], + exclude: [/\.(js|mjs|jsx|ts|tsx)$/], + type: 'asset/resource', + generator: { + filename: 'media/images/[name]-[hash][ext][query]' + } + } + ] + }, + resolve: { + extensions: [".js", ".jsx", ".gql", ".graphql"], + fallback: { + crypto: false + } + }, + // https://github.com/rails/webpacker/issues/2932 + // As Decidim uses multiple packs, we need to enforce a single runtime, to prevent duplication + optimization: { + minimizer: [ + new TerserPlugin({ + parallel: Number.parseInt(process.env.SHAKAPACKER_PARALLEL, 10) || true, + terserOptions: { + parse: { + // Let terser parse ecma 8 code but always output + // ES5 compliant code for older browsers + ecma: 8 + }, + compress: { + ecma: 5, + warnings: false, + comparisons: false + }, + mangle: { safari10: true }, + output: { + ecma: 5, + comments: false, + ascii_only: true + } + } + }) + ].filter(Boolean) + }, + entry: config.entrypoints, + plugins: [ + new InjectManifest({ + swSrc: "src/decidim/sw/sw.js", + + /** + * NOTE: + * @rails/webpacker outputs to '/packs', + * in order to make the SW run properly + * they must be put at the project's root folder '/' + */ + swDest: "../sw.js" + }) + ] +} diff --git a/config/webpack/webpack.config.js b/config/webpack/webpack.config.js new file mode 100644 index 0000000..0b11fe3 --- /dev/null +++ b/config/webpack/webpack.config.js @@ -0,0 +1,10 @@ +/* eslint-disable */ +process.env.NODE_ENV ??= "development" + +const { webpackConfig, merge } = require("@decidim/webpacker") +const customConfig = require("./custom") + +webpackConfig.optimization = {} +const combinedConfig = merge(webpackConfig, customConfig) + +module.exports = combinedConfig diff --git a/db/migrate/20240418105035_devise_create_decidim_users.decidim.rb b/db/migrate/20240418105035_devise_create_decidim_users.decidim.rb new file mode 100644 index 0000000..c4bdce9 --- /dev/null +++ b/db/migrate/20240418105035_devise_create_decidim_users.decidim.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20160817115213) + +class DeviseCreateDecidimUsers < ActiveRecord::Migration[5.0] + def change + create_table :decidim_users do |t| + ## Database authenticatable + t.string :email, null: false, default: "" + t.string :encrypted_password, null: false, default: "" + + ## Recoverable + t.string :reset_password_token + t.datetime :reset_password_sent_at + + ## Rememberable + t.datetime :remember_created_at + + ## Trackable + t.integer :sign_in_count, default: 0, null: false + t.datetime :current_sign_in_at + t.datetime :last_sign_in_at + t.string :current_sign_in_ip + t.string :last_sign_in_ip + + ## Confirmable + # t.string :confirmation_token + # t.datetime :confirmed_at + # t.datetime :confirmation_sent_at + # t.string :unconfirmed_email # Only if using reconfirmable + + ## Lockable + # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts + # t.string :unlock_token # Only if unlock strategy is :email or :both + # t.datetime :locked_at + + t.timestamps null: false + end + + add_index :decidim_users, :email, unique: true + add_index :decidim_users, :reset_password_token, unique: true + # add_index :decidim_users, :confirmation_token, unique: true + # add_index :decidim_users, :unlock_token, unique: true + end +end diff --git a/db/migrate/20240418105036_create_decidim_organizations.decidim.rb b/db/migrate/20240418105036_create_decidim_organizations.decidim.rb new file mode 100644 index 0000000..9b8c3ea --- /dev/null +++ b/db/migrate/20240418105036_create_decidim_organizations.decidim.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20160919104837) + +class CreateDecidimOrganizations < ActiveRecord::Migration[5.0] + def change + create_table :decidim_organizations do |t| + t.string :name, null: false + t.string :host, null: false + t.string :default_locale, null: false + t.string :available_locales, array: true, default: [] + t.jsonb :welcome_text, null: false + t.string :homepage_image + + t.timestamps + end + + add_index :decidim_organizations, :name, unique: true + add_index :decidim_organizations, :host, unique: true + end +end diff --git a/db/migrate/20240418105037_devise_invitable_add_to_decidim_users.decidim.rb b/db/migrate/20240418105037_devise_invitable_add_to_decidim_users.decidim.rb new file mode 100644 index 0000000..806ebb7 --- /dev/null +++ b/db/migrate/20240418105037_devise_invitable_add_to_decidim_users.decidim.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20160920140207) + +class DeviseInvitableAddToDecidimUsers < ActiveRecord::Migration[4.2] + def up + change_table :decidim_users do |t| + t.string :invitation_token + t.datetime :invitation_created_at + t.datetime :invitation_sent_at + t.datetime :invitation_accepted_at + t.integer :invitation_limit + t.references :invited_by, polymorphic: true + t.integer :invitations_count, default: 0 + t.index :invitations_count + t.index :invitation_token, unique: true # for invitable + t.index :invited_by_id + end + end + + def down + change_table :decidim_users do |t| + t.remove_references :invited_by, polymorphic: true + t.remove :invitations_count, :invitation_limit, :invitation_sent_at, :invitation_accepted_at, :invitation_token, :invitation_created_at + end + end +end diff --git a/db/migrate/20240418105038_user_belongs_to_organization.decidim.rb b/db/migrate/20240418105038_user_belongs_to_organization.decidim.rb new file mode 100644 index 0000000..59a71d8 --- /dev/null +++ b/db/migrate/20240418105038_user_belongs_to_organization.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20160920141039) + +class UserBelongsToOrganization < ActiveRecord::Migration[5.0] + def change + add_reference :decidim_users, :decidim_organization, index: true, foreign_key: true + end +end diff --git a/db/migrate/20240418105039_user_has_roles.decidim.rb b/db/migrate/20240418105039_user_has_roles.decidim.rb new file mode 100644 index 0000000..b849ea0 --- /dev/null +++ b/db/migrate/20240418105039_user_has_roles.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20160920141151) + +class UserHasRoles < ActiveRecord::Migration[5.0] + def change + add_column :decidim_users, :roles, :string, array: true, default: [] + end +end diff --git a/db/migrate/20240418105040_add_description_to_organizations.decidim.rb b/db/migrate/20240418105040_add_description_to_organizations.decidim.rb new file mode 100644 index 0000000..0da2c0f --- /dev/null +++ b/db/migrate/20240418105040_add_description_to_organizations.decidim.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161005153007) + +class AddDescriptionToOrganizations < ActiveRecord::Migration[5.0] + def change + change_table :decidim_organizations do |t| + t.jsonb :description + end + end +end diff --git a/db/migrate/20240418105041_add_confirmable_to_devise.decidim.rb b/db/migrate/20240418105041_add_confirmable_to_devise.decidim.rb new file mode 100644 index 0000000..bce0dd9 --- /dev/null +++ b/db/migrate/20240418105041_add_confirmable_to_devise.decidim.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161006085629) + +class AddConfirmableToDevise < ActiveRecord::Migration[5.0] + def up + add_column :decidim_users, :confirmation_token, :string + add_column :decidim_users, :confirmed_at, :datetime + add_column :decidim_users, :confirmation_sent_at, :datetime + add_column :decidim_users, :unconfirmed_email, :string + add_index :decidim_users, :confirmation_token, unique: true + execute("UPDATE decidim_users SET confirmed_at = NOW()") + end + + def down + remove_columns :decidim_users, :confirmation_token, :confirmed_at, :confirmation_sent_at + end +end diff --git a/db/migrate/20240418105042_add_name_to_users.decidim.rb b/db/migrate/20240418105042_add_name_to_users.decidim.rb new file mode 100644 index 0000000..3b5b53c --- /dev/null +++ b/db/migrate/20240418105042_add_name_to_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161010085443) + +class AddNameToUsers < ActiveRecord::Migration[5.0] + def change + add_column :decidim_users, :name, :string, null: false + end +end diff --git a/db/migrate/20240418105043_add_locale_to_users.decidim.rb b/db/migrate/20240418105043_add_locale_to_users.decidim.rb new file mode 100644 index 0000000..3a6c976 --- /dev/null +++ b/db/migrate/20240418105043_add_locale_to_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161010131544) + +class AddLocaleToUsers < ActiveRecord::Migration[5.0] + def change + add_column :decidim_users, :locale, :string + end +end diff --git a/db/migrate/20240418105044_create_decidim_authorizations.decidim.rb b/db/migrate/20240418105044_create_decidim_authorizations.decidim.rb new file mode 100644 index 0000000..0702174 --- /dev/null +++ b/db/migrate/20240418105044_create_decidim_authorizations.decidim.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161018091013) + +class CreateDecidimAuthorizations < ActiveRecord::Migration[5.0] + def change + create_table :decidim_authorizations do |t| + t.string :name, null: false + t.jsonb :metadata + t.references :decidim_user, null: false, foreign_key: true, index: true + + t.timestamps + end + + add_index :decidim_authorizations, [:decidim_user_id, :name], unique: true + end +end diff --git a/db/migrate/20240418105045_create_decidim_static_pages.decidim.rb b/db/migrate/20240418105045_create_decidim_static_pages.decidim.rb new file mode 100644 index 0000000..5cf8914 --- /dev/null +++ b/db/migrate/20240418105045_create_decidim_static_pages.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161108093802) + +class CreateDecidimStaticPages < ActiveRecord::Migration[5.0] + def change + create_table :decidim_static_pages do |t| + t.jsonb :title, null: false + t.string :slug, null: false + t.jsonb :content, null: false + t.references :decidim_organization, foreign_key: true, index: true + t.timestamps + end + end +end diff --git a/db/migrate/20240418105046_create_decidim_features.decidim.rb b/db/migrate/20240418105046_create_decidim_features.decidim.rb new file mode 100644 index 0000000..925e741 --- /dev/null +++ b/db/migrate/20240418105046_create_decidim_features.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161110105712) + +class CreateDecidimFeatures < ActiveRecord::Migration[5.0] + def change + create_table :decidim_features do |t| + t.string :manifest_name + t.jsonb :name + t.references :decidim_participatory_process, index: true + end + end +end diff --git a/db/migrate/20240418105047_add_categories.decidim.rb b/db/migrate/20240418105047_add_categories.decidim.rb new file mode 100644 index 0000000..3fd5444 --- /dev/null +++ b/db/migrate/20240418105047_add_categories.decidim.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161123085134) + +class AddCategories < ActiveRecord::Migration[5.0] + def change + create_table :decidim_categories do |t| + t.jsonb :name, null: false + t.jsonb :description, null: false + t.integer :parent_id, index: true + t.integer :decidim_participatory_process_id, index: true + end + end +end diff --git a/db/migrate/20240418105048_create_decidim_scopes.decidim.rb b/db/migrate/20240418105048_create_decidim_scopes.decidim.rb new file mode 100644 index 0000000..6d8edb5 --- /dev/null +++ b/db/migrate/20240418105048_create_decidim_scopes.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161130105257) + +class CreateDecidimScopes < ActiveRecord::Migration[5.0] + def change + create_table :decidim_scopes do |t| + t.string :name, null: false, index: :uniqueness + t.references :decidim_organization, foreign_key: true, index: true + t.timestamps + end + end +end diff --git a/db/migrate/20240418105049_make_organization_description_optional.decidim.rb b/db/migrate/20240418105049_make_organization_description_optional.decidim.rb new file mode 100644 index 0000000..31877f8 --- /dev/null +++ b/db/migrate/20240418105049_make_organization_description_optional.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161209134715) + +class MakeOrganizationDescriptionOptional < ActiveRecord::Migration[5.0] + def change + change_column :decidim_organizations, :welcome_text, :jsonb, null: true + end +end diff --git a/db/migrate/20240418105050_add_avatar_to_users.decidim.rb b/db/migrate/20240418105050_add_avatar_to_users.decidim.rb new file mode 100644 index 0000000..23aeae8 --- /dev/null +++ b/db/migrate/20240418105050_add_avatar_to_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161213094244) + +class AddAvatarToUsers < ActiveRecord::Migration[5.0] + def change + add_column :decidim_users, :avatar, :string + end +end diff --git a/db/migrate/20240418105051_add_logo_to_organizations.decidim.rb b/db/migrate/20240418105051_add_logo_to_organizations.decidim.rb new file mode 100644 index 0000000..b4dd070 --- /dev/null +++ b/db/migrate/20240418105051_add_logo_to_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20161214152811) + +class AddLogoToOrganizations < ActiveRecord::Migration[5.0] + def change + add_column :decidim_organizations, :logo, :string + end +end diff --git a/db/migrate/20240418105052_add_configuration_to_features.decidim.rb b/db/migrate/20240418105052_add_configuration_to_features.decidim.rb new file mode 100644 index 0000000..5d0760e --- /dev/null +++ b/db/migrate/20240418105052_add_configuration_to_features.decidim.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170110133113) + +class AddConfigurationToFeatures < ActiveRecord::Migration[5.0] + def change + change_table :decidim_features do |t| + t.jsonb :settings, default: {} + end + end +end diff --git a/db/migrate/20240418105053_add_handler_to_organization.decidim.rb b/db/migrate/20240418105053_add_handler_to_organization.decidim.rb new file mode 100644 index 0000000..5685965 --- /dev/null +++ b/db/migrate/20240418105053_add_handler_to_organization.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170110153807) + +class AddHandlerToOrganization < ActiveRecord::Migration[5.0] + def change + add_column :decidim_organizations, :twitter_handler, :string + end +end diff --git a/db/migrate/20240418105054_create_resource_links.decidim.rb b/db/migrate/20240418105054_create_resource_links.decidim.rb new file mode 100644 index 0000000..662bbe6 --- /dev/null +++ b/db/migrate/20240418105054_create_resource_links.decidim.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170113150627) + +class CreateResourceLinks < ActiveRecord::Migration[5.0] + def change + create_table :decidim_resource_links do |t| + t.references :from, null: false, polymorphic: true, index: true + t.references :to, null: false, polymorphic: true, index: true + t.string :name, null: false, index: true + t.jsonb :data + end + end +end diff --git a/db/migrate/20240418105055_create_identities.decidim.rb b/db/migrate/20240418105055_create_identities.decidim.rb new file mode 100644 index 0000000..af31cfc --- /dev/null +++ b/db/migrate/20240418105055_create_identities.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170116110851) + +class CreateIdentities < ActiveRecord::Migration[5.0] + def change + create_table :decidim_identities do |t| + t.string :provider, null: false + t.string :uid, null: false + t.references :decidim_user, null: false, index: true + end + + add_index :decidim_identities, [:provider, :uid], unique: true + end +end diff --git a/db/migrate/20240418105056_add_uniqueness_field_to_authorizations.decidim.rb b/db/migrate/20240418105056_add_uniqueness_field_to_authorizations.decidim.rb new file mode 100644 index 0000000..d79c18a --- /dev/null +++ b/db/migrate/20240418105056_add_uniqueness_field_to_authorizations.decidim.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170117142904) + +class AddUniquenessFieldToAuthorizations < ActiveRecord::Migration[5.0] + def change + change_table :decidim_authorizations do |t| + t.string :unique_id, null: true + end + end +end diff --git a/db/migrate/20240418105057_create_user_groups.decidim.rb b/db/migrate/20240418105057_create_user_groups.decidim.rb new file mode 100644 index 0000000..9874022 --- /dev/null +++ b/db/migrate/20240418105057_create_user_groups.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170119145359) + +class CreateUserGroups < ActiveRecord::Migration[5.0] + def change + create_table :decidim_user_groups do |t| + t.string :name, null: false + t.string :document_number, null: false + t.string :phone, null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105058_create_user_group_memberships.decidim.rb b/db/migrate/20240418105058_create_user_group_memberships.decidim.rb new file mode 100644 index 0000000..3100b9c --- /dev/null +++ b/db/migrate/20240418105058_create_user_group_memberships.decidim.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170119150255) + +class CreateUserGroupMemberships < ActiveRecord::Migration[5.0] + def change + create_table :decidim_user_group_memberships do |t| + t.references :decidim_user, null: false, index: true + t.references :decidim_user_group, null: false, index: true + + t.timestamps + end + + add_index :decidim_user_group_memberships, [:decidim_user_id, :decidim_user_group_id], unique: true, name: "decidim_user_group_memberships_unique_user_and_group_ids" + end +end diff --git a/db/migrate/20240418105059_add_show_statistics_to_organization.decidim.rb b/db/migrate/20240418105059_add_show_statistics_to_organization.decidim.rb new file mode 100644 index 0000000..14a8276 --- /dev/null +++ b/db/migrate/20240418105059_add_show_statistics_to_organization.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170119150649) + +class AddShowStatisticsToOrganization < ActiveRecord::Migration[5.0] + def change + add_column :decidim_organizations, :show_statistics, :boolean, default: true + end +end diff --git a/db/migrate/20240418105060_add_user_groups_verified.decidim.rb b/db/migrate/20240418105060_add_user_groups_verified.decidim.rb new file mode 100644 index 0000000..1974a6f --- /dev/null +++ b/db/migrate/20240418105060_add_user_groups_verified.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170120120733) + +class AddUserGroupsVerified < ActiveRecord::Migration[5.0] + def change + add_column :decidim_user_groups, :verified, :boolean, default: false + end +end diff --git a/db/migrate/20240418105061_add_avatar_to_user_groups.decidim.rb b/db/migrate/20240418105061_add_avatar_to_user_groups.decidim.rb new file mode 100644 index 0000000..c14f16e --- /dev/null +++ b/db/migrate/20240418105061_add_avatar_to_user_groups.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170123140857) + +class AddAvatarToUserGroups < ActiveRecord::Migration[5.0] + def change + add_column :decidim_user_groups, :avatar, :string + end +end diff --git a/db/migrate/20240418105062_add_weight_to_features.decidim.rb b/db/migrate/20240418105062_add_weight_to_features.decidim.rb new file mode 100644 index 0000000..d03a9b2 --- /dev/null +++ b/db/migrate/20240418105062_add_weight_to_features.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170125152026) + +class AddWeightToFeatures < ActiveRecord::Migration[5.0] + def change + add_column :decidim_features, :weight, :integer, default: 0 + end +end diff --git a/db/migrate/20240418105063_change_user_groups_verified_to_timestamp.decidim.rb b/db/migrate/20240418105063_change_user_groups_verified_to_timestamp.decidim.rb new file mode 100644 index 0000000..3b572aa --- /dev/null +++ b/db/migrate/20240418105063_change_user_groups_verified_to_timestamp.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170128112958) + +class ChangeUserGroupsVerifiedToTimestamp < ActiveRecord::Migration[5.0] + def change + ActiveRecord::Base.transaction do + add_column :decidim_user_groups, :verified_at, :datetime + execute("UPDATE decidim_user_groups SET verified_at = '#{Time.current.to_s(:db)}' WHERE verified = 't'") + remove_column :decidim_user_groups, :verified + end + end +end diff --git a/db/migrate/20240418105064_add_timestamps_to_identities.decidim.rb b/db/migrate/20240418105064_add_timestamps_to_identities.decidim.rb new file mode 100644 index 0000000..a03a12d --- /dev/null +++ b/db/migrate/20240418105064_add_timestamps_to_identities.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170128140553) + +class AddTimestampsToIdentities < ActiveRecord::Migration[5.0] + def change + add_timestamps :decidim_identities + end +end diff --git a/db/migrate/20240418105065_add_favicon_to_decidim_organizations.decidim.rb b/db/migrate/20240418105065_add_favicon_to_decidim_organizations.decidim.rb new file mode 100644 index 0000000..7ac9062 --- /dev/null +++ b/db/migrate/20240418105065_add_favicon_to_decidim_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170130132833) + +class AddFaviconToDecidimOrganizations < ActiveRecord::Migration[5.0] + def change + add_column :decidim_organizations, :favicon, :string + end +end diff --git a/db/migrate/20240418105066_add_action_permissions_to_decidim_features.decidim.rb b/db/migrate/20240418105066_add_action_permissions_to_decidim_features.decidim.rb new file mode 100644 index 0000000..715c397 --- /dev/null +++ b/db/migrate/20240418105066_add_action_permissions_to_decidim_features.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170131134349) + +class AddActionPermissionsToDecidimFeatures < ActiveRecord::Migration[5.0] + def change + add_column :decidim_features, :permissions, :jsonb + end +end diff --git a/db/migrate/20240418105067_add_comments_and_replies_notifications_to_users.decidim.rb b/db/migrate/20240418105067_add_comments_and_replies_notifications_to_users.decidim.rb new file mode 100644 index 0000000..8f57b68 --- /dev/null +++ b/db/migrate/20240418105067_add_comments_and_replies_notifications_to_users.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170202084913) + +class AddCommentsAndRepliesNotificationsToUsers < ActiveRecord::Migration[5.0] + def change + add_column :decidim_users, :comments_notifications, :boolean, null: false, default: false + add_column :decidim_users, :replies_notifications, :boolean, null: false, default: false + end +end diff --git a/db/migrate/20240418105068_add_newsletter_notifications_to_users.decidim.rb b/db/migrate/20240418105068_add_newsletter_notifications_to_users.decidim.rb new file mode 100644 index 0000000..862db08 --- /dev/null +++ b/db/migrate/20240418105068_add_newsletter_notifications_to_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170203150545) + +class AddNewsletterNotificationsToUsers < ActiveRecord::Migration[5.0] + def change + add_column :decidim_users, :newsletter_notifications, :boolean, null: false, default: false + end +end diff --git a/db/migrate/20240418105069_add_published_at_to_decidim_features.decidim.rb b/db/migrate/20240418105069_add_published_at_to_decidim_features.decidim.rb new file mode 100644 index 0000000..504538a --- /dev/null +++ b/db/migrate/20240418105069_add_published_at_to_decidim_features.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170206142116) + +class AddPublishedAtToDecidimFeatures < ActiveRecord::Migration[5.0] + def change + add_column :decidim_features, :published_at, :datetime + execute "UPDATE decidim_features SET published_at=#{quote(Time.current)}" + end +end diff --git a/db/migrate/20240418105070_add_social_media_handlers_to_organization.decidim.rb b/db/migrate/20240418105070_add_social_media_handlers_to_organization.decidim.rb new file mode 100644 index 0000000..d26d72f --- /dev/null +++ b/db/migrate/20240418105070_add_social_media_handlers_to_organization.decidim.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170207091021) + +class AddSocialMediaHandlersToOrganization < ActiveRecord::Migration[5.0] + def change + add_column :decidim_organizations, :instagram_handler, :string + add_column :decidim_organizations, :facebook_handler, :string + add_column :decidim_organizations, :youtube_handler, :string + add_column :decidim_organizations, :github_handler, :string + end +end diff --git a/db/migrate/20240418105071_add_organization_logo_and_url.decidim.rb b/db/migrate/20240418105071_add_organization_logo_and_url.decidim.rb new file mode 100644 index 0000000..74a63fe --- /dev/null +++ b/db/migrate/20240418105071_add_organization_logo_and_url.decidim.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170207093048) + +class AddOrganizationLogoAndUrl < ActiveRecord::Migration[5.0] + def change + add_column :decidim_organizations, :official_img_header, :string + add_column :decidim_organizations, :official_img_footer, :string + add_column :decidim_organizations, :official_url, :string + end +end diff --git a/db/migrate/20240418105072_create_decidim_newsletters.decidim.rb b/db/migrate/20240418105072_create_decidim_newsletters.decidim.rb new file mode 100644 index 0000000..e0b8bd4 --- /dev/null +++ b/db/migrate/20240418105072_create_decidim_newsletters.decidim.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170213081133) + +class CreateDecidimNewsletters < ActiveRecord::Migration[5.0] + def change + create_table :decidim_newsletters do |t| + t.jsonb :subject + t.jsonb :body + t.references :organization + t.references :author, foreign_key: { to_table: :decidim_users } + t.integer :total_recipients + t.integer :total_deliveries + t.datetime :sent_at + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105073_add_organization_custom_reference.decidim.rb b/db/migrate/20240418105073_add_organization_custom_reference.decidim.rb new file mode 100644 index 0000000..d4aea19 --- /dev/null +++ b/db/migrate/20240418105073_add_organization_custom_reference.decidim.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170215115407) + +class AddOrganizationCustomReference < ActiveRecord::Migration[5.0] + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + def change + add_column :decidim_organizations, :reference_prefix, :string + + Organization.find_each do |organization| + organization.update!(reference_prefix: organization.name[0]) + end + + change_column_null :decidim_organizations, :reference_prefix, false + end +end diff --git a/db/migrate/20240418105074_add_secondary_hosts_to_organizations.decidim.rb b/db/migrate/20240418105074_add_secondary_hosts_to_organizations.decidim.rb new file mode 100644 index 0000000..d9c086f --- /dev/null +++ b/db/migrate/20240418105074_add_secondary_hosts_to_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170306144354) + +class AddSecondaryHostsToOrganizations < ActiveRecord::Migration[5.0] + def change + add_column :decidim_organizations, :secondary_hosts, :string, array: true, default: [], index: true + end +end diff --git a/db/migrate/20240418105075_create_reports.decidim.rb b/db/migrate/20240418105075_create_reports.decidim.rb new file mode 100644 index 0000000..ce06310 --- /dev/null +++ b/db/migrate/20240418105075_create_reports.decidim.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170307084957) + +class CreateReports < ActiveRecord::Migration[5.0] + def change + create_table :decidim_reports do |t| + t.references :decidim_moderation, null: false, index: { name: "decidim_reports_moderation" } + t.references :decidim_user, null: false, index: { name: "decidim_reports_user" } + + t.string :reason, null: false + t.text :details + + t.timestamps + end + + add_index :decidim_reports, [:decidim_moderation_id, :decidim_user_id], unique: true, name: "decidim_reports_moderation_user_unique" + end +end diff --git a/db/migrate/20240418105076_create_moderations.decidim.rb b/db/migrate/20240418105076_create_moderations.decidim.rb new file mode 100644 index 0000000..0cfdcc4 --- /dev/null +++ b/db/migrate/20240418105076_create_moderations.decidim.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170308091316) + +class CreateModerations < ActiveRecord::Migration[5.0] + def change + create_table :decidim_moderations do |t| + t.references :decidim_participatory_process, null: false, index: { name: "decidim_moderations_participatory_process" } + t.references :decidim_reportable, null: false, polymorphic: true, index: { unique: true, name: "decidim_moderations_reportable" } + t.integer :report_count, null: false, default: 0, index: { name: "decidim_moderations_report_count" } + t.datetime :hidden_at, index: { name: "decidim_moderations_hidden_at" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105077_add_available_authorizations_to_organization.decidim.rb b/db/migrate/20240418105077_add_available_authorizations_to_organization.decidim.rb new file mode 100644 index 0000000..f29bc41 --- /dev/null +++ b/db/migrate/20240418105077_add_available_authorizations_to_organization.decidim.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170313095436) + +class AddAvailableAuthorizationsToOrganization < ActiveRecord::Migration[5.0] + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + def change + add_column :decidim_organizations, :available_authorizations, :string, array: true, default: [] + + workflows = Decidim::Verifications.workflows.map(&:name) + Organization.find_each do |org| + org.update!(available_authorizations: workflows) + end + end +end diff --git a/db/migrate/20240418105078_change_decidim_user_email_index_uniqueness.decidim.rb b/db/migrate/20240418105078_change_decidim_user_email_index_uniqueness.decidim.rb new file mode 100644 index 0000000..30ff3ca --- /dev/null +++ b/db/migrate/20240418105078_change_decidim_user_email_index_uniqueness.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170405091801) + +class ChangeDecidimUserEmailIndexUniqueness < ActiveRecord::Migration[5.0] + def change + remove_index :decidim_users, :email + add_index :decidim_users, [:email, :decidim_organization_id], unique: true + end +end diff --git a/db/migrate/20240418105079_add_organization_to_identities.decidim.rb b/db/migrate/20240418105079_add_organization_to_identities.decidim.rb new file mode 100644 index 0000000..47b35d6 --- /dev/null +++ b/db/migrate/20240418105079_add_organization_to_identities.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170405094028) + +class AddOrganizationToIdentities < ActiveRecord::Migration[5.0] + def change + add_reference :decidim_identities, :decidim_organization, index: true, foreign_key: true + end +end diff --git a/db/migrate/20240418105080_change_decidim_identities_provider_uid_index_uniqueness.decidim.rb b/db/migrate/20240418105080_change_decidim_identities_provider_uid_index_uniqueness.decidim.rb new file mode 100644 index 0000000..21c884a --- /dev/null +++ b/db/migrate/20240418105080_change_decidim_identities_provider_uid_index_uniqueness.decidim.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170405094258) + +class ChangeDecidimIdentitiesProviderUidIndexUniqueness < ActiveRecord::Migration[5.0] + def change + remove_index :decidim_identities, [:provider, :uid] + add_index :decidim_identities, [:provider, :uid, :decidim_organization_id], unique: true, + name: "decidim_identities_provider_uid_organization_unique" + + Decidim::Identity.includes(:user).find_each do |identity| + identity.organization = identity.user.organization + identity.save! + end + end +end diff --git a/db/migrate/20240418105081_add_rejected_at_to_user_groups.decidim.rb b/db/migrate/20240418105081_add_rejected_at_to_user_groups.decidim.rb new file mode 100644 index 0000000..d3d816c --- /dev/null +++ b/db/migrate/20240418105081_add_rejected_at_to_user_groups.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170529150743) + +class AddRejectedAtToUserGroups < ActiveRecord::Migration[5.0] + def change + add_column :decidim_user_groups, :rejected_at, :datetime + end +end diff --git a/db/migrate/20240418105082_add_deleted_fields_to_users.decidim.rb b/db/migrate/20240418105082_add_deleted_fields_to_users.decidim.rb new file mode 100644 index 0000000..a6ecdc0 --- /dev/null +++ b/db/migrate/20240418105082_add_deleted_fields_to_users.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170605140421) + +class AddDeletedFieldsToUsers < ActiveRecord::Migration[5.0] + def change + add_column :decidim_users, :delete_reason, :text + add_column :decidim_users, :deleted_at, :datetime + end +end diff --git a/db/migrate/20240418105083_add_hierarchy_to_scopes.decidim.rb b/db/migrate/20240418105083_add_hierarchy_to_scopes.decidim.rb new file mode 100644 index 0000000..bf83157 --- /dev/null +++ b/db/migrate/20240418105083_add_hierarchy_to_scopes.decidim.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170605162500) + +class AddHierarchyToScopes < ActiveRecord::Migration[5.0] + class Scope < ApplicationRecord + self.table_name = :decidim_scopes + end + + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + def self.up + # schema migration + create_table :decidim_scope_types do |t| + t.references :decidim_organization, foreign_key: true, index: true + t.jsonb :name, null: false + t.jsonb :plural, null: false + end + + # retrieve current data + current_data = Scope.select(:id, :name, :decidim_organization_id).as_json + + change_table :decidim_scopes do |t| + t.remove_index :name + t.remove :name + t.jsonb :name + t.references :scope_type, foreign_key: { to_table: :decidim_scope_types }, index: true + t.references :parent, foreign_key: { to_table: :decidim_scopes } + t.string :code + t.integer :part_of, array: true, default: [], null: false + t.index :part_of, using: "gin" + end + + current_data.each do |s| + locales = Organization.find(s["decidim_organization_id"]).available_locales + name = s["name"].gsub(/'/, "''") + execute(" + UPDATE decidim_scopes + SET name = '#{locales.index_with { name }.to_json}', + code = #{quote(s["id"])} + WHERE id = #{s["id"]} + ") + end + + change_column_null :decidim_scopes, :name, false + change_column_null :decidim_scopes, :code, false + add_index :decidim_scopes, [:decidim_organization_id, :code], unique: true + end + + def self.down + # schema migration + change_table :decidim_scopes do |t| + t.remove_index [:decidim_organization_id, :code] + t.change :name, :string, null: false, index: :uniqueness + t.remove :scope_type_id, :parent_id, :code, :part_of + end + add_index :decidim_scopes, :name, unique: true + drop_table :decidim_scope_types + + # post migration data fixes + Scope.select(:id, :name).as_json.each do |s| + name = quote(JSON.parse(s["name"]).values.first) + execute(" + UPDATE decidim_scopes + SET name = #{name} + WHERE id = #{s["id"]} + ") + end + end +end diff --git a/db/migrate/20240418105084_set_email_unique_in_organization_conditional.decidim.rb b/db/migrate/20240418105084_set_email_unique_in_organization_conditional.decidim.rb new file mode 100644 index 0000000..7388ce7 --- /dev/null +++ b/db/migrate/20240418105084_set_email_unique_in_organization_conditional.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170606102659) + +class SetEmailUniqueInOrganizationConditional < ActiveRecord::Migration[5.0] + def change + remove_index :decidim_users, %w(email decidim_organization_id) + add_index :decidim_users, %w(email decidim_organization_id), where: "(deleted_at IS NULL)", name: "index_decidim_users_on_email_and_decidim_organization_id", unique: true + end +end diff --git a/db/migrate/20240418105085_add_organization_to_user_groups.decidim.rb b/db/migrate/20240418105085_add_organization_to_user_groups.decidim.rb new file mode 100644 index 0000000..0c244f6 --- /dev/null +++ b/db/migrate/20240418105085_add_organization_to_user_groups.decidim.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170608142521) + +class AddOrganizationToUserGroups < ActiveRecord::Migration[5.0] + class UserGroup < ApplicationRecord + self.table_name = :decidim_user_groups + end + + def change + add_column :decidim_user_groups, :decidim_organization_id, :integer + + UserGroup.find_each do |user_group| + execute <<~SQL.squish + UPDATE decidim_user_groups + SET decidim_organization_id = ( + SELECT MIN(u.decidim_organization_id) + FROM decidim_users u + INNER JOIN decidim_user_group_memberships m + ON u.id = m.decidim_user_id + WHERE m.decidim_user_group_id = #{user_group.id} + ) + WHERE id = #{user_group.id} + SQL + end + + change_column :decidim_user_groups, :decidim_organization_id, :integer, null: false + end +end diff --git a/db/migrate/20240418105086_add_uniqueness_to_name_and_document_number_to_user_groups.decidim.rb b/db/migrate/20240418105086_add_uniqueness_to_name_and_document_number_to_user_groups.decidim.rb new file mode 100644 index 0000000..dbbc219 --- /dev/null +++ b/db/migrate/20240418105086_add_uniqueness_to_name_and_document_number_to_user_groups.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170612070905) + +class AddUniquenessToNameAndDocumentNumberToUserGroups < ActiveRecord::Migration[5.0] + def change + add_index :decidim_user_groups, [:decidim_organization_id, :name], unique: true, name: "index_decidim_user_groups_names_on_organization_id" + add_index :decidim_user_groups, [:decidim_organization_id, :document_number], unique: true, name: "index_decidim_user_groups_document_number_on_organization_id" + end +end diff --git a/db/migrate/20240418105087_create_decidim_categorizations.decidim.rb b/db/migrate/20240418105087_create_decidim_categorizations.decidim.rb new file mode 100644 index 0000000..1752851 --- /dev/null +++ b/db/migrate/20240418105087_create_decidim_categorizations.decidim.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170612100253) + +class CreateDecidimCategorizations < ActiveRecord::Migration[5.1] + def change + create_table :decidim_categorizations do |t| + t.references :decidim_category, foreign_key: true, null: false + t.references :categorizable, polymorphic: true, null: false, index: { name: "decidim_categorizations_categorizable_id_and_type" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105088_add_admin_to_users.decidim.rb b/db/migrate/20240418105088_add_admin_to_users.decidim.rb new file mode 100644 index 0000000..1f77999 --- /dev/null +++ b/db/migrate/20240418105088_add_admin_to_users.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170713131206) + +class AddAdminToUsers < ActiveRecord::Migration[5.1] + def up + add_column :decidim_users, :admin, :boolean, null: false, default: false + + execute <<~SQL.squish + UPDATE decidim_users + SET admin = true + WHERE roles @> '{admin}' + SQL + end +end diff --git a/db/migrate/20240418105089_migrate_user_roles_to_participatory_process_roles.decidim.rb b/db/migrate/20240418105089_migrate_user_roles_to_participatory_process_roles.decidim.rb new file mode 100644 index 0000000..9f3feba --- /dev/null +++ b/db/migrate/20240418105089_migrate_user_roles_to_participatory_process_roles.decidim.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170713131308) + +class MigrateUserRolesToParticipatoryProcessRoles < ActiveRecord::Migration[5.1] + class ParticipatoryProcess < ApplicationRecord + self.table_name = :decidim_participatory_processes + end + + class User < ApplicationRecord + self.table_name = :decidim_users + end + + def up + User.find_each do |user| + next if user.roles.empty? || user.roles.include?("admin") + + values = processes(user).flat_map do |process| + user.roles.map do |role| + "(#{user.id}, #{process.id}, '#{role}', NOW(), NOW())" + end + end + + execute(" + INSERT INTO decidim_admin_participatory_process_user_roles + (decidim_user_id, decidim_participatory_process_id, role, created_at, updated_at) + VALUES #{values.join(", ")} + ") + end + remove_column :decidim_users, :roles + end + + private + + def processes(user) + ParticipatoryProcess.where(decidim_organization_id: user.decidim_organization_id) + end +end diff --git a/db/migrate/20240418105090_make_moderations_polymorphic.decidim.rb b/db/migrate/20240418105090_make_moderations_polymorphic.decidim.rb new file mode 100644 index 0000000..81ca188 --- /dev/null +++ b/db/migrate/20240418105090_make_moderations_polymorphic.decidim.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170720120231) + +class MakeModerationsPolymorphic < ActiveRecord::Migration[5.1] + def change + remove_index :decidim_moderations, + name: "decidim_moderations_participatory_process" + + add_column :decidim_moderations, :decidim_participatory_space_type, :string + + reversible do |direction| + direction.up do + execute <<~SQL.squish + UPDATE decidim_moderations + SET decidim_participatory_space_type = 'Decidim::ParticipatoryProcess' + SQL + end + end + + rename_column :decidim_moderations, + :decidim_participatory_process_id, + :decidim_participatory_space_id + + add_index :decidim_moderations, + [:decidim_participatory_space_id, :decidim_participatory_space_type], + name: "decidim_moderations_participatory_space" + + change_column_null :decidim_moderations, :decidim_participatory_space_type, false + end +end diff --git a/db/migrate/20240418105091_add_managed_to_users.decidim.rb b/db/migrate/20240418105091_add_managed_to_users.decidim.rb new file mode 100644 index 0000000..29aaf23 --- /dev/null +++ b/db/migrate/20240418105091_add_managed_to_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170720135441) + +class AddManagedToUsers < ActiveRecord::Migration[5.1] + def change + add_column :decidim_users, :managed, :boolean, null: false, default: false + end +end diff --git a/db/migrate/20240418105092_set_email_unique_in_organization_condition_for_managed_users.decidim.rb b/db/migrate/20240418105092_set_email_unique_in_organization_condition_for_managed_users.decidim.rb new file mode 100644 index 0000000..a4f1ee9 --- /dev/null +++ b/db/migrate/20240418105092_set_email_unique_in_organization_condition_for_managed_users.decidim.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170720140610) + +class SetEmailUniqueInOrganizationConditionForManagedUsers < ActiveRecord::Migration[5.1] + def change + remove_index :decidim_users, %w(email decidim_organization_id) + add_index :decidim_users, + %w(email decidim_organization_id), + where: "(deleted_at IS NULL) AND (managed = 'f')", + name: "index_decidim_users_on_email_and_decidim_organization_id", + unique: true + end +end diff --git a/db/migrate/20240418105093_create_impersonation_logs.decidim.rb b/db/migrate/20240418105093_create_impersonation_logs.decidim.rb new file mode 100644 index 0000000..f57e9b2 --- /dev/null +++ b/db/migrate/20240418105093_create_impersonation_logs.decidim.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170724130558) + +class CreateImpersonationLogs < ActiveRecord::Migration[5.1] + def change + create_table :decidim_impersonation_logs do |t| + t.references :decidim_admin, index: true + t.references :decidim_user, index: true + t.datetime :started_at + t.datetime :ended_at + t.datetime :expired_at + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105094_make_categories_polymorphic.decidim.rb b/db/migrate/20240418105094_make_categories_polymorphic.decidim.rb new file mode 100644 index 0000000..f7702fd --- /dev/null +++ b/db/migrate/20240418105094_make_categories_polymorphic.decidim.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170726145242) + +class MakeCategoriesPolymorphic < ActiveRecord::Migration[5.1] + def change + remove_index :decidim_categories, + name: "index_decidim_categories_on_decidim_participatory_process_id" + + add_column :decidim_categories, :decidim_participatory_space_type, :string + + reversible do |direction| + direction.up do + execute <<~SQL.squish + UPDATE decidim_categories + SET decidim_participatory_space_type = 'Decidim::ParticipatoryProcess' + SQL + end + end + + rename_column :decidim_categories, + :decidim_participatory_process_id, + :decidim_participatory_space_id + + add_index :decidim_categories, + [:decidim_participatory_space_id, :decidim_participatory_space_type], + name: "index_decidim_categories_on_decidim_participatory_space" + end +end diff --git a/db/migrate/20240418105095_add_roles_to_users.decidim.rb b/db/migrate/20240418105095_add_roles_to_users.decidim.rb new file mode 100644 index 0000000..699d2f6 --- /dev/null +++ b/db/migrate/20240418105095_add_roles_to_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170727125445) + +class AddRolesToUsers < ActiveRecord::Migration[5.1] + def change + add_column :decidim_users, :roles, :string, array: true, default: [] + end +end diff --git a/db/migrate/20240418105096_create_decidim_follows.decidim.rb b/db/migrate/20240418105096_create_decidim_follows.decidim.rb new file mode 100644 index 0000000..5ab9f5e --- /dev/null +++ b/db/migrate/20240418105096_create_decidim_follows.decidim.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170807123535) + +class CreateDecidimFollows < ActiveRecord::Migration[5.1] + def change + create_table :decidim_follows do |t| + t.references :decidim_user, null: false + t.references :decidim_followable, polymorphic: true, index: false + t.timestamps + end + + add_index :decidim_follows, + [:decidim_user_id, :decidim_followable_id, :decidim_followable_type], + unique: true, + name: "index_uniq_on_follows_user_and_followable" + add_index :decidim_follows, + [:decidim_followable_id, :decidim_followable_type], + unique: true, + name: "index_uniq_on_followable" + end +end diff --git a/db/migrate/20240418105097_create_decidim_notifications.decidim.rb b/db/migrate/20240418105097_create_decidim_notifications.decidim.rb new file mode 100644 index 0000000..1764faa --- /dev/null +++ b/db/migrate/20240418105097_create_decidim_notifications.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170808071019) + +class CreateDecidimNotifications < ActiveRecord::Migration[5.1] + def change + create_table :decidim_notifications do |t| + t.references :decidim_user, null: false + t.references :decidim_resource, polymorphic: true, index: false, null: false + t.string :event_name, null: false + t.string :event_class, null: false + t.timestamps + end + end +end diff --git a/db/migrate/20240418105098_add_extra_to_notifications.decidim.rb b/db/migrate/20240418105098_add_extra_to_notifications.decidim.rb new file mode 100644 index 0000000..26bdbc3 --- /dev/null +++ b/db/migrate/20240418105098_add_extra_to_notifications.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170906091718) + +class AddExtraToNotifications < ActiveRecord::Migration[5.1] + def change + add_column :decidim_notifications, :extra, :jsonb + end +end diff --git a/db/migrate/20240418105099_add_emails_on_notifications_flag_to_user.decidim.rb b/db/migrate/20240418105099_add_emails_on_notifications_flag_to_user.decidim.rb new file mode 100644 index 0000000..03e1eef --- /dev/null +++ b/db/migrate/20240418105099_add_emails_on_notifications_flag_to_user.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170912082054) + +class AddEmailsOnNotificationsFlagToUser < ActiveRecord::Migration[5.1] + def change + add_column :decidim_users, :email_on_notification, :boolean, default: false, null: false + end +end diff --git a/db/migrate/20240418105100_add_header_snippets_to_organizations.decidim.rb b/db/migrate/20240418105100_add_header_snippets_to_organizations.decidim.rb new file mode 100644 index 0000000..260b843 --- /dev/null +++ b/db/migrate/20240418105100_add_header_snippets_to_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170913092351) + +class AddHeaderSnippetsToOrganizations < ActiveRecord::Migration[5.1] + def change + add_column :decidim_organizations, :header_snippets, :text + end +end diff --git a/db/migrate/20240418105101_remove_followable_index_from_follows.decidim.rb b/db/migrate/20240418105101_remove_followable_index_from_follows.decidim.rb new file mode 100644 index 0000000..1c87300 --- /dev/null +++ b/db/migrate/20240418105101_remove_followable_index_from_follows.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170914075721) + +class RemoveFollowableIndexFromFollows < ActiveRecord::Migration[5.1] + def change + remove_index :decidim_follows, [:decidim_followable_id, :decidim_followable_type] + end +end diff --git a/db/migrate/20240418105102_remove_comment_and_replies_notifications_from_users.decidim.rb b/db/migrate/20240418105102_remove_comment_and_replies_notifications_from_users.decidim.rb new file mode 100644 index 0000000..2e3becc --- /dev/null +++ b/db/migrate/20240418105102_remove_comment_and_replies_notifications_from_users.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170914092116) + +class RemoveCommentAndRepliesNotificationsFromUsers < ActiveRecord::Migration[5.1] + def change + remove_column :decidim_users, :comments_notifications + remove_column :decidim_users, :replies_notifications + end +end diff --git a/db/migrate/20240418105103_add_status_to_authorizations.decidim.rb b/db/migrate/20240418105103_add_status_to_authorizations.decidim.rb new file mode 100644 index 0000000..0d3ffce --- /dev/null +++ b/db/migrate/20240418105103_add_status_to_authorizations.decidim.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20170914092117) + +class AddStatusToAuthorizations < ActiveRecord::Migration[5.1] + def change + add_column :decidim_authorizations, :granted_at, :datetime + + execute "UPDATE decidim_authorizations SET granted_at = updated_at" + end +end diff --git a/db/migrate/20240418105104_add_verification_metadata_to_authorizations.decidim.rb b/db/migrate/20240418105104_add_verification_metadata_to_authorizations.decidim.rb new file mode 100644 index 0000000..d7500e2 --- /dev/null +++ b/db/migrate/20240418105104_add_verification_metadata_to_authorizations.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20171011194251) + +class AddVerificationMetadataToAuthorizations < ActiveRecord::Migration[5.1] + def up + add_column :decidim_authorizations, :verification_metadata, :jsonb, default: {} + end + + def down + remove_column :decidim_authorizations, :verification_metadata + end +end diff --git a/db/migrate/20240418105105_add_verification_attachment_to_authorizations.decidim.rb b/db/migrate/20240418105105_add_verification_attachment_to_authorizations.decidim.rb new file mode 100644 index 0000000..cc928ff --- /dev/null +++ b/db/migrate/20240418105105_add_verification_attachment_to_authorizations.decidim.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20171013124505) + +class AddVerificationAttachmentToAuthorizations < ActiveRecord::Migration[5.1] + def change + change_table :decidim_authorizations do |t| + t.string :verification_attachment + end + end +end diff --git a/db/migrate/20240418105106_add_cta_button_url_and_text_to_organization.decidim.rb b/db/migrate/20240418105106_add_cta_button_url_and_text_to_organization.decidim.rb new file mode 100644 index 0000000..407c14c --- /dev/null +++ b/db/migrate/20240418105106_add_cta_button_url_and_text_to_organization.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20171017084546) + +class AddCtaButtonUrlAndTextToOrganization < ActiveRecord::Migration[5.1] + def change + add_column :decidim_organizations, :cta_button_text, :jsonb + add_column :decidim_organizations, :cta_button_path, :string + end +end diff --git a/db/migrate/20240418105107_create_decidim_messaging.decidim.rb b/db/migrate/20240418105107_create_decidim_messaging.decidim.rb new file mode 100644 index 0000000..3e33192 --- /dev/null +++ b/db/migrate/20240418105107_create_decidim_messaging.decidim.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20171023123330) + +class CreateDecidimMessaging < ActiveRecord::Migration[5.1] + def change + create_table :decidim_messaging_conversations, &:timestamps + + create_table :decidim_messaging_participations do |t| + t.references :decidim_conversation, null: false, index: { name: "index_conversation_participations_on_conversation_id" } + t.references :decidim_participant, null: false, index: { name: "index_conversation_participations_on_participant_id" } + + t.timestamps + end + + create_table :decidim_messaging_messages do |t| + t.references :decidim_conversation, null: false + t.references :decidim_sender, null: false + + t.text :body, null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105108_create_versions.decidim.rb b/db/migrate/20240418105108_create_versions.decidim.rb new file mode 100644 index 0000000..dc09b02 --- /dev/null +++ b/db/migrate/20240418105108_create_versions.decidim.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20171107103253) + +# This migration creates the `versions` table, the only schema PT requires. +# All other migrations PT provides are optional. +class CreateVersions < ActiveRecord::Migration[5.1] + def change + create_table :versions do |t| + t.string :item_type, null: false + t.integer :item_id, null: false + t.string :event, null: false + t.string :whodunnit + t.jsonb :object + + t.datetime :created_at + end + add_index :versions, [:item_type, :item_id] + end +end diff --git a/db/migrate/20240418105109_add_object_changes_to_versions.decidim.rb b/db/migrate/20240418105109_add_object_changes_to_versions.decidim.rb new file mode 100644 index 0000000..5112590 --- /dev/null +++ b/db/migrate/20240418105109_add_object_changes_to_versions.decidim.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20171107103254) + +# This migration adds the optional `object_changes` column, in which PaperTrail +# will store the `changes` diff for each update event. See the readme for +# details. +class AddObjectChangesToVersions < ActiveRecord::Migration[5.1] + # The largest text column available in all supported RDBMS. + # See `create_versions.rb` for details. + TEXT_BYTES = 1_073_741_823 + + def change + add_column :versions, :object_changes, :text, limit: TEXT_BYTES + end +end diff --git a/db/migrate/20240418105110_create_decidim_receipts.decidim.rb b/db/migrate/20240418105110_create_decidim_receipts.decidim.rb new file mode 100644 index 0000000..97a22fc --- /dev/null +++ b/db/migrate/20240418105110_create_decidim_receipts.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20171117100533) + +class CreateDecidimReceipts < ActiveRecord::Migration[5.1] + def change + create_table :decidim_messaging_receipts do |t| + t.references :decidim_message, null: false + t.references :decidim_recipient, null: false + t.datetime :read_at + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105111_create_decidim_attachment_collections.decidim.rb b/db/migrate/20240418105111_create_decidim_attachment_collections.decidim.rb new file mode 100644 index 0000000..907c064 --- /dev/null +++ b/db/migrate/20240418105111_create_decidim_attachment_collections.decidim.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20171207182729) + +class CreateDecidimAttachmentCollections < ActiveRecord::Migration[5.1] + def change + create_table :decidim_attachment_collections do |t| + t.jsonb :name, null: false + t.jsonb :description, null: false + t.integer :weight, null: false, default: 0 + t.references :collection_for, polymorphic: true, null: false, index: { name: "decidim_attachment_collections_collection_for_id_and_type" } + end + end +end diff --git a/db/migrate/20240418105112_create_unique_nicknames.decidim.rb b/db/migrate/20240418105112_create_unique_nicknames.decidim.rb new file mode 100644 index 0000000..4bbd21a --- /dev/null +++ b/db/migrate/20240418105112_create_unique_nicknames.decidim.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20171212103803) + +class CreateUniqueNicknames < ActiveRecord::Migration[5.1] + class User < ApplicationRecord + include Decidim::Nicknamizable + + self.table_name = :decidim_users + end + + def up + add_column :decidim_users, :nickname, :string, limit: 20 + + User.where.not(name: nil).find_each do |user| + user.update!(nickname: UserBaseEntity.nicknamize(user.name, decidim_organization_id: user.decidim_organization_id)) + end + + add_index :decidim_users, + %w(nickname decidim_organization_id), + where: "(deleted_at IS NULL) AND (managed = 'f')", + name: "index_decidim_users_on_nickame_and_decidim_organization_id", + unique: true + end + + def down + remove_index :decidim_users, %w(nickname decidim_organization_id) + + remove_column :decidim_users, :nickname + end +end diff --git a/db/migrate/20240418105113_extend_user_profile.decidim.rb b/db/migrate/20240418105113_extend_user_profile.decidim.rb new file mode 100644 index 0000000..0fc6dca --- /dev/null +++ b/db/migrate/20240418105113_extend_user_profile.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180115090038) + +class ExtendUserProfile < ActiveRecord::Migration[5.1] + def change + add_column :decidim_users, :personal_url, :string + add_column :decidim_users, :about, :text + end +end diff --git a/db/migrate/20240418105114_add_enable_omnipresent_banner_to_decidim_organizations.decidim.rb b/db/migrate/20240418105114_add_enable_omnipresent_banner_to_decidim_organizations.decidim.rb new file mode 100644 index 0000000..c355a33 --- /dev/null +++ b/db/migrate/20240418105114_add_enable_omnipresent_banner_to_decidim_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180123125308) + +class AddEnableOmnipresentBannerToDecidimOrganizations < ActiveRecord::Migration[5.1] + def change + add_column :decidim_organizations, :enable_omnipresent_banner, :boolean, null: false, default: false + end +end diff --git a/db/migrate/20240418105115_add_omnipresent_banner_title_to_decidim_organizations.decidim.rb b/db/migrate/20240418105115_add_omnipresent_banner_title_to_decidim_organizations.decidim.rb new file mode 100644 index 0000000..a433b6d --- /dev/null +++ b/db/migrate/20240418105115_add_omnipresent_banner_title_to_decidim_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180123125409) + +class AddOmnipresentBannerTitleToDecidimOrganizations < ActiveRecord::Migration[5.1] + def change + add_column :decidim_organizations, :omnipresent_banner_title, :jsonb + end +end diff --git a/db/migrate/20240418105116_add_omnipresent_banner_short_description_to_decidim_organizations.decidim.rb b/db/migrate/20240418105116_add_omnipresent_banner_short_description_to_decidim_organizations.decidim.rb new file mode 100644 index 0000000..270082e --- /dev/null +++ b/db/migrate/20240418105116_add_omnipresent_banner_short_description_to_decidim_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180123125432) + +class AddOmnipresentBannerShortDescriptionToDecidimOrganizations < ActiveRecord::Migration[5.1] + def change + add_column :decidim_organizations, :omnipresent_banner_short_description, :jsonb + end +end diff --git a/db/migrate/20240418105117_add_omnipresent_banner_url_to_decidim_organizations.decidim.rb b/db/migrate/20240418105117_add_omnipresent_banner_url_to_decidim_organizations.decidim.rb new file mode 100644 index 0000000..6e79fce --- /dev/null +++ b/db/migrate/20240418105117_add_omnipresent_banner_url_to_decidim_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180123125452) + +class AddOmnipresentBannerUrlToDecidimOrganizations < ActiveRecord::Migration[5.1] + def change + add_column :decidim_organizations, :omnipresent_banner_url, :string + end +end diff --git a/db/migrate/20240418105118_add_highlighted_content_banner_to_decidim_organizations.decidim.rb b/db/migrate/20240418105118_add_highlighted_content_banner_to_decidim_organizations.decidim.rb new file mode 100644 index 0000000..a253de8 --- /dev/null +++ b/db/migrate/20240418105118_add_highlighted_content_banner_to_decidim_organizations.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180125063433) + +class AddHighlightedContentBannerToDecidimOrganizations < ActiveRecord::Migration[5.1] + def change + add_column :decidim_organizations, :highlighted_content_banner_enabled, :boolean, null: false, default: false + add_column :decidim_organizations, :highlighted_content_banner_title, :jsonb + add_column :decidim_organizations, :highlighted_content_banner_short_description, :jsonb + add_column :decidim_organizations, :highlighted_content_banner_action_title, :jsonb + add_column :decidim_organizations, :highlighted_content_banner_action_subtitle, :jsonb + add_column :decidim_organizations, :highlighted_content_banner_action_url, :string + add_column :decidim_organizations, :highlighted_content_banner_image, :string + end +end diff --git a/db/migrate/20240418105119_add_action_log.decidim.rb b/db/migrate/20240418105119_add_action_log.decidim.rb new file mode 100644 index 0000000..5f2ffa1 --- /dev/null +++ b/db/migrate/20240418105119_add_action_log.decidim.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180130093153) + +class AddActionLog < ActiveRecord::Migration[5.1] + def change + create_table :decidim_action_logs do |t| + t.references :decidim_organization, null: false, index: { name: "index_action_logs_on_organization_id" } + t.references :decidim_user, null: false, index: { name: "index_action_logs_on_user_id" } + t.references :decidim_feature, index: { name: "index_action_logs_on_feature_id" } + t.references :resource, polymorphic: true, null: false, index: { name: "index_action_logs_on_resource_type_and_id" } + t.references :participatory_space, polymorphic: true, index: { name: "index_action_logs_on_space_type_and_id" } + t.string :action, null: false + t.jsonb :extra + + t.timestamps + end + add_index :decidim_action_logs, :created_at + end +end diff --git a/db/migrate/20240418105120_fix_reference_for_all_resources.decidim.rb b/db/migrate/20240418105120_fix_reference_for_all_resources.decidim.rb new file mode 100644 index 0000000..ad0dd85 --- /dev/null +++ b/db/migrate/20240418105120_fix_reference_for_all_resources.decidim.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180206143340) + +class FixReferenceForAllResources < ActiveRecord::Migration[5.1] + def up + models = ActiveRecord::Base.descendants.select { |c| c.included_modules.include?(Decidim::HasReference) } + + models.each do |model| + next unless model.table_exists? + + model.find_each(&:touch) + end + end + + def down; end +end diff --git a/db/migrate/20240418105121_create_participatory_space_private_users.decidim.rb b/db/migrate/20240418105121_create_participatory_space_private_users.decidim.rb new file mode 100644 index 0000000..87ee7b2 --- /dev/null +++ b/db/migrate/20240418105121_create_participatory_space_private_users.decidim.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180206183235) + +class CreateParticipatorySpacePrivateUsers < ActiveRecord::Migration[5.1] + def change + create_table :decidim_participatory_space_private_users do |t| + t.references :decidim_user, index: { name: "index_decidim_spaces_users_on_private_user_id" } + t.integer :privatable_to_id + t.string :privatable_to_type + + t.timestamps + end + + add_index(:decidim_participatory_space_private_users, [:privatable_to_type, :privatable_to_id], name: "space_privatable_to_privatable_id") + end +end diff --git a/db/migrate/20240418105122_create_decidim_searchable_resource.decidim.rb b/db/migrate/20240418105122_create_decidim_searchable_resource.decidim.rb new file mode 100644 index 0000000..5e91779 --- /dev/null +++ b/db/migrate/20240418105122_create_decidim_searchable_resource.decidim.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180209122819) + +class CreateDecidimSearchableResource < ActiveRecord::Migration[5.1] + def change + create_table :decidim_searchable_resources do |t| + t.text :content_a + t.text :content_b + t.text :content_c + t.text :content_d + t.string :locale, null: false + t.datetime :datetime + + t.belongs_to :decidim_scope + t.belongs_to :decidim_participatory_space, polymorphic: true, index: { name: "index_decidim_searchable_resource_on_pspace_type_and_pspace_id" } + t.belongs_to :decidim_organization + + t.belongs_to :resource, polymorphic: true, index: { name: "index_decidim_searchable_rsrcs_on_s_type_and_s_id" } + t.timestamps null: false + end + end +end diff --git a/db/migrate/20240418105123_create_decidim_area_types.decidim.rb b/db/migrate/20240418105123_create_decidim_area_types.decidim.rb new file mode 100644 index 0000000..f299d7c --- /dev/null +++ b/db/migrate/20240418105123_create_decidim_area_types.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180215104821) + +class CreateDecidimAreaTypes < ActiveRecord::Migration[5.1] + def change + create_table :decidim_area_types do |t| + t.references :decidim_organization, foreign_key: true, index: true + t.jsonb :name, null: false + t.jsonb :plural, null: false + end + end +end diff --git a/db/migrate/20240418105124_create_decidim_areas.decidim.rb b/db/migrate/20240418105124_create_decidim_areas.decidim.rb new file mode 100644 index 0000000..baf659f --- /dev/null +++ b/db/migrate/20240418105124_create_decidim_areas.decidim.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180215104945) + +class CreateDecidimAreas < ActiveRecord::Migration[5.1] + def change + create_table :decidim_areas do |t| + t.jsonb :name + t.references :area_type, foreign_key: { to_table: :decidim_area_types }, index: true + t.references :decidim_organization, foreign_key: true, index: true + t.timestamps + end + end +end diff --git a/db/migrate/20240418105125_fix_nickname_index.decidim.rb b/db/migrate/20240418105125_fix_nickname_index.decidim.rb new file mode 100644 index 0000000..131c476 --- /dev/null +++ b/db/migrate/20240418105125_fix_nickname_index.decidim.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180221101934) + +class FixNicknameIndex < ActiveRecord::Migration[5.1] + class User < ApplicationRecord + self.table_name = :decidim_users + + include Decidim::Nicknamizable + end + + def change + User.where(nickname: nil) + .where(deleted_at: nil) + .where(managed: false) + .find_each { |u| u.update(nickname: UserBaseEntity.nicknamize(u.name, decidim_organization_id: u.decidim_organization_id)) } + + # rubocop:disable Rails/SkipsModelValidations + User.where(nickname: nil).update_all("nickname = ''") + # rubocop:enable Rails/SkipsModelValidations + + change_column_default :decidim_users, :nickname, "" + change_column_null(:decidim_users, :nickname, false) + end +end diff --git a/db/migrate/20240418105126_add_version_to_action_logs.decidim.rb b/db/migrate/20240418105126_add_version_to_action_logs.decidim.rb new file mode 100644 index 0000000..6db3e15 --- /dev/null +++ b/db/migrate/20240418105126_add_version_to_action_logs.decidim.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180226140756) + +class AddVersionToActionLogs < ActiveRecord::Migration[5.1] + class ActionLog < ApplicationRecord + self.table_name = :decidim_action_logs + end + + def up + add_column :decidim_action_logs, :version_id, :integer, index: true + + ActionLog.find_each do |action_log| + version_id = action_log.extra.dig("version", "id") + next unless version_id + + # rubocop:disable Rails/SkipsModelValidations + action_log.update_column(:version_id, version_id) + # rubocop:enable Rails/SkipsModelValidations + end + end + + def down + remove_column :decidim_action_logs, :version_id + end +end diff --git a/db/migrate/20240418105127_create_participatory_space_links.decidim.rb b/db/migrate/20240418105127_create_participatory_space_links.decidim.rb new file mode 100644 index 0000000..ad8203f --- /dev/null +++ b/db/migrate/20240418105127_create_participatory_space_links.decidim.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180227131727) + +class CreateParticipatorySpaceLinks < ActiveRecord::Migration[5.0] + def change + create_table :decidim_participatory_space_links do |t| + t.references :from, null: false, polymorphic: true, index: { name: "index_participatory_space_links_on_from" } + t.references :to, null: false, polymorphic: true, index: { name: "index_participatory_space_links_on_to" } + t.string :name, null: false, index: { name: "index_participatory_space_links_name" } + t.jsonb :data + end + end +end diff --git a/db/migrate/20240418105128_rename_features_to_components.decidim.rb b/db/migrate/20240418105128_rename_features_to_components.decidim.rb new file mode 100644 index 0000000..4e95616 --- /dev/null +++ b/db/migrate/20240418105128_rename_features_to_components.decidim.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180305132906) + +class RenameFeaturesToComponents < ActiveRecord::Migration[5.1] + class ActionLog < ApplicationRecord + self.table_name = :decidim_action_logs + end + + class Version < ApplicationRecord + self.table_name = :versions + end + + def change + rename_table :decidim_features, :decidim_components + rename_column :decidim_action_logs, :decidim_feature_id, :decidim_component_id + rename_index :decidim_action_logs, "index_action_logs_on_feature_id", "index_action_logs_on_component_id" + + if index_name_exists?(:decidim_components, "index_decidim_features_on_decidim_participatory_space") + rename_index :decidim_components, "index_decidim_features_on_decidim_participatory_space", "index_decidim_components_on_decidim_participatory_space" + end + + # rubocop:disable Rails/SkipsModelValidations + Version.where(item_type: "Decidim::Feature").update_all(item_type: "Decidim::Component") + ActionLog.where(resource_type: "Decidim::Feature").update_all(resource_type: "Decidim::Component") + # rubocop:enable Rails/SkipsModelValidations + + ActionLog.find_each do |log| + new_extra = log.extra.dup + next if new_extra["component"].present? + + new_extra["component"] = new_extra["feature"] + new_extra.delete("feature") + log.extra = new_extra + log.save! + end + end +end diff --git a/db/migrate/20240418105129_doorkeeper_models.decidim.rb b/db/migrate/20240418105129_doorkeeper_models.decidim.rb new file mode 100644 index 0000000..b3732c0 --- /dev/null +++ b/db/migrate/20240418105129_doorkeeper_models.decidim.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180308113207) + +class DoorkeeperModels < ActiveRecord::Migration[5.1] + def change + create_table :oauth_applications do |t| + t.string :name, null: false + t.string :organization_name, null: false + t.string :organization_url, null: false + t.string :organization_logo, null: false + t.string :uid, null: false + t.string :secret, null: false + t.text :redirect_uri, null: false + t.string :scopes, null: false, default: "" + t.references :decidim_organization, foreign_key: true, index: true + t.timestamps null: false + t.string :type + end + + add_index :oauth_applications, :uid, unique: true + + create_table :oauth_access_grants do |t| + t.integer :resource_owner_id, null: false + t.references :application, null: false + t.string :token, null: false + t.integer :expires_in, null: false + t.text :redirect_uri, null: false + t.datetime :created_at, null: false + t.datetime :revoked_at + t.string :scopes + end + + add_index :oauth_access_grants, :token, unique: true + add_foreign_key( + :oauth_access_grants, + :oauth_applications, + column: :application_id + ) + + create_table :oauth_access_tokens do |t| + t.integer :resource_owner_id + t.references :application + + # If you use a custom token generator you may need to change this column + # from string to text, so that it accepts tokens larger than 255 + # characters. More info on custom token generators in: + # https://github.com/doorkeeper-gem/doorkeeper/tree/v3.0.0.rc1#custom-access-token-generator + # + # t.text :token, null: false + t.string :token, null: false + + t.string :refresh_token + t.integer :expires_in + t.datetime :revoked_at + t.datetime :created_at, null: false + t.string :scopes + + # If there is a previous_refresh_token column, + # refresh tokens will be revoked after a related access token is used. + # If there is no previous_refresh_token column, + # previous tokens are revoked as soon as a new access token is created. + # Comment out this line if you'd rather have refresh tokens + # instantly revoked. + t.string :previous_refresh_token, null: false, default: "" + end + + add_index :oauth_access_tokens, :token, unique: true + add_index :oauth_access_tokens, :resource_owner_id + add_index :oauth_access_tokens, :refresh_token, unique: true + add_foreign_key( + :oauth_access_tokens, + :oauth_applications, + column: :application_id + ) + add_foreign_key( + :oauth_access_tokens, + :decidim_users, + column: :resource_owner_id + ) + add_foreign_key( + :oauth_access_grants, + :decidim_users, + column: :resource_owner_id + ) + end +end diff --git a/db/migrate/20240418105130_rename_maximum_votes_per_proposal_to_threshold_per_proposal.decidim.rb b/db/migrate/20240418105130_rename_maximum_votes_per_proposal_to_threshold_per_proposal.decidim.rb new file mode 100644 index 0000000..b8cc31a --- /dev/null +++ b/db/migrate/20240418105130_rename_maximum_votes_per_proposal_to_threshold_per_proposal.decidim.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180314085339) + +class RenameMaximumVotesPerProposalToThresholdPerProposal < ActiveRecord::Migration[5.1] + def up + execute <<~SQL.squish + UPDATE decidim_components + SET settings = jsonb_set( + settings::jsonb, + array['global'], + (settings->'global')::jsonb - 'maximum_votes_per_proposal' || jsonb_build_object('threshold_per_proposal', settings->'global'->'maximum_votes_per_proposal') + ) + WHERE manifest_name = 'proposals' + SQL + end + + def down + execute <<~SQL.squish + UPDATE decidim_components + SET settings = jsonb_set( + settings::jsonb, + array['global'], + (settings->'global')::jsonb - 'threshold_per_proposal' || jsonb_build_object('maximum_votes_per_proposal', settings->'global'->'threshold_per_proposal') + ) + WHERE manifest_name = 'proposals' + SQL + end +end diff --git a/db/migrate/20240418105131_change_event_name_and_class_to_rename_to_publish_proposal_event.decidim.rb b/db/migrate/20240418105131_change_event_name_and_class_to_rename_to_publish_proposal_event.decidim.rb new file mode 100644 index 0000000..3ffd94e --- /dev/null +++ b/db/migrate/20240418105131_change_event_name_and_class_to_rename_to_publish_proposal_event.decidim.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180323102631) + +class ChangeEventNameAndClassToRenameToPublishProposalEvent < ActiveRecord::Migration[5.1] + def up + # rubocop:disable Rails/SkipsModelValidations + Decidim::Notification.where(event_name: "decidim.events.proposals.proposal_created") + .update_all(event_name: "decidim.events.proposals.proposal_published", event_class: "Decidim::Proposals::PublishProposalEvent") + # rubocop:enable Rails/SkipsModelValidations + end + + def down + # rubocop:disable Rails/SkipsModelValidations + Decidim::Notification.where(event_name: "decidim.events.proposals.proposal_published") + .update_all(event_name: "decidim.events.proposals.proposal_created", event_class: "Decidim::Proposals::CreateProposalEvent") + # rubocop:enable Rails/SkipsModelValidations + end +end diff --git a/db/migrate/20240418105132_create_coauthorships.decidim.rb b/db/migrate/20240418105132_create_coauthorships.decidim.rb new file mode 100644 index 0000000..d2e0112 --- /dev/null +++ b/db/migrate/20240418105132_create_coauthorships.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180427141253) + +class CreateCoauthorships < ActiveRecord::Migration[5.1] + def change + create_table :decidim_coauthorships do |t| + t.references :decidim_author, null: false, index: { name: "index_author_on_coauthorsihp" } + t.references :decidim_user_group, index: { name: "index_user_group_on_coauthorsihp" } + t.references :coauthorable, polymorphic: true, index: { name: "index_coauthorable_on_coauthorship" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105133_add_tos_version_to_organization.decidim.rb b/db/migrate/20240418105133_add_tos_version_to_organization.decidim.rb new file mode 100644 index 0000000..d7640e8 --- /dev/null +++ b/db/migrate/20240418105133_add_tos_version_to_organization.decidim.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180508111640) + +class AddTosVersionToOrganization < ActiveRecord::Migration[5.1] + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + def up + add_column :decidim_organizations, :tos_version, :datetime + Organization.find_each do |organization| + tos_version = Decidim::StaticPage.find_by(slug: ["terms-and-conditions", "terms-of-service"], organization:).updated_at + organization.update(tos_version:) + end + end + + def down + remove_columns :decidim_organizations, :tos_version + end +end diff --git a/db/migrate/20240418105134_add_accepted_tos_version_field_to_users.decidim.rb b/db/migrate/20240418105134_add_accepted_tos_version_field_to_users.decidim.rb new file mode 100644 index 0000000..3642724 --- /dev/null +++ b/db/migrate/20240418105134_add_accepted_tos_version_field_to_users.decidim.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180508111710) + +class AddAcceptedTosVersionFieldToUsers < ActiveRecord::Migration[5.1] + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + has_many :users, foreign_key: "decidim_organization_id", class_name: "Decidim::User", dependent: :destroy + end + + class User < ApplicationRecord + self.table_name = :decidim_users + belongs_to :organization, foreign_key: "decidim_organization_id", class_name: "Decidim::Organization" + end + + def up + add_column :decidim_users, :accepted_tos_version, :datetime + Organization.find_each do |organization| + # rubocop:disable Rails/SkipsModelValidations + organization.users.update_all(accepted_tos_version: organization.tos_version) + # rubocop:enable Rails/SkipsModelValidations + end + end + + def down + remove_columns :decidim_users, :accepted_tos_version + end +end diff --git a/db/migrate/20240418105135_change_newsletter_notification_type_value.decidim.rb b/db/migrate/20240418105135_change_newsletter_notification_type_value.decidim.rb new file mode 100644 index 0000000..234515c --- /dev/null +++ b/db/migrate/20240418105135_change_newsletter_notification_type_value.decidim.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180611121852) + +class ChangeNewsletterNotificationTypeValue < ActiveRecord::Migration[5.2] + class User < ApplicationRecord + self.table_name = :decidim_users + end + + def up + add_column :decidim_users, :newsletter_token, :string, default: "" + add_column :decidim_users, :newsletter_notifications_at, :datetime + User.reset_column_information + User.where(newsletter_notifications: true).update(newsletter_notifications_at: Time.zone.parse("2018-05-24 00:00 +02:00")) + remove_column :decidim_users, :newsletter_notifications + end + + def down + add_column :decidim_users, :newsletter_notifications, :boolean + User.reset_column_information + User.where.not(newsletter_notifications_at: nil).update(newsletter_notifications: true) + remove_column :decidim_users, :newsletter_notifications_at + remove_column :decidim_users, :newsletter_token + end +end diff --git a/db/migrate/20240418105136_rename_missing_features_to_components.decidim.rb b/db/migrate/20240418105136_rename_missing_features_to_components.decidim.rb new file mode 100644 index 0000000..c5fc322 --- /dev/null +++ b/db/migrate/20240418105136_rename_missing_features_to_components.decidim.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180613080638) + +class RenameMissingFeaturesToComponents < ActiveRecord::Migration[5.1] + class Notification < ApplicationRecord + self.table_name = :decidim_notifications + end + + def up + # rubocop:disable Rails/SkipsModelValidations + Notification.where(decidim_resource_type: "Decidim::Feature").update_all(decidim_resource_type: "Decidim::Component") + Notification.where(event_class: "Decidim::FeaturePublishedEvent").update_all(event_class: "Decidim::ComponentPublishedEvent") + Notification.where(event_name: "decidim.events.features.feature_published").update_all(event_name: "decidim.events.components.component_published") + # rubocop:enable Rails/SkipsModelValidations + end +end diff --git a/db/migrate/20240418105137_create_decidim_resource_permissions.decidim.rb b/db/migrate/20240418105137_create_decidim_resource_permissions.decidim.rb new file mode 100644 index 0000000..67e220f --- /dev/null +++ b/db/migrate/20240418105137_create_decidim_resource_permissions.decidim.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180705091019) + +class CreateDecidimResourcePermissions < ActiveRecord::Migration[5.2] + def change + create_table :decidim_resource_permissions do |t| + t.belongs_to :resource, polymorphic: true, index: { name: "index_decidim_resource_permissions_on_r_type_and_r_id", unique: true } + t.jsonb :permissions, default: {} + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105138_create_decidim_metrics.decidim.rb b/db/migrate/20240418105138_create_decidim_metrics.decidim.rb new file mode 100644 index 0000000..21a70c5 --- /dev/null +++ b/db/migrate/20240418105138_create_decidim_metrics.decidim.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180705134647) + +class CreateDecidimMetrics < ActiveRecord::Migration[5.2] + def change + create_table :decidim_metrics do |t| + t.date :day, null: false, index: true + t.string :metric_type, null: false, index: true + t.integer :cumulative, null: false + t.integer :quantity, null: false + t.references :decidim_organization, null: false, index: true + t.references :participatory_space, polymorphic: true, index: { name: "index_metric_on_participatory_space_id_and_type" } + t.references :related_object, polymorphic: true, index: { name: "index_metric_on_related_object_id_and_type" } + t.references :decidim_category + end + end +end diff --git a/db/migrate/20240418105139_add_nickname_to_managed_users.decidim.rb b/db/migrate/20240418105139_add_nickname_to_managed_users.decidim.rb new file mode 100644 index 0000000..d896318 --- /dev/null +++ b/db/migrate/20240418105139_add_nickname_to_managed_users.decidim.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180706104107) + +class AddNicknameToManagedUsers < ActiveRecord::Migration[5.2] + class User < ApplicationRecord + self.table_name = :decidim_users + end + + def up + User.where(managed: true, nickname: nil).includes(:organization).find_each do |user| + user.nickname = UserBaseEntity.nicknamize(user.name, organization: user.organization) + user.save + end + end +end diff --git a/db/migrate/20240418105140_fix_result_follows.decidim.rb b/db/migrate/20240418105140_fix_result_follows.decidim.rb new file mode 100644 index 0000000..0fed95e --- /dev/null +++ b/db/migrate/20240418105140_fix_result_follows.decidim.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180706111847) + +class FixResultFollows < ActiveRecord::Migration[5.2] + def change + # rubocop:disable Rails/SkipsModelValidations + Decidim::Follow.where(decidim_followable_type: "Decidim::Results::Result").update_all(decidim_followable_type: "Decidim::Accountability::Result") + # rubocop:enable Rails/SkipsModelValidations + end +end diff --git a/db/migrate/20240418105141_create_decidim_amendments.decidim.rb b/db/migrate/20240418105141_create_decidim_amendments.decidim.rb new file mode 100644 index 0000000..543223c --- /dev/null +++ b/db/migrate/20240418105141_create_decidim_amendments.decidim.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180720114847) + +class CreateDecidimAmendments < ActiveRecord::Migration[5.2] + def change + create_table :decidim_amendments do |t| + t.references :decidim_user, null: false + t.references :decidim_amendable, polymorphic: true, index: false + t.references :decidim_emendation, polymorphic: true, index: false + t.string :state, index: true + t.timestamps + end + + add_index :decidim_amendments, + [:decidim_user_id, :decidim_amendable_id, :decidim_amendable_type], + name: "index_on_amender_and_amendable" + + add_index :decidim_amendments, + [:decidim_amendable_id, :decidim_amendable_type], + name: "index_on_amendable" + end +end diff --git a/db/migrate/20240418105142_add_content_blocks.decidim.rb b/db/migrate/20240418105142_add_content_blocks.decidim.rb new file mode 100644 index 0000000..5393eb5 --- /dev/null +++ b/db/migrate/20240418105142_add_content_blocks.decidim.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180724103814) + +class AddContentBlocks < ActiveRecord::Migration[5.2] + def change + create_table :decidim_content_blocks do |t| + t.integer :decidim_organization_id, null: false, index: true + t.string :manifest_name, null: false, index: true + t.string :scope, null: false, index: true + t.jsonb :options + t.datetime :published_at, index: true + t.integer :weight + t.references + end + + add_index( + :decidim_content_blocks, + [:decidim_organization_id, :scope, :manifest_name], + unique: true, + name: "idx_dcdm_content_blocks_uniq_org_id_scope_manifest_name" + ) + end +end diff --git a/db/migrate/20240418105143_create_decidim_hashtags.decidim.rb b/db/migrate/20240418105143_create_decidim_hashtags.decidim.rb new file mode 100644 index 0000000..c5a611e --- /dev/null +++ b/db/migrate/20240418105143_create_decidim_hashtags.decidim.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180726112510) + +class CreateDecidimHashtags < ActiveRecord::Migration[5.2] + def self.up + create_table :decidim_hashtags do |t| + t.references :decidim_organization + + t.string :name, index: true + + t.timestamps + end + end + + def self.down + drop_table :decidim_hashtags + end +end diff --git a/db/migrate/20240418105144_add_core_content_blocks.decidim.rb b/db/migrate/20240418105144_add_core_content_blocks.decidim.rb new file mode 100644 index 0000000..0a37f7d --- /dev/null +++ b/db/migrate/20240418105144_add_core_content_blocks.decidim.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180730071851) + +class AddCoreContentBlocks < ActiveRecord::Migration[5.2] + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + class ContentBlock < ApplicationRecord + self.table_name = :decidim_content_blocks + end + + def change + default_blocks = Decidim.content_blocks.for(:homepage).select(&:default) + + Organization.pluck(:id).each do |organization_id| + default_blocks.each_with_index do |manifest, index| + weight = (index + 1) * 10 + ContentBlock.create( + decidim_organization_id: organization_id, + weight:, + scope: :homepage, + manifest_name: manifest.name, + published_at: Time.current + ) + end + end + end +end diff --git a/db/migrate/20240418105145_rename_content_block_options_to_settings.decidim.rb b/db/migrate/20240418105145_rename_content_block_options_to_settings.decidim.rb new file mode 100644 index 0000000..c722920 --- /dev/null +++ b/db/migrate/20240418105145_rename_content_block_options_to_settings.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180802132147) + +class RenameContentBlockOptionsToSettings < ActiveRecord::Migration[5.2] + def change + rename_column :decidim_content_blocks, :options, :settings + end +end diff --git a/db/migrate/20240418105146_add_badge_scores.decidim.rb b/db/migrate/20240418105146_add_badge_scores.decidim.rb new file mode 100644 index 0000000..0bc964e --- /dev/null +++ b/db/migrate/20240418105146_add_badge_scores.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180806095628) + +class AddBadgeScores < ActiveRecord::Migration[5.2] + def change + create_table :decidim_gamification_badge_scores do |t| + t.references :user, null: false + t.string :badge_name, null: false + t.integer :value, null: false, default: 0 + end + end +end diff --git a/db/migrate/20240418105147_add_images_to_content_blocks.decidim.rb b/db/migrate/20240418105147_add_images_to_content_blocks.decidim.rb new file mode 100644 index 0000000..cd6ea92 --- /dev/null +++ b/db/migrate/20240418105147_add_images_to_content_blocks.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180808135006) + +class AddImagesToContentBlocks < ActiveRecord::Migration[5.2] + def change + add_column :decidim_content_blocks, :images, :jsonb, default: {} + end +end diff --git a/db/migrate/20240418105148_move_organization_fields_to_hero_content_block.decidim.rb b/db/migrate/20240418105148_move_organization_fields_to_hero_content_block.decidim.rb new file mode 100644 index 0000000..f73aee3 --- /dev/null +++ b/db/migrate/20240418105148_move_organization_fields_to_hero_content_block.decidim.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180810092428) + +class MoveOrganizationFieldsToHeroContentBlock < ActiveRecord::Migration[5.2] + # This migration made use CarrierWave, which in future will be eliminated. + # The organization homepage image was moved to the content block background + # image using CarrierWave. This operation has been removed, so if there is + # an existing homepage image previous to this migration the content block + # background image should be loaded manually + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + def change + Decidim::ContentBlock.reset_column_information + Organization.find_each do |organization| + content_block = Decidim::ContentBlock.find_by(organization:, scope: :homepage, manifest_name: :hero) + settings = {} + welcome_text = organization.welcome_text || {} + settings = welcome_text.inject(settings) { |acc, (k, v)| acc.update("welcome_text_#{k}" => v) } + + content_block.settings = settings + content_block.settings_will_change! + content_block.save! + end + + remove_column :decidim_organizations, :welcome_text + remove_column :decidim_organizations, :homepage_image + end +end diff --git a/db/migrate/20240418105149_add_visibility_to_action_logs.decidim.rb b/db/migrate/20240418105149_add_visibility_to_action_logs.decidim.rb new file mode 100644 index 0000000..5ff05b9 --- /dev/null +++ b/db/migrate/20240418105149_add_visibility_to_action_logs.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20180918072506) + +class AddVisibilityToActionLogs < ActiveRecord::Migration[5.2] + def change + add_column :decidim_action_logs, :visibility, :string, default: "admin-only" + add_index :decidim_action_logs, :visibility + end +end diff --git a/db/migrate/20240418105150_move_users_groups_to_users_table.decidim.rb b/db/migrate/20240418105150_move_users_groups_to_users_table.decidim.rb new file mode 100644 index 0000000..02a5a38 --- /dev/null +++ b/db/migrate/20240418105150_move_users_groups_to_users_table.decidim.rb @@ -0,0 +1,85 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181001124950) + +class MoveUsersGroupsToUsersTable < ActiveRecord::Migration[5.2] + class Organization < ApplicationRecord + self.table_name = "decidim_organizations" + end + + class OldUserGroup < ApplicationRecord + self.table_name = "decidim_user_groups" + end + + class User < ApplicationRecord + include Decidim::Nicknamizable + + self.table_name = "decidim_users" + end + + class NewUserGroup < User + include Decidim::Nicknamizable + end + + class Membership < ApplicationRecord + self.table_name = "decidim_user_group_memberships" + end + + class Coauthorship < ApplicationRecord + self.table_name = "decidim_coauthorships" + end + + # rubocop:disable Rails/SkipsModelValidations + def change + add_column :decidim_users, :type, :string + User.update_all(type: "Decidim::User") + change_column_null(:decidim_users, :type, false) + + add_column :decidim_users, :extended_data, :jsonb, default: {} + + remove_index :decidim_users, %w(email decidim_organization_id) + add_index( + :decidim_users, + %w(email decidim_organization_id), + where: "((deleted_at IS NULL) AND (managed = false) AND (type = 'Decidim::User'))", + name: "index_decidim_users_on_email_and_decidim_organization_id", + unique: true + ) + + User.reset_column_information + NewUserGroup.reset_column_information + + new_ids = {} + OldUserGroup.find_each do |old_user_group| + clean_attributes = old_user_group.attributes.except( + "id", + "document_number", + "phone", + "rejected_at", + "verified_at" + ) + extended_data = { + old_user_group_id: old_user_group.id, + document_number: old_user_group.document_number, + phone: old_user_group.phone, + rejected_at: old_user_group.rejected_at, + verified_at: old_user_group.verified_at + } + new_attributes = clean_attributes.merge( + nickname: UserBaseEntity.nicknamize(clean_attributes["name"]), + extended_data: + ) + new_user_group = NewUserGroup.create!(new_attributes) + new_ids[old_user_group.id] = new_user_group.id + end + + User.where.not(type: "Decidim::User").update_all(type: "Decidim::UserGroup") + + new_ids.each do |old_id, new_id| + Membership.where(decidim_user_group_id: old_id).update_all(decidim_user_group_id: new_id) + Coauthorship.where(decidim_user_group_id: old_id).update_all(decidim_user_group_id: new_id) + end + + drop_table :decidim_user_groups + end + # rubocop:enable Rails/SkipsModelValidations +end diff --git a/db/migrate/20240418105151_add_badge_switch_to_organizations.decidim.rb b/db/migrate/20240418105151_add_badge_switch_to_organizations.decidim.rb new file mode 100644 index 0000000..bdb2708 --- /dev/null +++ b/db/migrate/20240418105151_add_badge_switch_to_organizations.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181008102144) + +class AddBadgeSwitchToOrganizations < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :badges_enabled, :boolean, null: false, default: false + execute "UPDATE decidim_organizations set badges_enabled = true" + end +end diff --git a/db/migrate/20240418105152_create_decidim_continuity_badge_statuses.decidim.rb b/db/migrate/20240418105152_create_decidim_continuity_badge_statuses.decidim.rb new file mode 100644 index 0000000..8d1bbb1 --- /dev/null +++ b/db/migrate/20240418105152_create_decidim_continuity_badge_statuses.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181010044613) + +class CreateDecidimContinuityBadgeStatuses < ActiveRecord::Migration[5.2] + def change + create_table :decidim_continuity_badge_statuses do |t| + t.integer :current_streak, :integer, null: false, default: 0 + t.date :last_session_at, null: false + t.references :subject, null: false, polymorphic: true, index: { name: "decidim_continuity_statuses_subject" } + end + end +end diff --git a/db/migrate/20240418105153_add_roles_to_memberships.decidim.rb b/db/migrate/20240418105153_add_roles_to_memberships.decidim.rb new file mode 100644 index 0000000..9b3bc8c --- /dev/null +++ b/db/migrate/20240418105153_add_roles_to_memberships.decidim.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181011080252) + +class AddRolesToMemberships < ActiveRecord::Migration[5.2] + def up + add_column :decidim_user_group_memberships, :role, :string, default: "requested" + execute("UPDATE decidim_user_group_memberships SET role = 'creator'") + change_column_null :decidim_user_group_memberships, :role, false + add_index( + :decidim_user_group_memberships, + %w(role decidim_user_group_id), + where: "(role = 'creator')", + name: "decidim_group_membership_one_creator_per_group", + unique: true + ) + end + + def down + remove_column :decidim_user_group_memberships, :role + remove_index( + :decidim_user_group_memberships, + name: "decidim_group_membership_one_creator_per_group" + ) + end +end diff --git a/db/migrate/20240418105154_make_authors_polymorphic.decidim.rb b/db/migrate/20240418105154_make_authors_polymorphic.decidim.rb new file mode 100644 index 0000000..fb9c105 --- /dev/null +++ b/db/migrate/20240418105154_make_authors_polymorphic.decidim.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181016091601) + +class MakeAuthorsPolymorphic < ActiveRecord::Migration[5.2] + class Coauthorship < ApplicationRecord + self.table_name = :decidim_coauthorships + end + + def change + remove_index :decidim_coauthorships, :decidim_author_id + + add_column :decidim_coauthorships, :decidim_author_type, :string + + reversible do |direction| + direction.up do + execute <<~SQL.squish + UPDATE decidim_coauthorships + SET decidim_author_type = 'Decidim::UserBaseEntity' + SQL + end + end + + add_index :decidim_coauthorships, + [:decidim_author_id, :decidim_author_type], + name: "index_decidim_coauthorships_on_decidim_author" + + change_column_null :decidim_coauthorships, :decidim_author_id, false + change_column_null :decidim_coauthorships, :decidim_author_type, false + + Coauthorship.reset_column_information + end +end diff --git a/db/migrate/20240418105155_add_columns_to_pages.decidim.rb b/db/migrate/20240418105155_add_columns_to_pages.decidim.rb new file mode 100644 index 0000000..ddf3ab3 --- /dev/null +++ b/db/migrate/20240418105155_add_columns_to_pages.decidim.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181022090732) + +class AddColumnsToPages < ActiveRecord::Migration[5.2] + class StaticPage < ApplicationRecord + self.table_name = :decidim_static_pages + end + + # rubocop:disable Rails/SkipsModelValidations + def change + change_table :decidim_static_pages do |t| + t.column :weight, :integer, default: nil, null: true + t.column :show_in_footer, :boolean, default: false, null: false + end + + Decidim::StaticPage.where( + slug: ["faq", "terms-and-conditions", "terms-of-service", "accessibility"] + ).update_all(show_in_footer: true) + # rubocop:enable Rails/SkipsModelValidations + end +end diff --git a/db/migrate/20240418105156_add_static_page_topics.decidim.rb b/db/migrate/20240418105156_add_static_page_topics.decidim.rb new file mode 100644 index 0000000..6541b59 --- /dev/null +++ b/db/migrate/20240418105156_add_static_page_topics.decidim.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181023104416) + +class AddStaticPageTopics < ActiveRecord::Migration[5.2] + def change + create_table :decidim_static_page_topics do |t| + t.column :title, :jsonb, null: false + t.column :description, :jsonb, null: false + t.references :organization, null: false + end + + change_table :decidim_static_pages do |t| + t.references :topic + end + end +end diff --git a/db/migrate/20240418105157_add_timestamps_to_components.decidim.rb b/db/migrate/20240418105157_add_timestamps_to_components.decidim.rb new file mode 100644 index 0000000..b68fedc --- /dev/null +++ b/db/migrate/20240418105157_add_timestamps_to_components.decidim.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181025082245) + +class AddTimestampsToComponents < ActiveRecord::Migration[5.2] + def change + add_timestamps :decidim_components, null: true + # rubocop:disable Rails/SkipsModelValidations + Decidim::Component.update_all(created_at: Time.current, updated_at: Time.current) + # rubocop:enable Rails/SkipsModelValidations + change_column_null :decidim_components, :created_at, false + change_column_null :decidim_components, :updated_at, false + end +end diff --git a/db/migrate/20240418105158_fix_user_follows.decidim.rb b/db/migrate/20240418105158_fix_user_follows.decidim.rb new file mode 100644 index 0000000..9487504 --- /dev/null +++ b/db/migrate/20240418105158_fix_user_follows.decidim.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181029112820) + +class FixUserFollows < ActiveRecord::Migration[5.2] + class Follow < ApplicationRecord + self.table_name = "decidim_follows" + + belongs_to :followable, foreign_key: "decidim_followable_id", foreign_type: "decidim_followable_type", polymorphic: true + belongs_to :user, foreign_key: "decidim_user_id", class_name: "Decidim::User" + end + + def change + # rubocop:disable Rails/SkipsModelValidations + Follow.where( + decidim_followable_type: "Decidim::User" + ).update_all(decidim_followable_type: "Decidim::UserBaseEntity") + # rubocop:enable Rails/SkipsModelValidations + end +end diff --git a/db/migrate/20240418105159_add_welcome_notification.decidim.rb b/db/migrate/20240418105159_add_welcome_notification.decidim.rb new file mode 100644 index 0000000..36ffbc9 --- /dev/null +++ b/db/migrate/20240418105159_add_welcome_notification.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181029121244) + +class AddWelcomeNotification < ActiveRecord::Migration[5.2] + def change + change_table :decidim_organizations do |t| + t.boolean :send_welcome_notification, null: false, default: false + t.jsonb :welcome_notification_subject, null: true + t.jsonb :welcome_notification_body, null: true + end + + execute "UPDATE decidim_organizations SET send_welcome_notification = 'true'" + end +end diff --git a/db/migrate/20240418105160_destroy_deleted_users_follows.decidim.rb b/db/migrate/20240418105160_destroy_deleted_users_follows.decidim.rb new file mode 100644 index 0000000..04a4cc6 --- /dev/null +++ b/db/migrate/20240418105160_destroy_deleted_users_follows.decidim.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181030090144) + +class DestroyDeletedUsersFollows < ActiveRecord::Migration[5.2] + class Follow < ApplicationRecord + self.table_name = "decidim_follows" + end + + class User < ApplicationRecord + self.table_name = "decidim_users" + end + + def change + deleted_users = User.where.not(deleted_at: nil).pluck(:id) + Follow.where(decidim_followable_type: "Decidim::UserBaseEntity", decidim_followable_id: deleted_users).destroy_all + Follow.where(decidim_user_id: deleted_users).destroy_all + end +end diff --git a/db/migrate/20240418105161_add_users_registration_mode_to_organizations.decidim.rb b/db/migrate/20240418105161_add_users_registration_mode_to_organizations.decidim.rb new file mode 100644 index 0000000..9cfb5d0 --- /dev/null +++ b/db/migrate/20240418105161_add_users_registration_mode_to_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181108131058) + +class AddUsersRegistrationModeToOrganizations < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :users_registration_mode, :integer, default: 0, null: false + end +end diff --git a/db/migrate/20240418105162_create_decidim_contextual_help_sections.decidim.rb b/db/migrate/20240418105162_create_decidim_contextual_help_sections.decidim.rb new file mode 100644 index 0000000..fd40eff --- /dev/null +++ b/db/migrate/20240418105162_create_decidim_contextual_help_sections.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181113101935) + +class CreateDecidimContextualHelpSections < ActiveRecord::Migration[5.2] + def change + create_table :decidim_contextual_help_sections do |t| + t.string :section_id, null: false + t.references :organization, null: false + t.jsonb :content, null: false + end + end +end diff --git a/db/migrate/20240418105163_add_following_and_followers_counters_to_users.decidim.rb b/db/migrate/20240418105163_add_following_and_followers_counters_to_users.decidim.rb new file mode 100644 index 0000000..ac4bec2 --- /dev/null +++ b/db/migrate/20240418105163_add_following_and_followers_counters_to_users.decidim.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181115102958) + +class AddFollowingAndFollowersCountersToUsers < ActiveRecord::Migration[5.2] + def up + add_column :decidim_users, :following_count, :integer, null: false, default: 0 + add_column :decidim_users, :following_users_count, :integer, null: false, default: 0 + add_column :decidim_users, :followers_count, :integer, null: false, default: 0 + end + + def down + remove_column :decidim_users, :following_count + remove_column :decidim_users, :following_users_count + remove_column :decidim_users, :followers_count + end +end diff --git a/db/migrate/20240418105164_add_columns_to_static_page_topic.decidim.rb b/db/migrate/20240418105164_add_columns_to_static_page_topic.decidim.rb new file mode 100644 index 0000000..b85e259 --- /dev/null +++ b/db/migrate/20240418105164_add_columns_to_static_page_topic.decidim.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181119140636) + +class AddColumnsToStaticPageTopic < ActiveRecord::Migration[5.2] + def change + change_table :decidim_static_page_topics do |t| + t.column :weight, :integer, default: nil, null: true + t.column :show_in_footer, :boolean, default: false, null: false + end + end +end diff --git a/db/migrate/20240418105165_add_id_documents_fields_to_org.decidim.rb b/db/migrate/20240418105165_add_id_documents_fields_to_org.decidim.rb new file mode 100644 index 0000000..821b4ce --- /dev/null +++ b/db/migrate/20240418105165_add_id_documents_fields_to_org.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181126145142) + +class AddIdDocumentsFieldsToOrg < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :id_documents_methods, :string, array: true, default: ["online"] + add_column :decidim_organizations, :id_documents_explanation_text, :jsonb, default: {} + + # rubocop:disable Rails/SkipsModelValidations + Decidim::Organization.reset_column_information + Decidim::Organization.update_all(id_documents_methods: ["online"]) + # rubocop:enable Rails/SkipsModelValidations + end +end diff --git a/db/migrate/20240418105166_remove_following_users_count_from_users.decidim.rb b/db/migrate/20240418105166_remove_following_users_count_from_users.decidim.rb new file mode 100644 index 0000000..fa0f603 --- /dev/null +++ b/db/migrate/20240418105166_remove_following_users_count_from_users.decidim.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181204110723) + +class RemoveFollowingUsersCountFromUsers < ActiveRecord::Migration[5.2] + class UserBaseEntity < ApplicationRecord + self.table_name = :decidim_users + self.inheritance_column = nil # disable the default inheritance + end + + class Follow < ApplicationRecord + self.table_name = :decidim_follows + end + + def up + remove_column :decidim_users, :following_users_count + end + + def down + add_column :decidim_users, :following_users_count, :integer, null: false, default: 0 + + UserBaseEntity.find_each do |entity| + following_users_count = Follow.where(decidim_user_id: entity.id, decidim_followable_type: ["Decidim::UserBaseEntity", "Decidim::User", "Decidim::UserGroup"]).count + entity.following_users_count = following_users_count + entity.save + end + end +end diff --git a/db/migrate/20240418105167_add_scope_to_action_logs.decidim.rb b/db/migrate/20240418105167_add_scope_to_action_logs.decidim.rb new file mode 100644 index 0000000..00c98aa --- /dev/null +++ b/db/migrate/20240418105167_add_scope_to_action_logs.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181211080834) + +class AddScopeToActionLogs < ActiveRecord::Migration[5.2] + def change + add_column :decidim_action_logs, :decidim_scope_id, :integer + end +end diff --git a/db/migrate/20240418105168_add_area_to_action_logs.decidim.rb b/db/migrate/20240418105168_add_area_to_action_logs.decidim.rb new file mode 100644 index 0000000..d398cbf --- /dev/null +++ b/db/migrate/20240418105168_add_area_to_action_logs.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181211090933) + +class AddAreaToActionLogs < ActiveRecord::Migration[5.2] + def change + add_column :decidim_action_logs, :decidim_area_id, :integer + end +end diff --git a/db/migrate/20240418105169_add_notification_types_to_users.decidim.rb b/db/migrate/20240418105169_add_notification_types_to_users.decidim.rb new file mode 100644 index 0000000..ed7bd2a --- /dev/null +++ b/db/migrate/20240418105169_add_notification_types_to_users.decidim.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181214101250) + +class AddNotificationTypesToUsers < ActiveRecord::Migration[5.2] + class UserBaseEntity < ApplicationRecord + self.table_name = :decidim_users + self.inheritance_column = nil # disable the default inheritance + end + + def change + add_column :decidim_users, :notification_types, :string, default: "all" + # rubocop:disable Rails/SkipsModelValidations + UserBaseEntity.update_all(notification_types: "all") + # rubocop:enable Rails/SkipsModelValidations + + change_column_null :decidim_users, :notification_types, false + end +end diff --git a/db/migrate/20240418105170_add_user_groups_switch_to_organizations.decidim.rb b/db/migrate/20240418105170_add_user_groups_switch_to_organizations.decidim.rb new file mode 100644 index 0000000..ba89b2c --- /dev/null +++ b/db/migrate/20240418105170_add_user_groups_switch_to_organizations.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181218171503) + +class AddUserGroupsSwitchToOrganizations < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :user_groups_enabled, :boolean, null: false, default: false + execute "UPDATE decidim_organizations set user_groups_enabled = true" + end +end diff --git a/db/migrate/20240418105171_add_smtp_settings_to_decidim_organizations.decidim.rb b/db/migrate/20240418105171_add_smtp_settings_to_decidim_organizations.decidim.rb new file mode 100644 index 0000000..b37e499 --- /dev/null +++ b/db/migrate/20240418105171_add_smtp_settings_to_decidim_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20181219130325) + +class AddSmtpSettingsToDecidimOrganizations < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :smtp_settings, :jsonb + end +end diff --git a/db/migrate/20240418105172_add_colors_to_decidim_organization.decidim.rb b/db/migrate/20240418105172_add_colors_to_decidim_organization.decidim.rb new file mode 100644 index 0000000..1f13e3f --- /dev/null +++ b/db/migrate/20240418105172_add_colors_to_decidim_organization.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20190220023422) + +class AddColorsToDecidimOrganization < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :colors, :jsonb, default: {} + end +end diff --git a/db/migrate/20240418105173_add_extended_data_to_newsletters.decidim.rb b/db/migrate/20240418105173_add_extended_data_to_newsletters.decidim.rb new file mode 100644 index 0000000..4cb8000 --- /dev/null +++ b/db/migrate/20240418105173_add_extended_data_to_newsletters.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20190325145349) + +class AddExtendedDataToNewsletters < ActiveRecord::Migration[5.2] + def change + add_column :decidim_newsletters, :extended_data, :jsonb, default: {} + end +end diff --git a/db/migrate/20240418105174_add_missing_indexes.decidim.rb b/db/migrate/20240418105174_add_missing_indexes.decidim.rb new file mode 100644 index 0000000..1fe8960 --- /dev/null +++ b/db/migrate/20240418105174_add_missing_indexes.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20190412105836) + +class AddMissingIndexes < ActiveRecord::Migration[5.2] + def change + add_index :decidim_follows, [:decidim_followable_id, :decidim_followable_type], name: "index_follows_followable_id_and_type" + add_index :decidim_user_group_memberships, [:decidim_user_group_id, :decidim_user_id], name: "index_user_group_memberships_group_id_user_id" + add_index :decidim_users, [:id, :type] + add_index :decidim_users, [:invited_by_id, :invited_by_type] + add_index :versions, [:item_id, :item_type] + end +end diff --git a/db/migrate/20240418105175_fix_user_names.decidim.rb b/db/migrate/20240418105175_fix_user_names.decidim.rb new file mode 100644 index 0000000..111b5cc --- /dev/null +++ b/db/migrate/20240418105175_fix_user_names.decidim.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20190412131728) + +class FixUserNames < ActiveRecord::Migration[5.2] + class UserBaseEntity < ApplicationRecord + include Decidim::Nicknamizable + + self.table_name = :decidim_users + self.inheritance_column = nil # disable the default inheritance + end + + def change + # Comes from Decidim::User specs + weird_characters = + ["<", ">", "?", "\\%", "&", "^", "*", "#", "@", "(", ")", "[", "]", "=", "+", ":", ";", "\"", "{", "}", "\\", "|", "/"] + characters_to_remove = "<>?%&^*\#@()[]=+:;\"{}\\|/" + + weird_characters.each do |character| + UserBaseEntity.where(deleted_at: nil).where("name like '%#{character}%' escape '\\' OR nickname like '%#{character}%' escape '\\'").find_each do |entity| + Rails.logger.debug { "detected character: #{character}" } + Rails.logger.debug { "UserBaseEntity ID: #{entity.id}" } + Rails.logger.debug { "#{entity.name} => #{entity.name.delete(characters_to_remove).strip}" } + Rails.logger.debug { "#{entity.nickname} => #{entity.nickname.delete(characters_to_remove).strip}" } + + entity.name = entity.name.delete(characters_to_remove).strip + sanitized_nickname = entity.nickname.delete(characters_to_remove).strip + entity.nickname = UserBaseEntity.nicknamize(sanitized_nickname, organization: entity.organization) + entity.save(validate: false) + end + end + end +end diff --git a/db/migrate/20240418105176_add_force_users_to_authenticate_before_access_organization.decidim.rb b/db/migrate/20240418105176_add_force_users_to_authenticate_before_access_organization.decidim.rb new file mode 100644 index 0000000..c63043f --- /dev/null +++ b/db/migrate/20240418105176_add_force_users_to_authenticate_before_access_organization.decidim.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20190610093742) + +class AddForceUsersToAuthenticateBeforeAccessOrganization < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, + :force_users_to_authenticate_before_access_organization, + :boolean, + default: false + end +end diff --git a/db/migrate/20240418105177_add_confidential_to_doorkeeper_application.decidim.rb b/db/migrate/20240418105177_add_confidential_to_doorkeeper_application.decidim.rb new file mode 100644 index 0000000..4c36d06 --- /dev/null +++ b/db/migrate/20240418105177_add_confidential_to_doorkeeper_application.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20190618075906) + +class AddConfidentialToDoorkeeperApplication < ActiveRecord::Migration[5.2] + def change + add_column( + :oauth_applications, + :confidential, + :boolean, + null: false, + default: true # maintaining backwards compatibility: require secrets + ) + end +end diff --git a/db/migrate/20240418105178_add_uniq_index_to_decidim_metrics.decidim.rb b/db/migrate/20240418105178_add_uniq_index_to_decidim_metrics.decidim.rb new file mode 100644 index 0000000..86fe3ab --- /dev/null +++ b/db/migrate/20240418105178_add_uniq_index_to_decidim_metrics.decidim.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20190829092826) + +class AddUniqIndexToDecidimMetrics < ActiveRecord::Migration[5.2] + def change + add_index( + :decidim_metrics, [ + :day, + :metric_type, + :decidim_organization_id, + :participatory_space_type, + :participatory_space_id, + :related_object_type, + :related_object_id, + :decidim_category_id + ], + unique: true, + name: "idx_metric_by_day_type_org_space_object_category" + ) + end +end diff --git a/db/migrate/20240418105179_add_lockable_to_users.decidim.rb b/db/migrate/20240418105179_add_lockable_to_users.decidim.rb new file mode 100644 index 0000000..e75f054 --- /dev/null +++ b/db/migrate/20240418105179_add_lockable_to_users.decidim.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20191028135718) + +class AddLockableToUsers < ActiveRecord::Migration[5.2] + def change + add_column :decidim_users, :failed_attempts, :integer, default: 0, null: false # Only if lock strategy is :failed_attempts + add_column :decidim_users, :unlock_token, :string # Only if unlock strategy is :email or :both + add_column :decidim_users, :locked_at, :datetime + add_index :decidim_users, :unlock_token, unique: true + end +end diff --git a/db/migrate/20240418105180_add_omniauth_settings_to_decidim_organization.decidim.rb b/db/migrate/20240418105180_add_omniauth_settings_to_decidim_organization.decidim.rb new file mode 100644 index 0000000..8d0c775 --- /dev/null +++ b/db/migrate/20240418105180_add_omniauth_settings_to_decidim_organization.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20191113092826) + +class AddOmniauthSettingsToDecidimOrganization < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :omniauth_settings, :jsonb + end +end diff --git a/db/migrate/20240418105181_add_rich_text_editor_in_public_views_to_organizations.decidim.rb b/db/migrate/20240418105181_add_rich_text_editor_in_public_views_to_organizations.decidim.rb new file mode 100644 index 0000000..fe63830 --- /dev/null +++ b/db/migrate/20240418105181_add_rich_text_editor_in_public_views_to_organizations.decidim.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20191113144432) + +class AddRichTextEditorInPublicViewsToOrganizations < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, + :rich_text_editor_in_public_views, + :boolean, + default: false + end +end diff --git a/db/migrate/20240418105182_add_weight_to_categories.decidim.rb b/db/migrate/20240418105182_add_weight_to_categories.decidim.rb new file mode 100644 index 0000000..ffcea41 --- /dev/null +++ b/db/migrate/20240418105182_add_weight_to_categories.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20191118120529) + +class AddWeightToCategories < ActiveRecord::Migration[5.2] + def change + add_column :decidim_categories, :weight, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20240418105183_add_admin_terms_of_use_body_field_to_organization.decidim.rb b/db/migrate/20240418105183_add_admin_terms_of_use_body_field_to_organization.decidim.rb new file mode 100644 index 0000000..97e8cfb --- /dev/null +++ b/db/migrate/20240418105183_add_admin_terms_of_use_body_field_to_organization.decidim.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20191118123154) + +class AddAdminTermsOfUseBodyFieldToOrganization < ActiveRecord::Migration[5.2] + def change + change_table :decidim_organizations do |t| + t.jsonb :admin_terms_of_use_body, null: true + end + end +end diff --git a/db/migrate/20240418105184_create_decidim_endorsements.decidim.rb b/db/migrate/20240418105184_create_decidim_endorsements.decidim.rb new file mode 100644 index 0000000..7c6a8eb --- /dev/null +++ b/db/migrate/20240418105184_create_decidim_endorsements.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20191130151925) + +class CreateDecidimEndorsements < ActiveRecord::Migration[5.2] + def change + create_table :decidim_endorsements do |t| + t.references :resource, polymorphic: true + t.references :decidim_author, polymorphic: true, index: { name: "idx_endorsements_authors" } + t.integer :decidim_user_group_id, foreign_key: true + t.timestamps + t.index [:resource_type, :resource_id, :decidim_author_type, :decidim_author_id, :decidim_user_group_id], name: "idx_endorsements_rsrcs_and_authors", unique: true + end + end +end diff --git a/db/migrate/20240418105185_add_session_token_to_users.decidim.rb b/db/migrate/20240418105185_add_session_token_to_users.decidim.rb new file mode 100644 index 0000000..16c1722 --- /dev/null +++ b/db/migrate/20240418105185_add_session_token_to_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20191204075509) + +class AddSessionTokenToUsers < ActiveRecord::Migration[5.2] + def change + add_column :decidim_users, :session_token, :string + end +end diff --git a/db/migrate/20240418105186_remove_continuity_badges.decidim.rb b/db/migrate/20240418105186_remove_continuity_badges.decidim.rb new file mode 100644 index 0000000..1fb44b6 --- /dev/null +++ b/db/migrate/20240418105186_remove_continuity_badges.decidim.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20191212102051) + +class RemoveContinuityBadges < ActiveRecord::Migration[5.2] + class BadgeScore < ApplicationRecord + self.table_name = :decidim_gamification_badge_scores + end + + def change + drop_table :decidim_continuity_badge_statuses + + BadgeScore.where(badge_name: :continuity).delete_all + end +end diff --git a/db/migrate/20240418105187_add_organization_timezone.decidim.rb b/db/migrate/20240418105187_add_organization_timezone.decidim.rb new file mode 100644 index 0000000..df34cb5 --- /dev/null +++ b/db/migrate/20240418105187_add_organization_timezone.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200107142226) + +class AddOrganizationTimezone < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :time_zone, :string, limit: 255, default: "UTC" + end +end diff --git a/db/migrate/20240418105188_add_direct_message_types_to_users.decidim.rb b/db/migrate/20240418105188_add_direct_message_types_to_users.decidim.rb new file mode 100644 index 0000000..c7c66da --- /dev/null +++ b/db/migrate/20240418105188_add_direct_message_types_to_users.decidim.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200211173227) + +class AddDirectMessageTypesToUsers < ActiveRecord::Migration[5.2] + class UserBaseEntity < ApplicationRecord + self.table_name = :decidim_users + self.inheritance_column = nil # disable the default inheritance + end + + def change + add_column :decidim_users, :direct_message_types, :string, default: "all" + # rubocop:disable Rails/SkipsModelValidations + UserBaseEntity.update_all(direct_message_types: "all") + # rubocop:enable Rails/SkipsModelValidations + + change_column_null :decidim_users, :direct_message_types, false + end +end diff --git a/db/migrate/20240418105189_index_foreign_keys_in_decidim_action_logs.decidim.rb b/db/migrate/20240418105189_index_foreign_keys_in_decidim_action_logs.decidim.rb new file mode 100644 index 0000000..4b5641b --- /dev/null +++ b/db/migrate/20240418105189_index_foreign_keys_in_decidim_action_logs.decidim.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200320105904) + +class IndexForeignKeysInDecidimActionLogs < ActiveRecord::Migration[5.2] + def change + add_index :decidim_action_logs, :decidim_area_id + add_index :decidim_action_logs, :decidim_scope_id + add_index :decidim_action_logs, :version_id + end +end diff --git a/db/migrate/20240418105190_index_foreign_keys_in_decidim_amendments.decidim.rb b/db/migrate/20240418105190_index_foreign_keys_in_decidim_amendments.decidim.rb new file mode 100644 index 0000000..27ccc70 --- /dev/null +++ b/db/migrate/20240418105190_index_foreign_keys_in_decidim_amendments.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200320105905) + +class IndexForeignKeysInDecidimAmendments < ActiveRecord::Migration[5.2] + def change + add_index :decidim_amendments, :decidim_emendation_id + end +end diff --git a/db/migrate/20240418105191_index_foreign_keys_in_decidim_authorizations.decidim.rb b/db/migrate/20240418105191_index_foreign_keys_in_decidim_authorizations.decidim.rb new file mode 100644 index 0000000..b2f329b --- /dev/null +++ b/db/migrate/20240418105191_index_foreign_keys_in_decidim_authorizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200320105909) + +class IndexForeignKeysInDecidimAuthorizations < ActiveRecord::Migration[5.2] + def change + add_index :decidim_authorizations, :unique_id + end +end diff --git a/db/migrate/20240418105192_index_foreign_keys_in_decidim_contextual_help_sections.decidim.rb b/db/migrate/20240418105192_index_foreign_keys_in_decidim_contextual_help_sections.decidim.rb new file mode 100644 index 0000000..b670287 --- /dev/null +++ b/db/migrate/20240418105192_index_foreign_keys_in_decidim_contextual_help_sections.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200320105917) + +class IndexForeignKeysInDecidimContextualHelpSections < ActiveRecord::Migration[5.2] + def change + add_index :decidim_contextual_help_sections, :section_id + end +end diff --git a/db/migrate/20240418105193_index_foreign_keys_in_decidim_endorsements.decidim.rb b/db/migrate/20240418105193_index_foreign_keys_in_decidim_endorsements.decidim.rb new file mode 100644 index 0000000..6e69538 --- /dev/null +++ b/db/migrate/20240418105193_index_foreign_keys_in_decidim_endorsements.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200320105919) + +class IndexForeignKeysInDecidimEndorsements < ActiveRecord::Migration[5.2] + def change + add_index :decidim_endorsements, :decidim_user_group_id + end +end diff --git a/db/migrate/20240418105194_index_foreign_keys_in_decidim_notifications.decidim.rb b/db/migrate/20240418105194_index_foreign_keys_in_decidim_notifications.decidim.rb new file mode 100644 index 0000000..a34e2c9 --- /dev/null +++ b/db/migrate/20240418105194_index_foreign_keys_in_decidim_notifications.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200320105923) + +class IndexForeignKeysInDecidimNotifications < ActiveRecord::Migration[5.2] + def change + add_index :decidim_notifications, :decidim_resource_id + end +end diff --git a/db/migrate/20240418105195_index_foreign_keys_in_oauth_access_grants.decidim.rb b/db/migrate/20240418105195_index_foreign_keys_in_oauth_access_grants.decidim.rb new file mode 100644 index 0000000..6878577 --- /dev/null +++ b/db/migrate/20240418105195_index_foreign_keys_in_oauth_access_grants.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200320105927) + +class IndexForeignKeysInOAuthAccessGrants < ActiveRecord::Migration[5.2] + def change + add_index :oauth_access_grants, :resource_owner_id + end +end diff --git a/db/migrate/20240418105196_add_id_to_content_blocks_scope.decidim.rb b/db/migrate/20240418105196_add_id_to_content_blocks_scope.decidim.rb new file mode 100644 index 0000000..7c4d644 --- /dev/null +++ b/db/migrate/20240418105196_add_id_to_content_blocks_scope.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200323094443) + +class AddIdToContentBlocksScope < ActiveRecord::Migration[5.2] + def change + add_column :decidim_content_blocks, :scoped_resource_id, :integer + end +end diff --git a/db/migrate/20240418105197_rename_scope_column.decidim.rb b/db/migrate/20240418105197_rename_scope_column.decidim.rb new file mode 100644 index 0000000..5bf3949 --- /dev/null +++ b/db/migrate/20240418105197_rename_scope_column.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200326102407) + +class RenameScopeColumn < ActiveRecord::Migration[5.2] + def change + rename_column :decidim_content_blocks, :scope, :scope_name + end +end diff --git a/db/migrate/20240418105198_migrate_newsletters_to_templates.decidim.rb b/db/migrate/20240418105198_migrate_newsletters_to_templates.decidim.rb new file mode 100644 index 0000000..6b8c804 --- /dev/null +++ b/db/migrate/20240418105198_migrate_newsletters_to_templates.decidim.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200327082257) + +class MigrateNewslettersToTemplates < ActiveRecord::Migration[5.2] + class ContentBlock < ApplicationRecord + self.table_name = :decidim_content_blocks + end + + class Newsletter < ApplicationRecord + self.table_name = :decidim_newsletters + end + + def change + remove_index :decidim_content_blocks, name: "idx_dcdm_content_blocks_uniq_org_id_scope_manifest_name" + + Newsletter.find_each do |newsletter| + existing_content_block = ContentBlock + .where(decidim_organization_id: newsletter.organization_id) + .where(scope_name: :newsletter_template) + .find_by(scoped_resource_id: newsletter.id) + + next if existing_content_block + + content_block = ContentBlock.new( + decidim_organization_id: newsletter.organization_id, + manifest_name: :basic_only_text, + scope_name: :newsletter_template, + scoped_resource_id: newsletter.id, + settings: newsletter.body.transform_keys { |key| "body_#{key}" } + ) + content_block.save! + end + end +end diff --git a/db/migrate/20240418105199_remove_newsletter_body.decidim.rb b/db/migrate/20240418105199_remove_newsletter_body.decidim.rb new file mode 100644 index 0000000..05bb2fb --- /dev/null +++ b/db/migrate/20240418105199_remove_newsletter_body.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200327082954) + +class RemoveNewsletterBody < ActiveRecord::Migration[5.2] + def change + remove_column :decidim_newsletters, :body + end +end diff --git a/db/migrate/20240418105200_add_index_on_content_block_scope_id.decidim.rb b/db/migrate/20240418105200_add_index_on_content_block_scope_id.decidim.rb new file mode 100644 index 0000000..564c3b1 --- /dev/null +++ b/db/migrate/20240418105200_add_index_on_content_block_scope_id.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200401073419) + +class AddIndexOnContentBlockScopeId < ActiveRecord::Migration[5.2] + def change + add_index( + :decidim_content_blocks, + [:decidim_organization_id, :scope_name, :scoped_resource_id, :manifest_name], + name: "idx_decidim_content_blocks_org_id_scope_scope_id_manifest" + ) + end +end diff --git a/db/migrate/20240418105201_add_enable_machine_translation_to_decidim_organizations.decidim.rb b/db/migrate/20240418105201_add_enable_machine_translation_to_decidim_organizations.decidim.rb new file mode 100644 index 0000000..9eaeef3 --- /dev/null +++ b/db/migrate/20240418105201_add_enable_machine_translation_to_decidim_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200525184143) + +class AddEnableMachineTranslationToDecidimOrganizations < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :enable_machine_translations, :boolean, default: false + end +end diff --git a/db/migrate/20240418105202_create_decidim_share_tokens.decidim.rb b/db/migrate/20240418105202_create_decidim_share_tokens.decidim.rb new file mode 100644 index 0000000..8a721d3 --- /dev/null +++ b/db/migrate/20240418105202_create_decidim_share_tokens.decidim.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200702073419) + +class CreateDecidimShareTokens < ActiveRecord::Migration[5.2] + def change + create_table :decidim_share_tokens do |t| + t.references :decidim_organization, null: false, index: true + t.references :decidim_user, null: false, index: true + t.references :token_for, polymorphic: true, null: false, index: { name: "decidim_share_tokens_token_for" } + t.string :token, null: false + t.integer :times_used, default: 0 + t.datetime :created_at + t.datetime :last_used_at + t.datetime :expires_at + end + end +end diff --git a/db/migrate/20240418105203_add_comments_max_length_to_decidim_organization.decidim.rb b/db/migrate/20240418105203_add_comments_max_length_to_decidim_organization.decidim.rb new file mode 100644 index 0000000..62d092d --- /dev/null +++ b/db/migrate/20240418105203_add_comments_max_length_to_decidim_organization.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200707132401) + +class AddCommentsMaxLengthToDecidimOrganization < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :comments_max_length, :integer, default: 1000 + end +end diff --git a/db/migrate/20240418105204_add_file_upload_settings_to_decidim_organizations.decidim.rb b/db/migrate/20240418105204_add_file_upload_settings_to_decidim_organizations.decidim.rb new file mode 100644 index 0000000..112755e --- /dev/null +++ b/db/migrate/20240418105204_add_file_upload_settings_to_decidim_organizations.decidim.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200730142511) + +class AddFileUploadSettingsToDecidimOrganizations < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :file_upload_settings, :jsonb + + reversible do |dir| + dir.up do + Decidim.configure do |config| + # Even when these configurations have been deleted, they are available + # in the config object if they are defined by the initializer. + attachment_size = config.fetch(:maximum_attachment_size, 10.megabytes) + avatar_size = config.fetch(:maximum_avatar_size, 5.megabytes) + + # Update all organizations with the default file upload settings. + Decidim::Organization.all.each do |organization| + organization.update( + file_upload_settings: default_settings.merge( + "maximum_file_size" => { + "default" => attachment_size / 1.megabyte, + "avatar" => avatar_size / 1.megabyte + } + ) + ) + end + end + end + end + end + + private + + def default_settings + Decidim::OrganizationSettings.default(:upload) + end +end diff --git a/db/migrate/20240418105205_add_machine_translation_display_priority_to_organizations.decidim.rb b/db/migrate/20240418105205_add_machine_translation_display_priority_to_organizations.decidim.rb new file mode 100644 index 0000000..af3b72f --- /dev/null +++ b/db/migrate/20240418105205_add_machine_translation_display_priority_to_organizations.decidim.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200806092109) + +class AddMachineTranslationDisplayPriorityToOrganizations < ActiveRecord::Migration[5.2] + class Organization < ApplicationRecord + self.table_name = "decidim_organizations" + end + + def change + add_column :decidim_organizations, :machine_translation_display_priority, :string + + Organization.reset_column_information + Organization.update_all(machine_translation_display_priority: :original) # rubocop:disable Rails/SkipsModelValidations + + change_column_default :decidim_organizations, :machine_translation_display_priority, "original" + change_column_null :decidim_organizations, :machine_translation_display_priority, false + end +end diff --git a/db/migrate/20240418105206_remove_show_statistics_from_organizations.decidim.rb b/db/migrate/20240418105206_remove_show_statistics_from_organizations.decidim.rb new file mode 100644 index 0000000..cb77c10 --- /dev/null +++ b/db/migrate/20240418105206_remove_show_statistics_from_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20200929171508) + +class RemoveShowStatisticsFromOrganizations < ActiveRecord::Migration[5.2] + def change + remove_column :decidim_organizations, :show_statistics + end +end diff --git a/db/migrate/20240418105207_remove_notifications_with_continuity_badge.decidim.rb b/db/migrate/20240418105207_remove_notifications_with_continuity_badge.decidim.rb new file mode 100644 index 0000000..bf302f3 --- /dev/null +++ b/db/migrate/20240418105207_remove_notifications_with_continuity_badge.decidim.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201004160335) + +class RemoveNotificationsWithContinuityBadge < ActiveRecord::Migration[5.2] + def up + Decidim::Notification.where("extra->>'badge_name' =?", "continuity").delete_all + end + + def down; end +end diff --git a/db/migrate/20240418105208_create_decidim_user_moderations.decidim.rb b/db/migrate/20240418105208_create_decidim_user_moderations.decidim.rb new file mode 100644 index 0000000..61c5d18 --- /dev/null +++ b/db/migrate/20240418105208_create_decidim_user_moderations.decidim.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201010124755) + +class CreateDecidimUserModerations < ActiveRecord::Migration[5.2] + def change + create_table :decidim_user_moderations do |t| + t.belongs_to :decidim_user, foreign_key: true + t.integer :report_count, default: 0, null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105209_create_decidim_user_reports.decidim.rb b/db/migrate/20240418105209_create_decidim_user_reports.decidim.rb new file mode 100644 index 0000000..79bdadb --- /dev/null +++ b/db/migrate/20240418105209_create_decidim_user_reports.decidim.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201010124756) + +class CreateDecidimUserReports < ActiveRecord::Migration[5.2] + def change + create_table :decidim_user_reports do |t| + t.integer :user_moderation_id, foreign_key: true + t.integer :user_id, null: false + t.string :reason + t.text :details + + t.timestamps + end + add_foreign_key :decidim_user_reports, :decidim_user_moderations, column: :user_moderation_id + add_foreign_key :decidim_user_reports, :decidim_users, column: :user_id + end +end diff --git a/db/migrate/20240418105210_add_suspension_fields_to_decidim_users.decidim.rb b/db/migrate/20240418105210_add_suspension_fields_to_decidim_users.decidim.rb new file mode 100644 index 0000000..d839896 --- /dev/null +++ b/db/migrate/20240418105210_add_suspension_fields_to_decidim_users.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201010224433) + +class AddSuspensionFieldsToDecidimUsers < ActiveRecord::Migration[5.2] + def change + add_column :decidim_users, :suspended, :boolean, default: false, null: false + add_column :decidim_users, :suspended_at, :datetime + end +end diff --git a/db/migrate/20240418105211_create_decidim_user_suspensions.decidim.rb b/db/migrate/20240418105211_create_decidim_user_suspensions.decidim.rb new file mode 100644 index 0000000..68b453a --- /dev/null +++ b/db/migrate/20240418105211_create_decidim_user_suspensions.decidim.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201011074641) + +class CreateDecidimUserSuspensions < ActiveRecord::Migration[5.2] + def change + create_table :decidim_user_suspensions do |t| + t.belongs_to :decidim_user, foreign_key: true + t.integer :suspending_user_id + t.text :justification + + t.timestamps + end + add_foreign_key :decidim_user_suspensions, :decidim_users, column: :suspending_user_id + end +end diff --git a/db/migrate/20240418105212_add_current_suspension_id_to_decidim_users.decidim.rb b/db/migrate/20240418105212_add_current_suspension_id_to_decidim_users.decidim.rb new file mode 100644 index 0000000..fa5752e --- /dev/null +++ b/db/migrate/20240418105212_add_current_suspension_id_to_decidim_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201011081626) + +class AddCurrentSuspensionIdToDecidimUsers < ActiveRecord::Migration[5.2] + def change + add_column :decidim_users, :suspension_id, :integer + end +end diff --git a/db/migrate/20240418105213_add_reported_content_to_moderations.decidim.rb b/db/migrate/20240418105213_add_reported_content_to_moderations.decidim.rb new file mode 100644 index 0000000..d37af03 --- /dev/null +++ b/db/migrate/20240418105213_add_reported_content_to_moderations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201013071533) + +class AddReportedContentToModerations < ActiveRecord::Migration[5.2] + def change + add_column :decidim_moderations, :reported_content, :text + end +end diff --git a/db/migrate/20240418105214_add_locale_to_moderation_reports.decidim.rb b/db/migrate/20240418105214_add_locale_to_moderation_reports.decidim.rb new file mode 100644 index 0000000..36bca7b --- /dev/null +++ b/db/migrate/20240418105214_add_locale_to_moderation_reports.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201019074554) + +class AddLocaleToModerationReports < ActiveRecord::Migration[5.2] + def change + add_column :decidim_reports, :locale, :string + end +end diff --git a/db/migrate/20240418105215_encrypt_authorization_metadatas.decidim.rb b/db/migrate/20240418105215_encrypt_authorization_metadatas.decidim.rb new file mode 100644 index 0000000..0583061 --- /dev/null +++ b/db/migrate/20240418105215_encrypt_authorization_metadatas.decidim.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201127114444) + +class EncryptAuthorizationMetadatas < ActiveRecord::Migration[5.2] + def up + Decidim::Authorization.all.each do |auth| + # Re-setting these values will internally convert the hash values to + # encypted values + auth.update!( + metadata: auth.metadata, + verification_metadata: auth.verification_metadata + ) + end + end + + def down + Decidim::Authorization.all.each do |auth| + # rubocop:disable Rails/SkipsModelValidations + auth.update_columns( + metadata: decrypt_hash(auth.metadata), + verification_metadata: decrypt_hash(auth.verification_metadata) + ) + # rubocop:enable Rails/SkipsModelValidations + end + end + + private + + def decrypt_hash(hash) + hash.transform_values do |value| + ActiveSupport::JSON.decode(Decidim::AttributeEncryptor.decrypt(value)) + rescue ActiveSupport::MessageEncryptor::InvalidMessage, ActiveSupport::MessageVerifier::InvalidSignature + value + end + end +end diff --git a/db/migrate/20240418105216_add_allow_public_access_to_static_pages.decidim.rb b/db/migrate/20240418105216_add_allow_public_access_to_static_pages.decidim.rb new file mode 100644 index 0000000..9256669 --- /dev/null +++ b/db/migrate/20240418105216_add_allow_public_access_to_static_pages.decidim.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201128130723) + +class AddAllowPublicAccessToStaticPages < ActiveRecord::Migration[5.2] + def change + add_column :decidim_static_pages, :allow_public_access, :boolean, null: false, default: false + + reversible do |direction| + direction.up do + # rubocop:disable Rails/SkipsModelValidations + Decidim::StaticPage.where(slug: ["terms-and-conditions", "terms-of-service"]).update_all( + allow_public_access: true + ) + # rubocop:enable Rails/SkipsModelValidations + end + end + end +end diff --git a/db/migrate/20240418105217_update_table_block_user_functionality.decidim.rb b/db/migrate/20240418105217_update_table_block_user_functionality.decidim.rb new file mode 100644 index 0000000..a5b9c0e --- /dev/null +++ b/db/migrate/20240418105217_update_table_block_user_functionality.decidim.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201218144706) + +class UpdateTableBlockUserFunctionality < ActiveRecord::Migration[5.2] + def change + rename_column :decidim_user_suspensions, :suspending_user_id, :blocking_user_id + rename_table :decidim_user_suspensions, :decidim_user_blocks + end +end diff --git a/db/migrate/20240418105218_rename_decidim_user_fields_for_block_functionality.decidim.rb b/db/migrate/20240418105218_rename_decidim_user_fields_for_block_functionality.decidim.rb new file mode 100644 index 0000000..ef43862 --- /dev/null +++ b/db/migrate/20240418105218_rename_decidim_user_fields_for_block_functionality.decidim.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20201218145252) + +class RenameDecidimUserFieldsForBlockFunctionality < ActiveRecord::Migration[5.2] + def change + rename_column :decidim_users, :suspended, :blocked + rename_column :decidim_users, :suspended_at, :blocked_at + rename_column :decidim_users, :suspension_id, :block_id + end +end diff --git a/db/migrate/20240418105219_add_email_on_moderations_to_users.decidim.rb b/db/migrate/20240418105219_add_email_on_moderations_to_users.decidim.rb new file mode 100644 index 0000000..c04978d --- /dev/null +++ b/db/migrate/20240418105219_add_email_on_moderations_to_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210208134328) + +class AddEmailOnModerationsToUsers < ActiveRecord::Migration[5.2] + def change + add_column :decidim_users, :email_on_moderations, :boolean, default: true + end +end diff --git a/db/migrate/20240418105220_add_external_domain_whitelist_to_organization.decidim.rb b/db/migrate/20240418105220_add_external_domain_whitelist_to_organization.decidim.rb new file mode 100644 index 0000000..3aa8eec --- /dev/null +++ b/db/migrate/20240418105220_add_external_domain_whitelist_to_organization.decidim.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210210114657) + +class AddExternalDomainWhitelistToOrganization < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :external_domain_whitelist, :string, array: true, default: [] + + reversible do |direction| + direction.up do + # rubocop:disable Rails/SkipsModelValidations + Decidim::Organization.update_all("external_domain_whitelist = ARRAY['decidim.org', 'github.com']") + # rubocop:enable Rails/SkipsModelValidations + end + end + end +end diff --git a/db/migrate/20240418105221_invalidate_all_sessions_for_deleted_users.decidim.rb b/db/migrate/20240418105221_invalidate_all_sessions_for_deleted_users.decidim.rb new file mode 100644 index 0000000..51e0b62 --- /dev/null +++ b/db/migrate/20240418105221_invalidate_all_sessions_for_deleted_users.decidim.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210302150803) + +class InvalidateAllSessionsForDeletedUsers < ActiveRecord::Migration[5.2] + class User < ApplicationRecord + self.table_name = "decidim_users" + self.inheritance_column = nil # disable the default inheritance + + default_scope { where(type: "Decidim::User") } + end + + def up + User.where.not(deleted_at: nil).find_each do |user| + user.update!(session_token: SecureRandom.hex) + end + end + + def down; end +end diff --git a/db/migrate/20240418105222_create_active_storage_tables.decidim.rb b/db/migrate/20240418105222_create_active_storage_tables.decidim.rb new file mode 100644 index 0000000..0afc5f4 --- /dev/null +++ b/db/migrate/20240418105222_create_active_storage_tables.decidim.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210309190009) + +# This migration comes from active_storage (originally 20170806125915) +class CreateActiveStorageTables < ActiveRecord::Migration[5.2] + def change + create_table :active_storage_blobs do |t| + t.string :key, null: false + t.string :filename, null: false + t.string :content_type + t.text :metadata + t.bigint :byte_size, null: false + t.string :checksum, null: false + t.datetime :created_at, null: false + + t.index [:key], unique: true + end + + create_table :active_storage_attachments do |t| + t.string :name, null: false + t.references :record, null: false, polymorphic: true, index: false + t.references :blob, null: false + + t.datetime :created_at, null: false + + t.index [:record_type, :record_id, :name, :blob_id], name: "index_active_storage_attachments_uniqueness", unique: true + t.foreign_key :active_storage_blobs, column: :blob_id + end + end +end diff --git a/db/migrate/20240418105223_add_followable_counter_cache_to_users.decidim.rb b/db/migrate/20240418105223_add_followable_counter_cache_to_users.decidim.rb new file mode 100644 index 0000000..66008a8 --- /dev/null +++ b/db/migrate/20240418105223_add_followable_counter_cache_to_users.decidim.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210310120640) + +class AddFollowableCounterCacheToUsers < ActiveRecord::Migration[5.2] + class Follow < ApplicationRecord + self.table_name = "decidim_follows" + end + + class User < ApplicationRecord + self.table_name = "decidim_users" + self.inheritance_column = nil # disable the default inheritance + + default_scope { where(type: "Decidim::User") } + end + + def change + add_column :decidim_users, :follows_count, :integer, null: false, default: 0, index: true + + reversible do |dir| + dir.up do + User.find_each do |record| + record.update!(follows_count: Follow.where(decidim_user_id: record.id).count) + end + end + end + end +end diff --git a/db/migrate/20240418105224_allow_null_organization_logo_column_in_oauth_applications_table.decidim.rb b/db/migrate/20240418105224_allow_null_organization_logo_column_in_oauth_applications_table.decidim.rb new file mode 100644 index 0000000..cd23943 --- /dev/null +++ b/db/migrate/20240418105224_allow_null_organization_logo_column_in_oauth_applications_table.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210407190753) + +class AllowNullOrganizationLogoColumnInOAuthApplicationsTable < ActiveRecord::Migration[6.0] + def change + change_column_null :oauth_applications, :organization_logo, true + end +end diff --git a/db/migrate/20240418105225_add_enable_participatory_space_filters_to_organization.decidim.rb b/db/migrate/20240418105225_add_enable_participatory_space_filters_to_organization.decidim.rb new file mode 100644 index 0000000..48d494f --- /dev/null +++ b/db/migrate/20240418105225_add_enable_participatory_space_filters_to_organization.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210412120115) + +class AddEnableParticipatorySpaceFiltersToOrganization < ActiveRecord::Migration[5.2] + def change + add_column :decidim_organizations, :enable_participatory_space_filters, :boolean, default: true + end +end diff --git a/db/migrate/20240418105226_create_decidim_content_block_attachments.decidim.rb b/db/migrate/20240418105226_create_decidim_content_block_attachments.decidim.rb new file mode 100644 index 0000000..cbcad61 --- /dev/null +++ b/db/migrate/20240418105226_create_decidim_content_block_attachments.decidim.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210419165805) + +class CreateDecidimContentBlockAttachments < ActiveRecord::Migration[6.0] + def change + create_table :decidim_content_block_attachments do |t| + t.string :name + t.references :decidim_content_block, null: false, index: { name: "decidim_content_block_attachments_on_content_block" } + end + end +end diff --git a/db/migrate/20240418105227_fix_blocked_user_names_in_action_log.decidim.rb b/db/migrate/20240418105227_fix_blocked_user_names_in_action_log.decidim.rb new file mode 100644 index 0000000..0f3e167 --- /dev/null +++ b/db/migrate/20240418105227_fix_blocked_user_names_in_action_log.decidim.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210629172525) + +class FixBlockedUserNamesInActionLog < ActiveRecord::Migration[6.0] + def change + reversible do |dir| + dir.up do + execute_query( + update_query( + "coalesce(decidim_users.extended_data->>'user_name', decidim_users.name)" + ) + ) + end + + dir.down do + execute_query(update_query("'Blocked user'::text")) + end + end + end + + private + + def update_query(user_name_replacement) + <<~SQL.squish + UPDATE decidim_action_logs + SET extra = jsonb_set( + decidim_action_logs.extra, + '{resource,title}', + to_jsonb(#{user_name_replacement}) + ) + FROM decidim_users + WHERE decidim_users.id = decidim_action_logs.resource_id + AND decidim_action_logs.resource_type = $1 AND decidim_action_logs.action = $2 + SQL + end + + def execute_query(query) + rawconn.prepare("statement1", query) + rawconn.exec_prepared("statement1", ["Decidim::User", "block"]) + rawconn.exec("DEALLOCATE statement1") + end + + def rawconn + ActiveRecord::Base.connection.raw_connection + end +end diff --git a/db/migrate/20240418105228_create_decidim_editor_images.decidim.rb b/db/migrate/20240418105228_create_decidim_editor_images.decidim.rb new file mode 100644 index 0000000..b67e129 --- /dev/null +++ b/db/migrate/20240418105228_create_decidim_editor_images.decidim.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210730112319) + +class CreateDecidimEditorImages < ActiveRecord::Migration[6.0] + def change + create_table :decidim_editor_images do |t| + t.references :decidim_author, null: false, foreign_key: { to_table: :decidim_users }, index: { name: "decidim_editor_images_author" } + t.references :decidim_organization, null: false, foreign_key: true, index: { name: "decidim_editor_images_constraint_organization" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105229_add_service_name_to_active_storage_blobs.decidim.rb b/db/migrate/20240418105229_add_service_name_to_active_storage_blobs.decidim.rb new file mode 100644 index 0000000..316952e --- /dev/null +++ b/db/migrate/20240418105229_add_service_name_to_active_storage_blobs.decidim.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210831181634) + +# This migration comes from active_storage (originally 20190112182829) +class AddServiceNameToActiveStorageBlobs < ActiveRecord::Migration[6.0] + def up + return if column_exists?(:active_storage_blobs, :service_name) + + add_column :active_storage_blobs, :service_name, :string + # rubocop:disable Lint/AssignmentInCondition + # rubocop:disable Rails/SkipsModelValidations + if configured_service = ActiveStorage::Blob.service.name + ActiveStorage::Blob.unscoped.update_all(service_name: configured_service) + end + # rubocop:enable Lint/AssignmentInCondition + # rubocop:enable Rails/SkipsModelValidations + change_column :active_storage_blobs, :service_name, :string, null: false + end + + def down + remove_column :active_storage_blobs, :service_name + end +end diff --git a/db/migrate/20240418105230_create_active_storage_variant_records.decidim.rb b/db/migrate/20240418105230_create_active_storage_variant_records.decidim.rb new file mode 100644 index 0000000..ef13a6c --- /dev/null +++ b/db/migrate/20240418105230_create_active_storage_variant_records.decidim.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20210831181635) + +# This migration comes from active_storage (originally 20191206030411) +class CreateActiveStorageVariantRecords < ActiveRecord::Migration[6.0] + def change + create_table :active_storage_variant_records do |t| + t.belongs_to :blob, null: false, index: false + t.string :variation_digest, null: false + + t.index [:blob_id, :variation_digest], name: "index_active_storage_variant_records_uniqueness", unique: true + t.foreign_key :active_storage_blobs, column: :blob_id + end + end +end diff --git a/db/migrate/20240418105231_add_timestamps_to_content_blocks.decidim.rb b/db/migrate/20240418105231_add_timestamps_to_content_blocks.decidim.rb new file mode 100644 index 0000000..1fb3c76 --- /dev/null +++ b/db/migrate/20240418105231_add_timestamps_to_content_blocks.decidim.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20211126183540) + +class AddTimestampsToContentBlocks < ActiveRecord::Migration[6.0] + def up + add_timestamps :decidim_content_blocks, default: Time.zone.now + change_column_default :decidim_content_blocks, :created_at, nil + change_column_default :decidim_content_blocks, :updated_at, nil + end + + def down + remove_column :decidim_content_blocks, :updated_at + remove_column :decidim_content_blocks, :created_at + end +end diff --git a/db/migrate/20240418105232_create_decidim_reminders.decidim.rb b/db/migrate/20240418105232_create_decidim_reminders.decidim.rb new file mode 100644 index 0000000..c3e7594 --- /dev/null +++ b/db/migrate/20240418105232_create_decidim_reminders.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20211208155453) + +class CreateDecidimReminders < ActiveRecord::Migration[6.0] + def change + create_table :decidim_reminders do |t| + t.belongs_to :decidim_user, index: true, foreign_key: true, null: false + t.belongs_to :decidim_component, index: true, foreign_key: true + t.timestamps + end + end +end diff --git a/db/migrate/20240418105233_create_decidim_reminder_records.decidim.rb b/db/migrate/20240418105233_create_decidim_reminder_records.decidim.rb new file mode 100644 index 0000000..63170c9 --- /dev/null +++ b/db/migrate/20240418105233_create_decidim_reminder_records.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20211209121025) + +class CreateDecidimReminderRecords < ActiveRecord::Migration[6.0] + def change + create_table :decidim_reminder_records do |t| + t.string :state, :string, index: true, default: "active" + t.belongs_to :decidim_reminder, index: true, foreign_key: true + t.belongs_to :remindable, polymorphic: true, null: false, index: { name: "index_decidim_reminder_records_remindable" } + end + end +end diff --git a/db/migrate/20240418105234_create_decidim_reminder_deliveries.decidim.rb b/db/migrate/20240418105234_create_decidim_reminder_deliveries.decidim.rb new file mode 100644 index 0000000..aae6e2a --- /dev/null +++ b/db/migrate/20240418105234_create_decidim_reminder_deliveries.decidim.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20211209121040) + +class CreateDecidimReminderDeliveries < ActiveRecord::Migration[6.0] + def change + create_table :decidim_reminder_deliveries do |t| + t.belongs_to :decidim_reminder, index: true, foreign_key: true + t.timestamps + end + end +end diff --git a/db/migrate/20240418105235_change_required_description_categories.decidim.rb b/db/migrate/20240418105235_change_required_description_categories.decidim.rb new file mode 100644 index 0000000..65966c9 --- /dev/null +++ b/db/migrate/20240418105235_change_required_description_categories.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20220118121921) + +class ChangeRequiredDescriptionCategories < ActiveRecord::Migration[6.0] + def change + change_column_null :decidim_categories, :description, true + end +end diff --git a/db/migrate/20240418105236_add_notification_settings_to_users.decidim.rb b/db/migrate/20240418105236_add_notification_settings_to_users.decidim.rb new file mode 100644 index 0000000..f5d061a --- /dev/null +++ b/db/migrate/20240418105236_add_notification_settings_to_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20220127113419) + +class AddNotificationSettingsToUsers < ActiveRecord::Migration[6.0] + def change + add_column :decidim_users, :notification_settings, :jsonb, default: {} + end +end diff --git a/db/migrate/20240418105237_add_notifications_sending_frequency_to_users.decidim.rb b/db/migrate/20240418105237_add_notifications_sending_frequency_to_users.decidim.rb new file mode 100644 index 0000000..02ecfe6 --- /dev/null +++ b/db/migrate/20240418105237_add_notifications_sending_frequency_to_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20220203121137) + +class AddNotificationsSendingFrequencyToUsers < ActiveRecord::Migration[6.0] + def change + add_column :decidim_users, :notifications_sending_frequency, :string, default: "daily", index: true + end +end diff --git a/db/migrate/20240418105238_add_digest_sent_at_to_users.decidim.rb b/db/migrate/20240418105238_add_digest_sent_at_to_users.decidim.rb new file mode 100644 index 0000000..f75a48b --- /dev/null +++ b/db/migrate/20240418105238_add_digest_sent_at_to_users.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20220215172439) + +class AddDigestSentAtToUsers < ActiveRecord::Migration[6.0] + def change + add_column :decidim_users, :digest_sent_at, :datetime + end +end diff --git a/db/migrate/20240418105239_add_index_to_decidim_users_notifications_sending_frequency.decidim.rb b/db/migrate/20240418105239_add_index_to_decidim_users_notifications_sending_frequency.decidim.rb new file mode 100644 index 0000000..aaa7996 --- /dev/null +++ b/db/migrate/20240418105239_add_index_to_decidim_users_notifications_sending_frequency.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20220323195258) + +class AddIndexToDecidimUsersNotificationsSendingFrequency < ActiveRecord::Migration[6.0] + def change + add_index :decidim_users, :notifications_sending_frequency + end +end diff --git a/db/migrate/20240418105240_drop_emails_on_notifications_flag_from_user.decidim.rb b/db/migrate/20240418105240_drop_emails_on_notifications_flag_from_user.decidim.rb new file mode 100644 index 0000000..f5048f8 --- /dev/null +++ b/db/migrate/20240418105240_drop_emails_on_notifications_flag_from_user.decidim.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20220427142214) + +class DropEmailsOnNotificationsFlagFromUser < ActiveRecord::Migration[5.1] + class DecidimUser < ApplicationRecord + self.table_name = :decidim_users + end + + def change + # rubocop:disable Rails/SkipsModelValidations + DecidimUser.where(email_on_notification: true).update_all(notifications_sending_frequency: "real_time") + # rubocop:enable Rails/SkipsModelValidations + + remove_column :decidim_users, :email_on_notification + end +end diff --git a/db/migrate/20240418105241_add_previous_passwords_to_users.decidim.rb b/db/migrate/20240418105241_add_previous_passwords_to_users.decidim.rb new file mode 100644 index 0000000..bbd0d9f --- /dev/null +++ b/db/migrate/20240418105241_add_previous_passwords_to_users.decidim.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20220518094535) + +class AddPreviousPasswordsToUsers < ActiveRecord::Migration[6.1] + class User < ApplicationRecord + self.table_name = :decidim_users + end + + def change + add_column :decidim_users, :password_updated_at, :datetime + add_column :decidim_users, :previous_passwords, :string, array: true, default: [] + + reversible do |direction| + direction.up do + # rubocop:disable Rails/SkipsModelValidations + User.update_all("password_updated_at = updated_at") + # rubocop:enable Rails/SkipsModelValidations + end + end + end +end diff --git a/db/migrate/20240418105242_create_decidim_short_links.decidim.rb b/db/migrate/20240418105242_create_decidim_short_links.decidim.rb new file mode 100644 index 0000000..dbdc8a1 --- /dev/null +++ b/db/migrate/20240418105242_create_decidim_short_links.decidim.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20220524195530) + +class CreateDecidimShortLinks < ActiveRecord::Migration[6.1] + def change + create_table :decidim_short_links do |t| + t.references :decidim_organization, null: false, index: true + t.references :target, polymorphic: true, null: false, index: true + t.string :identifier, limit: 10, null: false + t.string :mounted_engine_name, index: true + t.string :route_name, index: true + t.jsonb :params + + t.timestamps + end + + add_index( + :decidim_short_links, + [:decidim_organization_id, :identifier], + unique: true, + name: "idx_decidim_short_links_organization_id_identifier" + ) + end +end diff --git a/db/migrate/20240418105243_create_decidim_authorization_transfers.decidim.rb b/db/migrate/20240418105243_create_decidim_authorization_transfers.decidim.rb new file mode 100644 index 0000000..49f21cf --- /dev/null +++ b/db/migrate/20240418105243_create_decidim_authorization_transfers.decidim.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20220629194812) + +class CreateDecidimAuthorizationTransfers < ActiveRecord::Migration[6.1] + def change + create_table :decidim_authorization_transfers do |t| + t.references :user, null: false, foreign_key: { to_table: :decidim_users }, index: true + t.references :source_user, null: false, foreign_key: { to_table: :decidim_users }, index: true + t.references :authorization, null: false, foreign_key: { to_table: :decidim_authorizations }, index: true + + t.datetime :created_at, null: false + end + + create_table :decidim_authorization_transfer_records do |t| + t.references :transfer, null: false, foreign_key: { to_table: :decidim_authorization_transfers }, index: true + t.references :resource, polymorphic: true, null: false + + t.datetime :created_at, null: false + end + end +end diff --git a/db/migrate/20240418105244_rename_terms_of_use.decidim.rb b/db/migrate/20240418105244_rename_terms_of_use.decidim.rb new file mode 100644 index 0000000..5c74f08 --- /dev/null +++ b/db/migrate/20240418105244_rename_terms_of_use.decidim.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20230322101707) + +class RenameTermsOfUse < ActiveRecord::Migration[6.1] + def change + rename_column :decidim_organizations, :admin_terms_of_use_body, :admin_terms_of_service_body + + # rubocop:disable Rails/SkipsModelValidations + reversible do |dir| + dir.up do + Decidim::StaticPage.where(slug: "terms-and-conditions").update_all( + slug: "terms-of-service" + ) + end + + dir.down do + Decidim::StaticPage.where(slug: "terms-of-service").update_all( + slug: "terms-and-conditions" + ) + end + end + # rubocop:enable Rails/SkipsModelValidations + end +end diff --git a/db/migrate/20240418105245_add_content_policy_to_decidim_organizations.decidim.rb b/db/migrate/20240418105245_add_content_policy_to_decidim_organizations.decidim.rb new file mode 100644 index 0000000..19c1260 --- /dev/null +++ b/db/migrate/20240418105245_add_content_policy_to_decidim_organizations.decidim.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20230409123300) + +class AddContentPolicyToDecidimOrganizations < ActiveRecord::Migration[6.1] + def change + add_column :decidim_organizations, :content_security_policy, :jsonb, default: {} + end +end diff --git a/db/migrate/20240418105246_change_states_on_amendments.decidim.rb b/db/migrate/20240418105246_change_states_on_amendments.decidim.rb new file mode 100644 index 0000000..1f0af8c --- /dev/null +++ b/db/migrate/20240418105246_change_states_on_amendments.decidim.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20230427105700) + +class ChangeStatesOnAmendments < ActiveRecord::Migration[6.1] + class Amendment < ApplicationRecord + self.table_name = :decidim_amendments + STATES = { draft: 0, evaluating: 10, accepted: 20, rejected: 30, withdrawn: -1 }.freeze + end + + def up + rename_column :decidim_amendments, :state, :old_state + add_column :decidim_amendments, :state, :integer, default: 0, null: false + + Amendment.reset_column_information + + Amendment::STATES.each_pair do |status, index| + Amendment.where(old_state: status).update_all(state: index) # rubocop:disable Rails/SkipsModelValidations + end + + remove_column :decidim_amendments, :old_state + end + + def down + rename_column :decidim_amendments, :state, :old_state + add_column :decidim_amendments, :state, :string, default: "draft", null: false + + Amendment.reset_column_information + + Amendment::STATES.each_pair do |status, index| + Amendment.where(old_state: index).update_all(state: status) # rubocop:disable Rails/SkipsModelValidations + end + + remove_column :decidim_amendments, :old_state + end +end diff --git a/db/migrate/20240418105247_change_states_on_reminder_records.decidim.rb b/db/migrate/20240418105247_change_states_on_reminder_records.decidim.rb new file mode 100644 index 0000000..68d8484 --- /dev/null +++ b/db/migrate/20240418105247_change_states_on_reminder_records.decidim.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20230427105701) + +class ChangeStatesOnReminderRecords < ActiveRecord::Migration[6.1] + class ReminderRecord < ApplicationRecord + self.table_name = :decidim_reminder_records + STATES = { active: 0, pending: 10, completed: 20, deleted: -1 }.freeze + end + + def up + rename_column :decidim_reminder_records, :state, :old_state + add_column :decidim_reminder_records, :state, :integer, default: 0, null: false + + ReminderRecord.reset_column_information + + ReminderRecord::STATES.each_pair do |status, index| + ReminderRecord.where(old_state: status).update_all(state: index) # rubocop:disable Rails/SkipsModelValidations + end + + remove_column :decidim_reminder_records, :old_state + end + + def down + rename_column :decidim_reminder_records, :state, :old_state + add_column :decidim_reminder_records, :state, :string, default: "draft", null: false + ReminderRecord.reset_column_information + + ReminderRecord::STATES.each_pair do |status, index| + ReminderRecord.where(old_state: index).update_all(state: status) # rubocop:disable Rails/SkipsModelValidations + end + + remove_column :decidim_reminder_records, :old_state + end +end diff --git a/db/migrate/20240418105248_change_default_value_for_decidim_endorsements.decidim.rb b/db/migrate/20240418105248_change_default_value_for_decidim_endorsements.decidim.rb new file mode 100644 index 0000000..8c079d4 --- /dev/null +++ b/db/migrate/20240418105248_change_default_value_for_decidim_endorsements.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20231027142329) + +class ChangeDefaultValueForDecidimEndorsements < ActiveRecord::Migration[6.1] + def up + change_column_default :decidim_endorsements, :decidim_user_group_id, 0 + end + + def down + change_column_default :decidim_endorsements, :decidim_user_group_id, nil + end +end diff --git a/db/migrate/20240418105249_remove_official_img_header.decidim.rb b/db/migrate/20240418105249_remove_official_img_header.decidim.rb new file mode 100644 index 0000000..5e418ee --- /dev/null +++ b/db/migrate/20240418105249_remove_official_img_header.decidim.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim (originally 20231123111229) + +class RemoveOfficialImgHeader < ActiveRecord::Migration[6.1] + def up + remove_column :decidim_organizations, :official_img_header + end + + def down + add_column :decidim_organizations, :official_img_header, :string + end +end diff --git a/db/migrate/20240418105250_devise_create_decidim_admins.decidim_system.rb b/db/migrate/20240418105250_devise_create_decidim_admins.decidim_system.rb new file mode 100644 index 0000000..ce45dbd --- /dev/null +++ b/db/migrate/20240418105250_devise_create_decidim_admins.decidim_system.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true +# This migration comes from decidim_system (originally 20160919105637) + +class DeviseCreateDecidimAdmins < ActiveRecord::Migration[5.0] + def change + create_table :decidim_system_admins do |t| + ## Database authenticatable + t.string :email, null: false, default: "" + t.string :encrypted_password, null: false, default: "" + + ## Recoverable + t.string :reset_password_token + t.datetime :reset_password_sent_at + + ## Rememberable + t.datetime :remember_created_at + + ## Lockable + t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts + t.string :unlock_token # Only if unlock strategy is :email or :both + t.datetime :locked_at + + t.timestamps null: false + end + + add_index :decidim_system_admins, :email, unique: true + add_index :decidim_system_admins, :reset_password_token, unique: true + end +end diff --git a/db/migrate/20240418105251_add_admin_participatory_process_user_roles.decidim_admin.rb b/db/migrate/20240418105251_add_admin_participatory_process_user_roles.decidim_admin.rb new file mode 100644 index 0000000..76dd848 --- /dev/null +++ b/db/migrate/20240418105251_add_admin_participatory_process_user_roles.decidim_admin.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_admin (originally 20161102144648) + +class AddAdminParticipatoryProcessUserRoles < ActiveRecord::Migration[5.0] + def change + create_table :decidim_admin_participatory_process_user_roles do |t| + t.integer :decidim_user_id + t.integer :decidim_participatory_process_id + t.string :role + t.timestamps + end + + add_index :decidim_admin_participatory_process_user_roles, + [:decidim_participatory_process_id, :decidim_user_id, :role], + unique: true, + name: "index_unique_user_and_process_role" + end +end diff --git a/db/migrate/20240418105252_rename_participatory_process_user_roles_table.decidim_admin.rb b/db/migrate/20240418105252_rename_participatory_process_user_roles_table.decidim_admin.rb new file mode 100644 index 0000000..012c346 --- /dev/null +++ b/db/migrate/20240418105252_rename_participatory_process_user_roles_table.decidim_admin.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_admin (originally 20170714083651) + +class RenameParticipatoryProcessUserRolesTable < ActiveRecord::Migration[5.1] + def change + rename_table :decidim_admin_participatory_process_user_roles, :decidim_participatory_process_user_roles + end +end diff --git a/db/migrate/20240418105253_add_officialization_to_users.decidim_admin.rb b/db/migrate/20240418105253_add_officialization_to_users.decidim_admin.rb new file mode 100644 index 0000000..bdea6f6 --- /dev/null +++ b/db/migrate/20240418105253_add_officialization_to_users.decidim_admin.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim_admin (originally 20171219154507) + +class AddOfficializationToUsers < ActiveRecord::Migration[5.1] + def change + add_column :decidim_users, :officialized_at, :datetime + add_column :decidim_users, :officialized_as, :jsonb + + add_index :decidim_users, :officialized_at + end +end diff --git a/db/migrate/20240418105254_add_reason_to_decidim_impersonation_logs.decidim_admin.rb b/db/migrate/20240418105254_add_reason_to_decidim_impersonation_logs.decidim_admin.rb new file mode 100644 index 0000000..66b8f85 --- /dev/null +++ b/db/migrate/20240418105254_add_reason_to_decidim_impersonation_logs.decidim_admin.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_admin (originally 20180413233318) + +class AddReasonToDecidimImpersonationLogs < ActiveRecord::Migration[5.1] + def change + add_column :decidim_impersonation_logs, :reason, :text + end +end diff --git a/db/migrate/20240418105255_add_accepted_admin_terms_at_field_to_users.decidim_admin.rb b/db/migrate/20240418105255_add_accepted_admin_terms_at_field_to_users.decidim_admin.rb new file mode 100644 index 0000000..1cdebb6 --- /dev/null +++ b/db/migrate/20240418105255_add_accepted_admin_terms_at_field_to_users.decidim_admin.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_admin (originally 20191118112040) + +class AddAcceptedAdminTermsAtFieldToUsers < ActiveRecord::Migration[5.2] + def change + add_column :decidim_users, :admin_terms_accepted_at, :datetime + end +end diff --git a/db/migrate/20240418105256_create_decidim_forms_questionnaires.decidim_forms.rb b/db/migrate/20240418105256_create_decidim_forms_questionnaires.decidim_forms.rb new file mode 100644 index 0000000..688be4a --- /dev/null +++ b/db/migrate/20240418105256_create_decidim_forms_questionnaires.decidim_forms.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20170511092231) + +class CreateDecidimFormsQuestionnaires < ActiveRecord::Migration[5.0] + def change + create_table :decidim_forms_questionnaires do |t| + t.jsonb :title + t.jsonb :description + t.jsonb :tos + t.references :questionnaire_for, polymorphic: true, index: { name: "index_decidim_forms_questionnaires_questionnaire_for" } + t.datetime :published_at + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105257_create_decidim_forms_questions.decidim_forms.rb b/db/migrate/20240418105257_create_decidim_forms_questions.decidim_forms.rb new file mode 100644 index 0000000..3f3ce99 --- /dev/null +++ b/db/migrate/20240418105257_create_decidim_forms_questions.decidim_forms.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20170515090916) + +class CreateDecidimFormsQuestions < ActiveRecord::Migration[5.0] + def change + create_table :decidim_forms_questions do |t| + t.references :decidim_questionnaire, index: true + t.integer :position, index: true + t.string :question_type + t.boolean :mandatory + t.jsonb :body + t.jsonb :description + t.integer :max_choices + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105258_create_decidim_forms_answers.decidim_forms.rb b/db/migrate/20240418105258_create_decidim_forms_answers.decidim_forms.rb new file mode 100644 index 0000000..dd1d0d5 --- /dev/null +++ b/db/migrate/20240418105258_create_decidim_forms_answers.decidim_forms.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20170515144119) + +class CreateDecidimFormsAnswers < ActiveRecord::Migration[5.0] + def change + create_table :decidim_forms_answers do |t| + t.text :body + t.references :decidim_user, index: true + t.references :decidim_questionnaire, index: true + t.references :decidim_question, index: { name: "index_decidim_forms_answers_question_id" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105259_create_decidim_forms_answer_options.decidim_forms.rb b/db/migrate/20240418105259_create_decidim_forms_answer_options.decidim_forms.rb new file mode 100644 index 0000000..68c17e5 --- /dev/null +++ b/db/migrate/20240418105259_create_decidim_forms_answer_options.decidim_forms.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20180405015012) + +class CreateDecidimFormsAnswerOptions < ActiveRecord::Migration[5.1] + def change + create_table :decidim_forms_answer_options do |t| + t.references :decidim_question, index: { name: "index_decidim_forms_answer_options_question_id" } + t.jsonb :body + t.boolean :free_text + end + end +end diff --git a/db/migrate/20240418105260_create_decidim_forms_answer_choices.decidim_forms.rb b/db/migrate/20240418105260_create_decidim_forms_answer_choices.decidim_forms.rb new file mode 100644 index 0000000..ddb14fe --- /dev/null +++ b/db/migrate/20240418105260_create_decidim_forms_answer_choices.decidim_forms.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20180405015147) + +class CreateDecidimFormsAnswerChoices < ActiveRecord::Migration[5.1] + def change + create_table :decidim_forms_answer_choices do |t| + t.references :decidim_answer, index: { name: "index_decidim_forms_answer_choices_answer_id" } + t.references :decidim_answer_option, index: { name: "index_decidim_forms_answer_choices_answer_option_id" } + t.integer :position + t.jsonb :body + t.text :custom_body + end + end +end diff --git a/db/migrate/20240418105261_add_session_token_to_decidim_forms_answers.decidim_forms.rb b/db/migrate/20240418105261_add_session_token_to_decidim_forms_answers.decidim_forms.rb new file mode 100644 index 0000000..7794866 --- /dev/null +++ b/db/migrate/20240418105261_add_session_token_to_decidim_forms_answers.decidim_forms.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20190315203056) + +class AddSessionTokenToDecidimFormsAnswers < ActiveRecord::Migration[5.2] + class Answer < ApplicationRecord + self.table_name = :decidim_forms_answers + end + + def change + add_column :decidim_forms_answers, :session_token, :string, null: false, default: "" + add_index :decidim_forms_answers, :session_token + + Answer.find_each do |answer| + answer.session_token = Digest::MD5.hexdigest("#{answer.decidim_user_id}-#{Rails.application.secrets.secret_key_base}") + answer.save! + end + end +end diff --git a/db/migrate/20240418105262_add_ip_hash_to_decidim_form_answers.decidim_forms.rb b/db/migrate/20240418105262_add_ip_hash_to_decidim_form_answers.decidim_forms.rb new file mode 100644 index 0000000..81b8ab2 --- /dev/null +++ b/db/migrate/20240418105262_add_ip_hash_to_decidim_form_answers.decidim_forms.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20190930094710) + +class AddIpHashToDecidimFormAnswers < ActiveRecord::Migration[5.2] + class Answer < ApplicationRecord + self.table_name = :decidim_forms_answers + end + + def change + add_column :decidim_forms_answers, :ip_hash, :string + add_index :decidim_forms_answers, :ip_hash + end +end diff --git a/db/migrate/20240418105263_create_decidim_forms_display_conditions.decidim_forms.rb b/db/migrate/20240418105263_create_decidim_forms_display_conditions.decidim_forms.rb new file mode 100644 index 0000000..4bc4c0f --- /dev/null +++ b/db/migrate/20240418105263_create_decidim_forms_display_conditions.decidim_forms.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20200130194123) + +class CreateDecidimFormsDisplayConditions < ActiveRecord::Migration[5.1] + def up + create_table :decidim_forms_display_conditions do |t| + t.bigint :decidim_question_id, index: { name: "decidim_forms_display_condition_question" }, null: false + t.bigint :decidim_condition_question_id, index: { name: "decidim_forms_display_condition_condition_question" }, null: false + t.bigint :decidim_answer_option_id, index: { name: "decidim_forms_display_condition_answer_option" } + t.integer :condition_type, default: 0, null: false + t.jsonb :condition_value + t.boolean :mandatory, default: false + + t.timestamps + end + end + + def down + drop_table :decidim_forms_display_conditions + end +end diff --git a/db/migrate/20240418105264_create_decidim_forms_question_matrix_rows.decidim_forms.rb b/db/migrate/20240418105264_create_decidim_forms_question_matrix_rows.decidim_forms.rb new file mode 100644 index 0000000..645f35e --- /dev/null +++ b/db/migrate/20240418105264_create_decidim_forms_question_matrix_rows.decidim_forms.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20200225123810) + +class CreateDecidimFormsQuestionMatrixRows < ActiveRecord::Migration[5.2] + def change + create_table :decidim_forms_question_matrix_rows do |t| + t.references :decidim_question, index: { name: "index_decidim_forms_question_matrix_questionnaire_id" } + t.integer :position, index: true + t.jsonb :body + end + end +end diff --git a/db/migrate/20240418105265_add_matrix_row_id_to_decidim_forms_answer_choices.decidim_forms.rb b/db/migrate/20240418105265_add_matrix_row_id_to_decidim_forms_answer_choices.decidim_forms.rb new file mode 100644 index 0000000..00103ae --- /dev/null +++ b/db/migrate/20240418105265_add_matrix_row_id_to_decidim_forms_answer_choices.decidim_forms.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20200304152939) + +class AddMatrixRowIdToDecidimFormsAnswerChoices < ActiveRecord::Migration[5.2] + class AnswerChoice < ApplicationRecord + self.table_name = :decidim_forms_answer_choices + end + + def change + add_column :decidim_forms_answer_choices, :decidim_question_matrix_row_id, :integer + end +end diff --git a/db/migrate/20240418105266_add_salt_to_decidim_forms_questionnaires.decidim_forms.rb b/db/migrate/20240418105266_add_salt_to_decidim_forms_questionnaires.decidim_forms.rb new file mode 100644 index 0000000..9af15d6 --- /dev/null +++ b/db/migrate/20240418105266_add_salt_to_decidim_forms_questionnaires.decidim_forms.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20201110152921) + +class AddSaltToDecidimFormsQuestionnaires < ActiveRecord::Migration[5.2] + class Questionnaire < ApplicationRecord + self.table_name = :decidim_forms_questionnaires + end + + def change + add_column :decidim_forms_questionnaires, :salt, :string + + Questionnaire.find_each do |questionnaire| + questionnaire.salt = Decidim::Tokenizer.random_salt + questionnaire.save! + end + end +end diff --git a/db/migrate/20240418105267_add_max_characters_to_decidim_forms_questions.decidim_forms.rb b/db/migrate/20240418105267_add_max_characters_to_decidim_forms_questions.decidim_forms.rb new file mode 100644 index 0000000..b24ef1e --- /dev/null +++ b/db/migrate/20240418105267_add_max_characters_to_decidim_forms_questions.decidim_forms.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20210208094442) + +class AddMaxCharactersToDecidimFormsQuestions < ActiveRecord::Migration[5.2] + def change + add_column :decidim_forms_questions, :max_characters, :integer, default: 0 + end +end diff --git a/db/migrate/20240418105268_set_position_to_question_matrix_rows.decidim_forms.rb b/db/migrate/20240418105268_set_position_to_question_matrix_rows.decidim_forms.rb new file mode 100644 index 0000000..966ad5c --- /dev/null +++ b/db/migrate/20240418105268_set_position_to_question_matrix_rows.decidim_forms.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_forms (originally 20210616153042) + +class SetPositionToQuestionMatrixRows < ActiveRecord::Migration[5.2] + def up + execute "UPDATE decidim_forms_question_matrix_rows SET position = id" + end + + def down + execute "UPDATE decidim_forms_question_matrix_rows SET position = NULL" + end +end diff --git a/db/migrate/20240418105269_move_authorizations_to_new_api.decidim_verifications.rb b/db/migrate/20240418105269_move_authorizations_to_new_api.decidim_verifications.rb new file mode 100644 index 0000000..f83d303 --- /dev/null +++ b/db/migrate/20240418105269_move_authorizations_to_new_api.decidim_verifications.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true +# This migration comes from decidim_verifications (originally 20171030133426) + +# +# Assumes to authorizations in the old format (as rectify form classes) will be +# registered as the underscored class name using the new API. For example, a +# previous +# +# ``` +# config.authorization_handlers = ["Decidim::ExampleCensusHandler"] +# ``` +# +# will now be +# +# ``` +# Decidim::Verifications.register_workflow(:example_census_handler) do |auth| +# auth.form = "Decidim::ExampleCensusHandler" +# end +# ``` +# +class MoveAuthorizationsToNewApi < ActiveRecord::Migration[5.1] + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + class Component < ApplicationRecord + self.table_name = :decidim_components + end + + def up + Organization.find_each do |organization| + migrated_authorizations = organization.available_authorizations.map do |authorization| + authorization.demodulize.underscore + end + + organization.update!(available_authorizations: migrated_authorizations) + end + + Component.find_each do |component| + next if component.permissions.nil? + + component.permissions.transform_values! do |value| + next if value.nil? + + { + "authorization_handler_name" => value["authorization_handler_name"]&.classify&.demodulize&.underscore, + "options" => value["options"] + } + end + + component.save! + end + end + + def down + Organization.find_each do |organization| + migrated_authorizations = organization.available_authorizations.map do |authorization| + Decidim::Verifications.find_workflow_manifest(authorization).form + end + + organization.update!(available_authorizations: migrated_authorizations) + end + + Component.find_each do |component| + component.permissions.transform_values! do |value| + workflow = Decidim::Verifications.find_workflow_manifest(value) + + workflow.form.underscore + end + + component.save! + end + end +end diff --git a/db/migrate/20240418105270_create_decidim_verifications_csv_data.decidim_verifications.rb b/db/migrate/20240418105270_create_decidim_verifications_csv_data.decidim_verifications.rb new file mode 100644 index 0000000..8c88f37 --- /dev/null +++ b/db/migrate/20240418105270_create_decidim_verifications_csv_data.decidim_verifications.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_verifications (originally 20181227135423) + +class CreateDecidimVerificationsCsvData < ActiveRecord::Migration[5.2] + def change + create_table :decidim_verifications_csv_data do |t| + t.string :email + t.references :decidim_organization, foreign_key: true, index: { name: "index_verifications_csv_census_to_organization" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105271_create_decidim_verifications_conflicts.decidim_verifications.rb b/db/migrate/20240418105271_create_decidim_verifications_conflicts.decidim_verifications.rb new file mode 100644 index 0000000..53b9dab --- /dev/null +++ b/db/migrate/20240418105271_create_decidim_verifications_conflicts.decidim_verifications.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_verifications (originally 20201028161118) + +class CreateDecidimVerificationsConflicts < ActiveRecord::Migration[5.2] + def change + create_table :decidim_verifications_conflicts do |t| + t.references :current_user, index: { name: "authorization_current_user" }, foreign_key: { to_table: :decidim_users } + t.references :managed_user, index: { name: "authorization_managed_user" }, foreign_key: { to_table: :decidim_users } + t.integer :times, default: 0 + t.string :unique_id + t.boolean :solved, default: false + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105272_add_participatory_processes.decidim_participatory_processes.rb b/db/migrate/20240418105272_add_participatory_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..bca301a --- /dev/null +++ b/db/migrate/20240418105272_add_participatory_processes.decidim_participatory_processes.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161005130108) + +class AddParticipatoryProcesses < ActiveRecord::Migration[5.0] + def change + create_table :decidim_participatory_processes do |t| + t.string :title, null: false + t.string :slug, null: false, unique: true + t.string :hashtag, unique: true + t.string :subtitle, null: false + t.text :short_description, null: false + t.text :description, null: false + t.references :decidim_organization, + foreign_key: true, + index: { name: "index_decidim_processes_on_decidim_organization_id" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105273_translate_processes.decidim_participatory_processes.rb b/db/migrate/20240418105273_translate_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..65fa7eb --- /dev/null +++ b/db/migrate/20240418105273_translate_processes.decidim_participatory_processes.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161010102356) + +class TranslateProcesses < ActiveRecord::Migration[5.0] + def change + remove_column :decidim_participatory_processes, :title + remove_column :decidim_participatory_processes, :subtitle + remove_column :decidim_participatory_processes, :description + remove_column :decidim_participatory_processes, :short_description + + change_table :decidim_participatory_processes do |t| + t.jsonb :title, null: false + t.jsonb :subtitle, null: false + t.jsonb :short_description, null: false + t.jsonb :description, null: false + end + end +end diff --git a/db/migrate/20240418105274_add_hero_image_to_processes.decidim_participatory_processes.rb b/db/migrate/20240418105274_add_hero_image_to_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..8189696 --- /dev/null +++ b/db/migrate/20240418105274_add_hero_image_to_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161011125616) + +class AddHeroImageToProcesses < ActiveRecord::Migration[5.0] + def change + add_column :decidim_participatory_processes, :hero_image, :string + end +end diff --git a/db/migrate/20240418105275_add_banner_image_to_processes.decidim_participatory_processes.rb b/db/migrate/20240418105275_add_banner_image_to_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..f7a42e9 --- /dev/null +++ b/db/migrate/20240418105275_add_banner_image_to_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161011141033) + +class AddBannerImageToProcesses < ActiveRecord::Migration[5.0] + def change + add_column :decidim_participatory_processes, :banner_image, :string + end +end diff --git a/db/migrate/20240418105276_add_promoted_flag_to_processes.decidim_participatory_processes.rb b/db/migrate/20240418105276_add_promoted_flag_to_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..e8abde1 --- /dev/null +++ b/db/migrate/20240418105276_add_promoted_flag_to_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161013134732) + +class AddPromotedFlagToProcesses < ActiveRecord::Migration[5.0] + def change + add_column :decidim_participatory_processes, :promoted, :boolean, default: false, index: true + end +end diff --git a/db/migrate/20240418105277_add_participatory_process_steps.decidim_participatory_processes.rb b/db/migrate/20240418105277_add_participatory_process_steps.decidim_participatory_processes.rb new file mode 100644 index 0000000..0c636d1 --- /dev/null +++ b/db/migrate/20240418105277_add_participatory_process_steps.decidim_participatory_processes.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161017085822) + +class AddParticipatoryProcessSteps < ActiveRecord::Migration[5.0] + def change + create_table :decidim_participatory_process_steps do |t| + t.jsonb :title, null: false + t.jsonb :short_description, null: false + t.jsonb :description, null: false + t.datetime :start_date + t.datetime :end_date + t.references :decidim_participatory_process, + foreign_key: true, + index: { name: "index_decidim_processes_steps__on_decidim_process_id" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105278_add_active_flag_to_step.decidim_participatory_processes.rb b/db/migrate/20240418105278_add_active_flag_to_step.decidim_participatory_processes.rb new file mode 100644 index 0000000..39fc46c --- /dev/null +++ b/db/migrate/20240418105278_add_active_flag_to_step.decidim_participatory_processes.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161019072016) + +class AddActiveFlagToStep < ActiveRecord::Migration[5.0] + def change + add_column :decidim_participatory_process_steps, :active, :boolean, default: false + + add_index :decidim_participatory_process_steps, + [:decidim_participatory_process_id, :active], + unique: true, + where: "active = 't'", + name: "unique_index_to_avoid_duplicate_active_steps" + end +end diff --git a/db/migrate/20240418105279_add_position_to_steps.decidim_participatory_processes.rb b/db/migrate/20240418105279_add_position_to_steps.decidim_participatory_processes.rb new file mode 100644 index 0000000..94f2cbe --- /dev/null +++ b/db/migrate/20240418105279_add_position_to_steps.decidim_participatory_processes.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161020080756) + +class AddPositionToSteps < ActiveRecord::Migration[5.0] + def change + add_column :decidim_participatory_process_steps, :position, :integer, null: false + add_index :decidim_participatory_process_steps, :position, order: { position: :asc }, name: "index_order_by_position_for_steps" + add_index :decidim_participatory_process_steps, [:decidim_participatory_process_id, :position], unique: true, name: "index_unique_position_for_process" + end +end diff --git a/db/migrate/20240418105280_add_published_at_to_processes.decidim_participatory_processes.rb b/db/migrate/20240418105280_add_published_at_to_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..4e5cc04 --- /dev/null +++ b/db/migrate/20240418105280_add_published_at_to_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161025125300) + +class AddPublishedAtToProcesses < ActiveRecord::Migration[5.0] + def change + add_column :decidim_participatory_processes, :published_at, :datetime, index: true + end +end diff --git a/db/migrate/20240418105281_remove_not_null_on_step_position.decidim_participatory_processes.rb b/db/migrate/20240418105281_remove_not_null_on_step_position.decidim_participatory_processes.rb new file mode 100644 index 0000000..7a40402 --- /dev/null +++ b/db/migrate/20240418105281_remove_not_null_on_step_position.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161107152228) + +class RemoveNotNullOnStepPosition < ActiveRecord::Migration[5.0] + def change + change_column :decidim_participatory_process_steps, :position, :integer, null: true + end +end diff --git a/db/migrate/20240418105282_add_index_for_process_slug_organization.decidim_participatory_processes.rb b/db/migrate/20240418105282_add_index_for_process_slug_organization.decidim_participatory_processes.rb new file mode 100644 index 0000000..a441400 --- /dev/null +++ b/db/migrate/20240418105282_add_index_for_process_slug_organization.decidim_participatory_processes.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161110092735) + +class AddIndexForProcessSlugOrganization < ActiveRecord::Migration[5.0] + def change + add_index :decidim_participatory_processes, + [:decidim_organization_id, :slug], + unique: true, + name: "index_unique_process_slug_and_organization" + end +end diff --git a/db/migrate/20240418105283_create_attachments.decidim_participatory_processes.rb b/db/migrate/20240418105283_create_attachments.decidim_participatory_processes.rb new file mode 100644 index 0000000..0afff3f --- /dev/null +++ b/db/migrate/20240418105283_create_attachments.decidim_participatory_processes.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20161116115156) + +class CreateAttachments < ActiveRecord::Migration[5.0] + def change + create_table :decidim_participatory_process_attachments do |t| + t.jsonb :title, null: false + t.jsonb :description, null: false + t.string :file, null: false + t.string :content_type, null: false + t.string :file_size, null: false + t.references :decidim_participatory_process, + foreign_key: true, + index: { name: "index_decidim_processes_attachments_on_decidim_process_id" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105284_loosen_step_requirements.decidim_participatory_processes.rb b/db/migrate/20240418105284_loosen_step_requirements.decidim_participatory_processes.rb new file mode 100644 index 0000000..6c52bf4 --- /dev/null +++ b/db/migrate/20240418105284_loosen_step_requirements.decidim_participatory_processes.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170116135237) + +class LoosenStepRequirements < ActiveRecord::Migration[5.0] + def change + change_column_null(:decidim_participatory_process_steps, :short_description, true) + change_column_null(:decidim_participatory_process_steps, :description, true) + end +end diff --git a/db/migrate/20240418105285_make_attachments_polymorphic.decidim_participatory_processes.rb b/db/migrate/20240418105285_make_attachments_polymorphic.decidim_participatory_processes.rb new file mode 100644 index 0000000..cfae69e --- /dev/null +++ b/db/migrate/20240418105285_make_attachments_polymorphic.decidim_participatory_processes.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170123134023) + +class MakeAttachmentsPolymorphic < ActiveRecord::Migration[5.0] + def change + transaction do + remove_index :decidim_participatory_process_attachments, name: "index_decidim_processes_attachments_on_decidim_process_id" + rename_table :decidim_participatory_process_attachments, :decidim_attachments + + add_column :decidim_attachments, :attachable_type, :string + execute("UPDATE decidim_attachments SET attachable_type = 'Decidim::ParticipatoryProcess'") + + rename_column :decidim_attachments, :decidim_participatory_process_id, :attachable_id + add_index :decidim_attachments, [:attachable_id, :attachable_type] + + change_column_null(:decidim_attachments, :attachable_id, false) + change_column_null(:decidim_attachments, :attachable_type, false) + end + end +end diff --git a/db/migrate/20240418105286_rename_attachable_to_attached_to.decidim_participatory_processes.rb b/db/migrate/20240418105286_rename_attachable_to_attached_to.decidim_participatory_processes.rb new file mode 100644 index 0000000..3b78457 --- /dev/null +++ b/db/migrate/20240418105286_rename_attachable_to_attached_to.decidim_participatory_processes.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170125135937) + +class RenameAttachableToAttachedTo < ActiveRecord::Migration[5.0] + def change + remove_index :decidim_attachments, name: "index_decidim_attachments_on_attachable_id_and_attachable_type" + remove_foreign_key :decidim_attachments, column: :attachable_id + + rename_column :decidim_attachments, :attachable_id, :attached_to_id + rename_column :decidim_attachments, :attachable_type, :attached_to_type + + add_index :decidim_attachments, [:attached_to_id, :attached_to_type], name: "index_decidim_attachments_on_attached_to" + end +end diff --git a/db/migrate/20240418105287_add_extra_info_to_processes.decidim_participatory_processes.rb b/db/migrate/20240418105287_add_extra_info_to_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..01f7f76 --- /dev/null +++ b/db/migrate/20240418105287_add_extra_info_to_processes.decidim_participatory_processes.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170126151123) + +class AddExtraInfoToProcesses < ActiveRecord::Migration[5.0] + def change + add_column :decidim_participatory_processes, :domain, :jsonb + add_column :decidim_participatory_processes, :end_date, :date + add_column :decidim_participatory_processes, :developer_group, :string + add_column :decidim_participatory_processes, :scope, :jsonb + end +end diff --git a/db/migrate/20240418105288_rename_extra_info_on_processes.decidim_participatory_processes.rb b/db/migrate/20240418105288_rename_extra_info_on_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..d58e222 --- /dev/null +++ b/db/migrate/20240418105288_rename_extra_info_on_processes.decidim_participatory_processes.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170206083118) + +class RenameExtraInfoOnProcesses < ActiveRecord::Migration[5.0] + def change + remove_column :decidim_participatory_processes, :developer_group + + rename_column :decidim_participatory_processes, :domain, :developer_group + + add_column :decidim_participatory_processes, :local_area, :jsonb + add_column :decidim_participatory_processes, :target, :jsonb + add_column :decidim_participatory_processes, :participatory_scope, :jsonb + add_column :decidim_participatory_processes, :participatory_structure, :jsonb + end +end diff --git a/db/migrate/20240418105289_remove_steps_short_description.decidim_participatory_processes.rb b/db/migrate/20240418105289_remove_steps_short_description.decidim_participatory_processes.rb new file mode 100644 index 0000000..4cc589a --- /dev/null +++ b/db/migrate/20240418105289_remove_steps_short_description.decidim_participatory_processes.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170220110740) + +class RemoveStepsShortDescription < ActiveRecord::Migration[5.0] + class ParticipatoryProcessStep < ApplicationRecord + self.table_name = :decidim_participatory_process_steps + end + + def change + ParticipatoryProcessStep.transaction do + ParticipatoryProcessStep.find_each do |step| + step.update!( + description: new_description_for(step) + ) + end + + remove_column :decidim_participatory_process_steps, :short_description + end + end + + def new_description_for(step) + desc = {} + step.description.keys.each do |locale| + desc[locale] = step.short_description[locale] + step.description[locale] + end + desc + end +end diff --git a/db/migrate/20240418105290_add_scopes_to_processes.decidim_participatory_processes.rb b/db/migrate/20240418105290_add_scopes_to_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..e0b1f59 --- /dev/null +++ b/db/migrate/20240418105290_add_scopes_to_processes.decidim_participatory_processes.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170221094835) + +class AddScopesToProcesses < ActiveRecord::Migration[5.0] + def change + rename_column :decidim_participatory_processes, :scope, :meta_scope + add_column :decidim_participatory_processes, :decidim_scope_id, :integer + end +end diff --git a/db/migrate/20240418105291_add_participatory_process_groups.decidim_participatory_processes.rb b/db/migrate/20240418105291_add_participatory_process_groups.decidim_participatory_processes.rb new file mode 100644 index 0000000..3612c57 --- /dev/null +++ b/db/migrate/20240418105291_add_participatory_process_groups.decidim_participatory_processes.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170228142440) + +class AddParticipatoryProcessGroups < ActiveRecord::Migration[5.0] + def change + create_table :decidim_participatory_process_groups do |t| + t.jsonb :name, null: false + t.jsonb :description, null: false + t.string :hero_image + + t.references :decidim_organization, index: { name: "decidim_participatory_process_group_organization" } + + t.timestamps + end + + add_column :decidim_participatory_processes, :decidim_participatory_process_group_id, :integer + end +end diff --git a/db/migrate/20240418105292_change_steps_end_and_start_date_to_date.decidim_participatory_processes.rb b/db/migrate/20240418105292_change_steps_end_and_start_date_to_date.decidim_participatory_processes.rb new file mode 100644 index 0000000..3274818 --- /dev/null +++ b/db/migrate/20240418105292_change_steps_end_and_start_date_to_date.decidim_participatory_processes.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170404132616) + +class ChangeStepsEndAndStartDateToDate < ActiveRecord::Migration[5.0] + def change + change_column :decidim_participatory_process_steps, :start_date, :date + change_column :decidim_participatory_process_steps, :end_date, :date + end +end diff --git a/db/migrate/20240418105293_make_features_polymorphic.decidim_participatory_processes.rb b/db/migrate/20240418105293_make_features_polymorphic.decidim_participatory_processes.rb new file mode 100644 index 0000000..51e7764 --- /dev/null +++ b/db/migrate/20240418105293_make_features_polymorphic.decidim_participatory_processes.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170720120135) + +class MakeFeaturesPolymorphic < ActiveRecord::Migration[5.1] + def change + remove_index :decidim_components, name: "index_decidim_components_on_decidim_participatory_process_id" + + add_column :decidim_components, :participatory_space_type, :string + + reversible do |direction| + direction.up do + execute <<~SQL.squish + UPDATE decidim_components + SET participatory_space_type = 'Decidim::ParticipatoryProcess' + SQL + end + end + + rename_column :decidim_components, :decidim_participatory_process_id, :participatory_space_id + + add_index :decidim_components, + [:participatory_space_id, :participatory_space_type], + name: "index_decidim_components_on_decidim_participatory_space" + + change_column_null :decidim_components, :participatory_space_id, false + change_column_null :decidim_components, :participatory_space_type, false + end +end diff --git a/db/migrate/20240418105294_add_show_statistics_to_participatory_processes.decidim_participatory_processes.rb b/db/migrate/20240418105294_add_show_statistics_to_participatory_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..87f35f6 --- /dev/null +++ b/db/migrate/20240418105294_add_show_statistics_to_participatory_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170725085104) + +class AddShowStatisticsToParticipatoryProcesses < ActiveRecord::Migration[5.1] + def change + add_column :decidim_participatory_processes, :show_statistics, :boolean, default: true + end +end diff --git a/db/migrate/20240418105295_attachment_description_nullable.decidim_participatory_processes.rb b/db/migrate/20240418105295_attachment_description_nullable.decidim_participatory_processes.rb new file mode 100644 index 0000000..c3aa8c4 --- /dev/null +++ b/db/migrate/20240418105295_attachment_description_nullable.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170804125402) + +class AttachmentDescriptionNullable < ActiveRecord::Migration[5.1] + def change + change_column :decidim_attachments, :description, :jsonb, null: true + end +end diff --git a/db/migrate/20240418105296_add_announcement_to_participatory_processes.decidim_participatory_processes.rb b/db/migrate/20240418105296_add_announcement_to_participatory_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..2d92df6 --- /dev/null +++ b/db/migrate/20240418105296_add_announcement_to_participatory_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170808080905) + +class AddAnnouncementToParticipatoryProcesses < ActiveRecord::Migration[5.1] + def change + add_column :decidim_participatory_processes, :announcement, :jsonb + end +end diff --git a/db/migrate/20240418105297_add_scopes_enabled_to_participatory_processes.decidim_participatory_processes.rb b/db/migrate/20240418105297_add_scopes_enabled_to_participatory_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..8ea6e65 --- /dev/null +++ b/db/migrate/20240418105297_add_scopes_enabled_to_participatory_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170809084005) + +class AddScopesEnabledToParticipatoryProcesses < ActiveRecord::Migration[5.1] + def change + add_column :decidim_participatory_processes, :scopes_enabled, :boolean, null: false, default: true + end +end diff --git a/db/migrate/20240418105298_add_start_date_to_processes.decidim_participatory_processes.rb b/db/migrate/20240418105298_add_start_date_to_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..4b16a35 --- /dev/null +++ b/db/migrate/20240418105298_add_start_date_to_processes.decidim_participatory_processes.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20170830081725) + +class AddStartDateToProcesses < ActiveRecord::Migration[5.1] + def change + add_column :decidim_participatory_processes, :start_date, :date + ActiveRecord::Base.connection.execute("UPDATE decidim_participatory_processes SET start_date = created_at") + end +end diff --git a/db/migrate/20240418105299_add_weight_to_attachments.decidim_participatory_processes.rb b/db/migrate/20240418105299_add_weight_to_attachments.decidim_participatory_processes.rb new file mode 100644 index 0000000..600595b --- /dev/null +++ b/db/migrate/20240418105299_add_weight_to_attachments.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20171215081244) + +class AddWeightToAttachments < ActiveRecord::Migration[5.1] + def change + add_column :decidim_attachments, :weight, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20240418105300_add_attachment_collection_to_attachments.decidim_participatory_processes.rb b/db/migrate/20240418105300_add_attachment_collection_to_attachments.decidim_participatory_processes.rb new file mode 100644 index 0000000..9edb464 --- /dev/null +++ b/db/migrate/20240418105300_add_attachment_collection_to_attachments.decidim_participatory_processes.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20171215141722) + +class AddAttachmentCollectionToAttachments < ActiveRecord::Migration[5.1] + def change + add_column :decidim_attachments, :attachment_collection_id, :integer, null: true, index: { name: "index_decidim_attachments_attachment_collection_id" } + add_foreign_key :decidim_attachments, :decidim_attachment_collections, column: :attachment_collection_id, on_delete: :nullify, + name: "fk_decidim_attachments_attachment_collection_id" + end +end diff --git a/db/migrate/20240418105301_add_private_to_participatory_processes.decidim_participatory_processes.rb b/db/migrate/20240418105301_add_private_to_participatory_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..f14ad08 --- /dev/null +++ b/db/migrate/20240418105301_add_private_to_participatory_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20180122110007) + +class AddPrivateToParticipatoryProcesses < ActiveRecord::Migration[5.1] + def change + add_column :decidim_participatory_processes, :private_space, :boolean, default: false + end +end diff --git a/db/migrate/20240418105302_add_reference_to_processes.decidim_participatory_processes.rb b/db/migrate/20240418105302_add_reference_to_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..9b7ba29 --- /dev/null +++ b/db/migrate/20240418105302_add_reference_to_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20180125102537) + +class AddReferenceToProcesses < ActiveRecord::Migration[5.1] + def change + add_column :decidim_participatory_processes, :reference, :string + end +end diff --git a/db/migrate/20240418105303_add_cta_url_and_text_to_steps.decidim_participatory_processes.rb b/db/migrate/20240418105303_add_cta_url_and_text_to_steps.decidim_participatory_processes.rb new file mode 100644 index 0000000..32e9740 --- /dev/null +++ b/db/migrate/20240418105303_add_cta_url_and_text_to_steps.decidim_participatory_processes.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20180926082635) + +class AddCtaUrlAndTextToSteps < ActiveRecord::Migration[5.2] + def change + add_column :decidim_participatory_process_steps, :cta_text, :jsonb, default: {} + add_column :decidim_participatory_process_steps, :cta_path, :string + end +end diff --git a/db/migrate/20240418105304_add_area_to_participatory_processes.decidim_participatory_processes.rb b/db/migrate/20240418105304_add_area_to_participatory_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..c62c075 --- /dev/null +++ b/db/migrate/20240418105304_add_area_to_participatory_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20190322125517) + +class AddAreaToParticipatoryProcesses < ActiveRecord::Migration[5.2] + def change + add_reference :decidim_participatory_processes, :decidim_area, index: true + end +end diff --git a/db/migrate/20240418105305_add_scope_type_to_participatory_processes.decidim_participatory_processes.rb b/db/migrate/20240418105305_add_scope_type_to_participatory_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..0b5e86b --- /dev/null +++ b/db/migrate/20240418105305_add_scope_type_to_participatory_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20200114142253) + +class AddScopeTypeToParticipatoryProcesses < ActiveRecord::Migration[5.2] + def change + add_reference :decidim_participatory_processes, :decidim_scope_type, foreign_key: true, index: true + end +end diff --git a/db/migrate/20240418105306_add_show_metrics_to_participatory_processes.decidim_participatory_processes.rb b/db/migrate/20240418105306_add_show_metrics_to_participatory_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..b153bd1 --- /dev/null +++ b/db/migrate/20240418105306_add_show_metrics_to_participatory_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20200204154917) + +class AddShowMetricsToParticipatoryProcesses < ActiveRecord::Migration[5.2] + def change + add_column :decidim_participatory_processes, :show_metrics, :boolean, default: true + end +end diff --git a/db/migrate/20240418105307_index_foreign_keys_in_decidim_attachments.decidim_participatory_processes.rb b/db/migrate/20240418105307_index_foreign_keys_in_decidim_attachments.decidim_participatory_processes.rb new file mode 100644 index 0000000..e44084e --- /dev/null +++ b/db/migrate/20240418105307_index_foreign_keys_in_decidim_attachments.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20200320105908) + +class IndexForeignKeysInDecidimAttachments < ActiveRecord::Migration[5.2] + def change + add_index :decidim_attachments, :attachment_collection_id + end +end diff --git a/db/migrate/20240418105308_index_foreign_keys_in_decidim_participatory_process_user_roles.decidim_participatory_processes.rb b/db/migrate/20240418105308_index_foreign_keys_in_decidim_participatory_process_user_roles.decidim_participatory_processes.rb new file mode 100644 index 0000000..2407791 --- /dev/null +++ b/db/migrate/20240418105308_index_foreign_keys_in_decidim_participatory_process_user_roles.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20200320105924) + +class IndexForeignKeysInDecidimParticipatoryProcessUserRoles < ActiveRecord::Migration[5.2] + def change + add_index :decidim_participatory_process_user_roles, :decidim_user_id, name: "idx_proces_user_role_on_user_id" + end +end diff --git a/db/migrate/20240418105309_index_foreign_keys_in_decidim_participatory_processes.decidim_participatory_processes.rb b/db/migrate/20240418105309_index_foreign_keys_in_decidim_participatory_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..4f61f19 --- /dev/null +++ b/db/migrate/20240418105309_index_foreign_keys_in_decidim_participatory_processes.decidim_participatory_processes.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20200320105925) + +class IndexForeignKeysInDecidimParticipatoryProcesses < ActiveRecord::Migration[5.2] + def change + add_index :decidim_participatory_processes, :decidim_participatory_process_group_id, name: "idx_process_on_process_group_id" + add_index :decidim_participatory_processes, :decidim_scope_id, name: "idx_process_on_scope_id" + end +end diff --git a/db/migrate/20240418105310_fix_attachments_titles.decidim_participatory_processes.rb b/db/migrate/20240418105310_fix_attachments_titles.decidim_participatory_processes.rb new file mode 100644 index 0000000..97094c7 --- /dev/null +++ b/db/migrate/20240418105310_fix_attachments_titles.decidim_participatory_processes.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20201006072346) + +class FixAttachmentsTitles < ActiveRecord::Migration[5.2] + def up + reset_column_information + + PaperTrail.request(enabled: false) do + Decidim::Attachment.find_each do |attachment| + next if attachment.title.is_a?(Hash) && attachment.description.is_a?(Hash) + + attached_to = attachment.attached_to + locale = attached_to.try(:locale).presence || + attached_to.try(:default_locale).presence || + attached_to.try(:organization).try(:default_locale).presence || + Decidim.default_locale + + # rubocop:disable Rails/SkipsModelValidations + values = {} + values[:title] = { locale => attachment.title } unless attachment.title.is_a?(Hash) + values[:description] = { locale => attachment.description } unless attachment.description.is_a?(Hash) + + attachment.update_columns(values) + # rubocop:enable Rails/SkipsModelValidations + end + end + + reset_column_information + end + + def down; end + + def reset_column_information + Decidim::Attachment.reset_column_information + end +end diff --git a/db/migrate/20240418105311_add_hashtag_to_participatory_process_groups.decidim_participatory_processes.rb b/db/migrate/20240418105311_add_hashtag_to_participatory_process_groups.decidim_participatory_processes.rb new file mode 100644 index 0000000..c6186ca --- /dev/null +++ b/db/migrate/20240418105311_add_hashtag_to_participatory_process_groups.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20201007215105) + +class AddHashtagToParticipatoryProcessGroups < ActiveRecord::Migration[5.2] + def change + add_column :decidim_participatory_process_groups, :hashtag, :string + end +end diff --git a/db/migrate/20240418105312_add_metadata_columns_to_participatory_process_groups.decidim_participatory_processes.rb b/db/migrate/20240418105312_add_metadata_columns_to_participatory_process_groups.decidim_participatory_processes.rb new file mode 100644 index 0000000..0efe84f --- /dev/null +++ b/db/migrate/20240418105312_add_metadata_columns_to_participatory_process_groups.decidim_participatory_processes.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20201008154315) + +class AddMetadataColumnsToParticipatoryProcessGroups < ActiveRecord::Migration[5.2] + def change + add_column :decidim_participatory_process_groups, :group_url, :string + add_column :decidim_participatory_process_groups, :developer_group, :jsonb + add_column :decidim_participatory_process_groups, :local_area, :jsonb + add_column :decidim_participatory_process_groups, :meta_scope, :jsonb + add_column :decidim_participatory_process_groups, :target, :jsonb + add_column :decidim_participatory_process_groups, :participatory_scope, :jsonb + add_column :decidim_participatory_process_groups, :participatory_structure, :jsonb + end +end diff --git a/db/migrate/20240418105313_rename_name_column_to_title_in_decidim_participatory_process_groups.decidim_participatory_processes.rb b/db/migrate/20240418105313_rename_name_column_to_title_in_decidim_participatory_process_groups.decidim_participatory_processes.rb new file mode 100644 index 0000000..3efa4e7 --- /dev/null +++ b/db/migrate/20240418105313_rename_name_column_to_title_in_decidim_participatory_process_groups.decidim_participatory_processes.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20201013105520) + +class RenameNameColumnToTitleInDecidimParticipatoryProcessGroups < ActiveRecord::Migration[5.2] + def up + rename_column :decidim_participatory_process_groups, :name, :title + PaperTrail::Version.where(item_type: "Decidim::ParticipatoryProcessGroup").each do |version| + # rubocop:disable Rails/SkipsModelValidations + version.update_attribute(:object_changes, version.object_changes.gsub(/^name:/, "title:")) if version.object_changes.present? + # rubocop:enable Rails/SkipsModelValidations + + next unless version.object.present? && version.object.has_key?("name") + + object = version.object + object["title"] = object.delete("name") + + # rubocop:disable Rails/SkipsModelValidations + version.update_attribute(:object, object) + # rubocop:enable Rails/SkipsModelValidations + end + end + + def down + PaperTrail::Version.where(item_type: "Decidim::ParticipatoryProcessGroup").each do |version| + # rubocop:disable Rails/SkipsModelValidations + version.update_attribute(:object_changes, version.object_changes.gsub(/^title:/, "name:")) if version.object_changes.present? + # rubocop:enable Rails/SkipsModelValidations + + next unless version.object.present? && version.object.has_key?("title") + + object = version.object + object["name"] = object.delete("title") + + # rubocop:disable Rails/SkipsModelValidations + version.update_attribute(:object, object) + # rubocop:enable Rails/SkipsModelValidations + end + rename_column :decidim_participatory_process_groups, :title, :name + end +end diff --git a/db/migrate/20240418105314_add_promoted_flag_to_decidim_participatory_process_groups.decidim_participatory_processes.rb b/db/migrate/20240418105314_add_promoted_flag_to_decidim_participatory_process_groups.decidim_participatory_processes.rb new file mode 100644 index 0000000..e63002a --- /dev/null +++ b/db/migrate/20240418105314_add_promoted_flag_to_decidim_participatory_process_groups.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20201030133444) + +class AddPromotedFlagToDecidimParticipatoryProcessGroups < ActiveRecord::Migration[5.2] + def change + add_column :decidim_participatory_process_groups, :promoted, :boolean, default: false, index: true + end +end diff --git a/db/migrate/20240418105315_add_weight_field_to_participatory_processes.decidim_participatory_processes.rb b/db/migrate/20240418105315_add_weight_field_to_participatory_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..f9a3d2a --- /dev/null +++ b/db/migrate/20240418105315_add_weight_field_to_participatory_processes.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20210204154593) + +class AddWeightFieldToParticipatoryProcesses < ActiveRecord::Migration[5.2] + def change + add_column :decidim_participatory_processes, :weight, :integer, null: false, default: true + end +end diff --git a/db/migrate/20240418105316_add_followable_counter_cache_to_participatory_processes.decidim_participatory_processes.rb b/db/migrate/20240418105316_add_followable_counter_cache_to_participatory_processes.decidim_participatory_processes.rb new file mode 100644 index 0000000..188adcd --- /dev/null +++ b/db/migrate/20240418105316_add_followable_counter_cache_to_participatory_processes.decidim_participatory_processes.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20210310120750) + +class AddFollowableCounterCacheToParticipatoryProcesses < ActiveRecord::Migration[5.2] + def change + add_column :decidim_participatory_processes, :follows_count, :integer, null: false, default: 0, index: true + + reversible do |dir| + dir.up do + Decidim::ParticipatoryProcess.reset_column_information + Decidim::ParticipatoryProcess.find_each do |record| + record.class.reset_counters(record.id, :follows) + end + end + end + end +end diff --git a/db/migrate/20240418105317_allow_null_file_column_in_decidim_attachments_table.decidim_participatory_processes.rb b/db/migrate/20240418105317_allow_null_file_column_in_decidim_attachments_table.decidim_participatory_processes.rb new file mode 100644 index 0000000..ca6a8fb --- /dev/null +++ b/db/migrate/20240418105317_allow_null_file_column_in_decidim_attachments_table.decidim_participatory_processes.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20210415163339) + +class AllowNullFileColumnInDecidimAttachmentsTable < ActiveRecord::Migration[6.0] + def change + change_column_null :decidim_attachments, :file, true + end +end diff --git a/db/migrate/20240418105318_create_decidim_participatory_process_types.decidim_participatory_processes.rb b/db/migrate/20240418105318_create_decidim_participatory_process_types.decidim_participatory_processes.rb new file mode 100644 index 0000000..4b741d5 --- /dev/null +++ b/db/migrate/20240418105318_create_decidim_participatory_process_types.decidim_participatory_processes.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20211125202008) + +class CreateDecidimParticipatoryProcessTypes < ActiveRecord::Migration[6.0] + def change + create_table :decidim_participatory_process_types do |t| + t.jsonb :title, null: false + t.references( + :decidim_organization, + foreign_key: true, + index: { name: "index_decidim_process_types_on_decidim_organization_id" } + ) + t.timestamps + end + + add_reference( + :decidim_participatory_processes, + :decidim_participatory_process_type, + foreign_key: true, + index: { name: "index_decidim_processes_on_decidim_process_type_id" } + ) + end +end diff --git a/db/migrate/20240418105319_change_steps_dates_to_datetime.decidim_participatory_processes.rb b/db/migrate/20240418105319_change_steps_dates_to_datetime.decidim_participatory_processes.rb new file mode 100644 index 0000000..92e4fb7 --- /dev/null +++ b/db/migrate/20240418105319_change_steps_dates_to_datetime.decidim_participatory_processes.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_participatory_processes (originally 20220315100140) + +class ChangeStepsDatesToDatetime < ActiveRecord::Migration[6.0] + def change + change_column :decidim_participatory_process_steps, :start_date, :datetime + change_column :decidim_participatory_process_steps, :end_date, :datetime + end +end diff --git a/db/migrate/20240418105320_add_assemblies.decidim_assemblies.rb b/db/migrate/20240418105320_add_assemblies.decidim_assemblies.rb new file mode 100644 index 0000000..b6aff35 --- /dev/null +++ b/db/migrate/20240418105320_add_assemblies.decidim_assemblies.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20170727190859) + +class AddAssemblies < ActiveRecord::Migration[5.0] + def change + create_table :decidim_assemblies do |t| + t.string :slug, null: false + t.string :hashtag + + t.integer :decidim_organization_id, + foreign_key: true, + index: { name: "index_decidim_assemblies_on_decidim_organization_id" } + + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.jsonb :title, null: false + t.jsonb :subtitle, null: false + t.jsonb :short_description, null: false + t.jsonb :description, null: false + t.string :hero_image + t.string :banner_image + t.boolean :promoted, default: false + t.datetime :published_at + t.jsonb :developer_group + t.jsonb :meta_scope + t.jsonb :local_area + t.jsonb :target + t.jsonb :participatory_scope + t.jsonb :participatory_structure + t.boolean :show_statistics, default: false + t.integer :decidim_scope_id + + t.index [:decidim_organization_id, :slug], + name: "index_unique_assembly_slug_and_organization", + unique: true + end + end +end diff --git a/db/migrate/20240418105321_add_scopes_enabled_to_assemblies.decidim_assemblies.rb b/db/migrate/20240418105321_add_scopes_enabled_to_assemblies.decidim_assemblies.rb new file mode 100644 index 0000000..142d7f0 --- /dev/null +++ b/db/migrate/20240418105321_add_scopes_enabled_to_assemblies.decidim_assemblies.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20170822153055) + +class AddScopesEnabledToAssemblies < ActiveRecord::Migration[5.1] + def change + add_column :decidim_assemblies, :scopes_enabled, :boolean, null: false, default: true + end +end diff --git a/db/migrate/20240418105322_add_assembly_user_roles.decidim_assemblies.rb b/db/migrate/20240418105322_add_assembly_user_roles.decidim_assemblies.rb new file mode 100644 index 0000000..902c47f --- /dev/null +++ b/db/migrate/20240418105322_add_assembly_user_roles.decidim_assemblies.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20180109105917) + +class AddAssemblyUserRoles < ActiveRecord::Migration[5.1] + def change + create_table :decidim_assembly_user_roles do |t| + t.integer :decidim_user_id + t.integer :decidim_assembly_id + t.string :role + t.timestamps + end + + add_index :decidim_assembly_user_roles, + [:decidim_assembly_id, :decidim_user_id, :role], + unique: true, + name: "index_unique_user_and_assembly_role" + end +end diff --git a/db/migrate/20240418105323_add_private_to_assemblies.decidim_assemblies.rb b/db/migrate/20240418105323_add_private_to_assemblies.decidim_assemblies.rb new file mode 100644 index 0000000..90119af --- /dev/null +++ b/db/migrate/20240418105323_add_private_to_assemblies.decidim_assemblies.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20180124083729) + +class AddPrivateToAssemblies < ActiveRecord::Migration[5.1] + def change + add_column :decidim_assemblies, :private_space, :boolean, default: false + end +end diff --git a/db/migrate/20240418105324_add_reference_to_assemblies.decidim_assemblies.rb b/db/migrate/20240418105324_add_reference_to_assemblies.decidim_assemblies.rb new file mode 100644 index 0000000..28c0822 --- /dev/null +++ b/db/migrate/20240418105324_add_reference_to_assemblies.decidim_assemblies.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20180125104426) + +class AddReferenceToAssemblies < ActiveRecord::Migration[5.1] + def change + add_column :decidim_assemblies, :reference, :string + end +end diff --git a/db/migrate/20240418105325_add_area_to_assemblies.decidim_assemblies.rb b/db/migrate/20240418105325_add_area_to_assemblies.decidim_assemblies.rb new file mode 100644 index 0000000..82d41e3 --- /dev/null +++ b/db/migrate/20240418105325_add_area_to_assemblies.decidim_assemblies.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20180216091553) + +class AddAreaToAssemblies < ActiveRecord::Migration[5.1] + def change + add_reference :decidim_assemblies, :decidim_area, index: true + end +end diff --git a/db/migrate/20240418105326_add_parent_child_relation_to_assemblies.decidim_assemblies.rb b/db/migrate/20240418105326_add_parent_child_relation_to_assemblies.decidim_assemblies.rb new file mode 100644 index 0000000..7ae6adf --- /dev/null +++ b/db/migrate/20240418105326_add_parent_child_relation_to_assemblies.decidim_assemblies.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20180226103942) + +class AddParentChildRelationToAssemblies < ActiveRecord::Migration[5.1] + def change + unless extension_enabled?("ltree") + begin + # required so that test suite works in ci env + enable_extension "ltree" + rescue StandardError + raise <<-MSG.squish + Decidim requires the ltree extension to be enabled in your PostgreSQL. + You can do so by running `CREATE EXTENSION IF NOT EXISTS "ltree";` on the current DB as a PostgreSQL + super user. + MSG + end + end + + add_reference :decidim_assemblies, :parent, index: { name: :decidim_assemblies_assemblies_on_parent_id } + add_column :decidim_assemblies, :parents_path, :ltree + add_column :decidim_assemblies, :children_count, :integer, default: 0 + end +end diff --git a/db/migrate/20240418105327_add_fields_to_assemblies.decidim_assemblies.rb b/db/migrate/20240418105327_add_fields_to_assemblies.decidim_assemblies.rb new file mode 100644 index 0000000..1e717d8 --- /dev/null +++ b/db/migrate/20240418105327_add_fields_to_assemblies.decidim_assemblies.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20180302121116) + +class AddFieldsToAssemblies < ActiveRecord::Migration[5.1] + def change + add_column :decidim_assemblies, :purpose_of_action, :jsonb + add_column :decidim_assemblies, :composition, :jsonb + add_column :decidim_assemblies, :assembly_type, :string + add_column :decidim_assemblies, :assembly_type_other, :jsonb + add_column :decidim_assemblies, :creation_date, :date + add_column :decidim_assemblies, :created_by, :string + add_column :decidim_assemblies, :created_by_other, :jsonb + add_column :decidim_assemblies, :duration, :date + add_column :decidim_assemblies, :included_at, :date + add_column :decidim_assemblies, :closing_date, :date + add_column :decidim_assemblies, :closing_date_reason, :jsonb + add_column :decidim_assemblies, :internal_organisation, :jsonb + add_column :decidim_assemblies, :is_transparent, :boolean, default: true + add_column :decidim_assemblies, :special_features, :jsonb + add_column :decidim_assemblies, :twitter_handler, :string + add_column :decidim_assemblies, :instagram_handler, :string + add_column :decidim_assemblies, :facebook_handler, :string + add_column :decidim_assemblies, :youtube_handler, :string + add_column :decidim_assemblies, :github_handler, :string + end +end diff --git a/db/migrate/20240418105328_add_assembly_members.decidim_assemblies.rb b/db/migrate/20240418105328_add_assembly_members.decidim_assemblies.rb new file mode 100644 index 0000000..9810729 --- /dev/null +++ b/db/migrate/20240418105328_add_assembly_members.decidim_assemblies.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20180314143822) + +class AddAssemblyMembers < ActiveRecord::Migration[5.1] + def change + create_table :decidim_assembly_members do |t| + t.references :decidim_assembly, index: true + t.integer :weight, null: false, default: 0, index: { name: "index_decidim_assembly_members_on_weight" } + t.string :full_name + t.string :gender + t.date :birthday + t.string :birthplace + t.date :designation_date + t.string :designation_mode + t.string :position + t.string :position_other + t.date :ceased_date + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105329_assembly_member_belongs_to_user.decidim_assemblies.rb b/db/migrate/20240418105329_assembly_member_belongs_to_user.decidim_assemblies.rb new file mode 100644 index 0000000..3c7c58b --- /dev/null +++ b/db/migrate/20240418105329_assembly_member_belongs_to_user.decidim_assemblies.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20180426162405) + +class AssemblyMemberBelongsToUser < ActiveRecord::Migration[5.1] + def change + add_reference :decidim_assembly_members, :decidim_user, index: { name: "index_decidim_assembly_members_on_decidim_user_id" } + end +end diff --git a/db/migrate/20240418105330_update_assembly_members_index.decidim_assemblies.rb b/db/migrate/20240418105330_update_assembly_members_index.decidim_assemblies.rb new file mode 100644 index 0000000..4f27b18 --- /dev/null +++ b/db/migrate/20240418105330_update_assembly_members_index.decidim_assemblies.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20180515073049) + +class UpdateAssemblyMembersIndex < ActiveRecord::Migration[5.1] + def change + remove_index :decidim_assembly_members, column: :weight + add_index :decidim_assembly_members, [:weight, :created_at] + end +end diff --git a/db/migrate/20240418105331_reset_negative_children_count_counters.decidim_assemblies.rb b/db/migrate/20240418105331_reset_negative_children_count_counters.decidim_assemblies.rb new file mode 100644 index 0000000..67ebc0b --- /dev/null +++ b/db/migrate/20240418105331_reset_negative_children_count_counters.decidim_assemblies.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20190215093700) + +class ResetNegativeChildrenCountCounters < ActiveRecord::Migration[5.2] + def change + ids = Decidim::Assembly.where("children_count < 0").pluck(:id) + ids.each { |id| Decidim::Assembly.reset_counters(id, :children_count) } + end +end diff --git a/db/migrate/20240418105332_create_decidim_assembly_types.decidim_assemblies.rb b/db/migrate/20240418105332_create_decidim_assembly_types.decidim_assemblies.rb new file mode 100644 index 0000000..6f1813e --- /dev/null +++ b/db/migrate/20240418105332_create_decidim_assembly_types.decidim_assemblies.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20200108113855) + +class CreateDecidimAssemblyTypes < ActiveRecord::Migration[5.2] + def change + create_table :decidim_assemblies_types do |t| + t.jsonb :title, null: false + + t.integer :decidim_organization_id, + foreign_key: true, + index: { + name: "index_decidim_assemblies_types_on_decidim_organization_id" + } + + t.timestamps + end + + add_reference :decidim_assemblies, :decidim_assemblies_type, index: true, foreign_key: true + end +end diff --git a/db/migrate/20240418105333_migrate_decidim_assembly_types.decidim_assemblies.rb b/db/migrate/20240418105333_migrate_decidim_assembly_types.decidim_assemblies.rb new file mode 100644 index 0000000..6b5f101 --- /dev/null +++ b/db/migrate/20240418105333_migrate_decidim_assembly_types.decidim_assemblies.rb @@ -0,0 +1,84 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20200108123050) + +# Migrates freezed assembly types to a table where to configure them +class MigrateDecidimAssemblyTypes < ActiveRecord::Migration[5.2] + LEGACY_TYPES = { + "government" => "Government", + "executive" => "Executive", + "consultative_advisory" => "Consultative/Advisory", + "participatory" => "Participatory", + "working_group" => "Working group", + "commission" => "Comission", + "others" => "Others" + }.freeze + + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + class Assembly < ApplicationRecord + self.table_name = :decidim_assemblies + end + + class AssemblyType < ApplicationRecord + self.table_name = :decidim_assemblies_types + end + + def up + Organization.find_each do |organization| + LEGACY_TYPES.each do |type, _english| + title = {} + organization.available_locales.each do |lang| + t = type_localized(type, lang) + title[lang] = t if t + end + + unless type == "others" + assembly_type = AssemblyType.find_or_create_by( + decidim_organization_id: organization.id, + title: + ) + end + Assembly.where(decidim_organization_id: organization.id, assembly_type: type).each do |assembly| + if type == "others" + assembly_type = AssemblyType.find_or_create_by( + decidim_organization_id: organization.id, + title: assembly.assembly_type_other + ) + end + assembly.decidim_assemblies_type_id = assembly_type.id + assembly.save + end + end + end + end + + def down + Assembly.find_each do |assembly| + next unless assembly.decidim_assemblies_type_id + + assembly_type = AssemblyType.find(assembly.decidim_assemblies_type_id) + next unless assembly_type + + key = LEGACY_TYPES.find { |type, _english| type_localized(type, "en") == assembly_type.title["en"] } + + unless key + key = "others" + assembly.assembly_type_other = assembly_type.title + end + assembly.assembly_type = key + assembly.save + end + end + + private + + def type_localized(type, lang) + I18n.with_locale(lang) do + t = I18n.t("assembly_types.#{type}", scope: "decidim.assemblies", default: false) + t ||= LEGACY_TYPES[type] if lang == "en" + t + end + end +end diff --git a/db/migrate/20240418105334_index_foreign_keys_in_decidim_assemblies.decidim_assemblies.rb b/db/migrate/20240418105334_index_foreign_keys_in_decidim_assemblies.decidim_assemblies.rb new file mode 100644 index 0000000..0e59970 --- /dev/null +++ b/db/migrate/20240418105334_index_foreign_keys_in_decidim_assemblies.decidim_assemblies.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20200320105906) + +class IndexForeignKeysInDecidimAssemblies < ActiveRecord::Migration[5.2] + def change + add_index :decidim_assemblies, :decidim_scope_id + end +end diff --git a/db/migrate/20240418105335_index_foreign_keys_in_decidim_assembly_user_roles.decidim_assemblies.rb b/db/migrate/20240418105335_index_foreign_keys_in_decidim_assembly_user_roles.decidim_assemblies.rb new file mode 100644 index 0000000..a23b597 --- /dev/null +++ b/db/migrate/20240418105335_index_foreign_keys_in_decidim_assembly_user_roles.decidim_assemblies.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20200320105907) + +class IndexForeignKeysInDecidimAssemblyUserRoles < ActiveRecord::Migration[5.2] + def change + add_index :decidim_assembly_user_roles, :decidim_user_id + end +end diff --git a/db/migrate/20240418105336_remove_legacy_decidim_assembly_type.decidim_assemblies.rb b/db/migrate/20240418105336_remove_legacy_decidim_assembly_type.decidim_assemblies.rb new file mode 100644 index 0000000..a4a9df9 --- /dev/null +++ b/db/migrate/20240418105336_remove_legacy_decidim_assembly_type.decidim_assemblies.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20200416132109) + +class RemoveLegacyDecidimAssemblyType < ActiveRecord::Migration[5.2] + def change + remove_column :decidim_assemblies, :assembly_type, :string + remove_column :decidim_assemblies, :assembly_type_other, :jsonb + end +end diff --git a/db/migrate/20240418105337_create_decidim_assemblies_settings.decidim_assemblies.rb b/db/migrate/20240418105337_create_decidim_assemblies_settings.decidim_assemblies.rb new file mode 100644 index 0000000..3ae8e58 --- /dev/null +++ b/db/migrate/20240418105337_create_decidim_assemblies_settings.decidim_assemblies.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20200430202456) + +class CreateDecidimAssembliesSettings < ActiveRecord::Migration[5.2] + def change + create_table :decidim_assemblies_settings do |t| + t.boolean :enable_organization_chart, default: true + t.references :decidim_organization, foreign_key: true + end + end +end diff --git a/db/migrate/20240418105338_add_weight_field_to_assembly.decidim_assemblies.rb b/db/migrate/20240418105338_add_weight_field_to_assembly.decidim_assemblies.rb new file mode 100644 index 0000000..d111eb0 --- /dev/null +++ b/db/migrate/20240418105338_add_weight_field_to_assembly.decidim_assemblies.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20210204152393) + +class AddWeightFieldToAssembly < ActiveRecord::Migration[5.2] + def change + add_column :decidim_assemblies, :weight, :integer, null: false, default: true + end +end diff --git a/db/migrate/20240418105339_add_followable_counter_cache_to_assemblies.decidim_assemblies.rb b/db/migrate/20240418105339_add_followable_counter_cache_to_assemblies.decidim_assemblies.rb new file mode 100644 index 0000000..f56e5f3 --- /dev/null +++ b/db/migrate/20240418105339_add_followable_counter_cache_to_assemblies.decidim_assemblies.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20210310120444) + +class AddFollowableCounterCacheToAssemblies < ActiveRecord::Migration[5.2] + def change + add_column :decidim_assemblies, :follows_count, :integer, null: false, default: 0, index: true + + reversible do |dir| + dir.up do + Decidim::Assembly.reset_column_information + Decidim::Assembly.find_each do |record| + record.class.reset_counters(record.id, :follows) + end + end + end + end +end diff --git a/db/migrate/20240418105340_add_announcement_to_assemblies.decidim_assemblies.rb b/db/migrate/20240418105340_add_announcement_to_assemblies.decidim_assemblies.rb new file mode 100644 index 0000000..3e945ba --- /dev/null +++ b/db/migrate/20240418105340_add_announcement_to_assemblies.decidim_assemblies.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20210507063604) + +class AddAnnouncementToAssemblies < ActiveRecord::Migration[6.0] + def change + add_column :decidim_assemblies, :announcement, :jsonb + end +end diff --git a/db/migrate/20240418105341_remove_designation_mode_from_assembly_members.decidim_assemblies.rb b/db/migrate/20240418105341_remove_designation_mode_from_assembly_members.decidim_assemblies.rb new file mode 100644 index 0000000..7ac770b --- /dev/null +++ b/db/migrate/20240418105341_remove_designation_mode_from_assembly_members.decidim_assemblies.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_assemblies (originally 20210907120249) + +class RemoveDesignationModeFromAssemblyMembers < ActiveRecord::Migration[6.0] + def change + remove_column :decidim_assembly_members, :designation_mode, :string + end +end diff --git a/db/migrate/20240418105342_create_decidim_pages.decidim_pages.rb b/db/migrate/20240418105342_create_decidim_pages.decidim_pages.rb new file mode 100644 index 0000000..57fdb59 --- /dev/null +++ b/db/migrate/20240418105342_create_decidim_pages.decidim_pages.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_pages (originally 20161116121353) + +class CreateDecidimPages < ActiveRecord::Migration[5.0] + def change + create_table :decidim_pages_pages do |t| + t.jsonb :title + t.jsonb :body + t.references :decidim_feature, index: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105343_add_commentable_to_pages.decidim_pages.rb b/db/migrate/20240418105343_add_commentable_to_pages.decidim_pages.rb new file mode 100644 index 0000000..325c9fc --- /dev/null +++ b/db/migrate/20240418105343_add_commentable_to_pages.decidim_pages.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_pages (originally 20161214150429) + +class AddCommentableToPages < ActiveRecord::Migration[5.0] + def change + add_column :decidim_pages_pages, :commentable, :boolean, null: false, default: false + end +end diff --git a/db/migrate/20240418105344_remove_commentable_flag_from_pages.decidim_pages.rb b/db/migrate/20240418105344_remove_commentable_flag_from_pages.decidim_pages.rb new file mode 100644 index 0000000..37e72ea --- /dev/null +++ b/db/migrate/20240418105344_remove_commentable_flag_from_pages.decidim_pages.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_pages (originally 20170110145040) + +class RemoveCommentableFlagFromPages < ActiveRecord::Migration[5.0] + def change + remove_column :decidim_pages_pages, :commentable + end +end diff --git a/db/migrate/20240418105345_remove_page_feature_titles.decidim_pages.rb b/db/migrate/20240418105345_remove_page_feature_titles.decidim_pages.rb new file mode 100644 index 0000000..5920827 --- /dev/null +++ b/db/migrate/20240418105345_remove_page_feature_titles.decidim_pages.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_pages (originally 20170220091402) + +class RemovePageFeatureTitles < ActiveRecord::Migration[5.0] + def change + remove_column :decidim_pages_pages, :title + end +end diff --git a/db/migrate/20240418105346_rename_features_to_components_at_pages.decidim_pages.rb b/db/migrate/20240418105346_rename_features_to_components_at_pages.decidim_pages.rb new file mode 100644 index 0000000..7d83078 --- /dev/null +++ b/db/migrate/20240418105346_rename_features_to_components_at_pages.decidim_pages.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_pages (originally 20180305133658) + +class RenameFeaturesToComponentsAtPages < ActiveRecord::Migration[5.1] + def change + rename_column :decidim_pages_pages, :decidim_feature_id, :decidim_component_id + + if index_name_exists?(:decidim_pages_pages, "index_decidim_pages_pages_on_decidim_feature_id") + rename_index :decidim_pages_pages, "index_decidim_pages_pages_on_decidim_feature_id", "index_decidim_pages_pages_on_decidim_component_id" + end + end +end diff --git a/db/migrate/20240418105347_create_comments.decidim_comments.rb b/db/migrate/20240418105347_create_comments.decidim_comments.rb new file mode 100644 index 0000000..67bd7b0 --- /dev/null +++ b/db/migrate/20240418105347_create_comments.decidim_comments.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20161130143508) + +class CreateComments < ActiveRecord::Migration[5.0] + def change + create_table :decidim_comments_comments do |t| + t.text :body, null: false + t.references :decidim_commentable, null: false, polymorphic: true, index: { name: "decidim_comments_comment_commentable" } + t.references :decidim_author, null: false, index: { name: "decidim_comments_comment_author" } + + t.timestamps + end + + add_index :decidim_comments_comments, :created_at + end +end diff --git a/db/migrate/20240418105348_add_depth_to_comments.decidim_comments.rb b/db/migrate/20240418105348_add_depth_to_comments.decidim_comments.rb new file mode 100644 index 0000000..36b2c5c --- /dev/null +++ b/db/migrate/20240418105348_add_depth_to_comments.decidim_comments.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20161214082645) + +class AddDepthToComments < ActiveRecord::Migration[5.0] + def change + add_column :decidim_comments_comments, :depth, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20240418105349_add_alignment_to_comments.decidim_comments.rb b/db/migrate/20240418105349_add_alignment_to_comments.decidim_comments.rb new file mode 100644 index 0000000..d98dc90 --- /dev/null +++ b/db/migrate/20240418105349_add_alignment_to_comments.decidim_comments.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20161216102820) + +class AddAlignmentToComments < ActiveRecord::Migration[5.0] + def change + add_column :decidim_comments_comments, :alignment, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20240418105350_create_comment_votes.decidim_comments.rb b/db/migrate/20240418105350_create_comment_votes.decidim_comments.rb new file mode 100644 index 0000000..8b4938a --- /dev/null +++ b/db/migrate/20240418105350_create_comment_votes.decidim_comments.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20161219150806) + +class CreateCommentVotes < ActiveRecord::Migration[5.0] + def change + create_table :decidim_comments_comment_votes do |t| + t.integer :weight, null: false + t.references :decidim_comment, null: false, index: { name: "decidim_comments_comment_vote_comment" } + t.references :decidim_author, null: false, index: { name: "decidim_comments_comment_vote_author" } + + t.timestamps + end + + add_index :decidim_comments_comment_votes, [:decidim_comment_id, :decidim_author_id], unique: true, name: "decidim_comments_comment_vote_comment_author_unique" + end +end diff --git a/db/migrate/20240418105351_add_user_group_id_to_comments.decidim_comments.rb b/db/migrate/20240418105351_add_user_group_id_to_comments.decidim_comments.rb new file mode 100644 index 0000000..114f99c --- /dev/null +++ b/db/migrate/20240418105351_add_user_group_id_to_comments.decidim_comments.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20170123102043) + +class AddUserGroupIdToComments < ActiveRecord::Migration[5.0] + def change + add_column :decidim_comments_comments, :decidim_user_group_id, :integer, index: true + end +end diff --git a/db/migrate/20240418105352_add_root_commentable_to_comments.decidim_comments.rb b/db/migrate/20240418105352_add_root_commentable_to_comments.decidim_comments.rb new file mode 100644 index 0000000..91c42c0 --- /dev/null +++ b/db/migrate/20240418105352_add_root_commentable_to_comments.decidim_comments.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20170504085413) + +class AddRootCommentableToComments < ActiveRecord::Migration[5.0] + def change + change_table :decidim_comments_comments do |t| + t.references :decidim_root_commentable, polymorphic: true, index: { name: "decidim_comments_comment_root_commentable" } + end + end +end diff --git a/db/migrate/20240418105353_update_root_commentable_for_comments.decidim_comments.rb b/db/migrate/20240418105353_update_root_commentable_for_comments.decidim_comments.rb new file mode 100644 index 0000000..2e66959 --- /dev/null +++ b/db/migrate/20240418105353_update_root_commentable_for_comments.decidim_comments.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20170510091348) + +class UpdateRootCommentableForComments < ActiveRecord::Migration[5.0] + def up + # rubocop:disable Rails/SkipsModelValidations + Decidim::Comments::Comment.where(depth: 0).update_all( + "decidim_root_commentable_id = decidim_commentable_id, decidim_root_commentable_type = decidim_commentable_type" + ) + # rubocop:enable Rails/SkipsModelValidations + + Decidim::Comments::Comment.where("depth > 0").find_each do |comment| + comment.root_commentable = root_commentable(comment) + comment.save(validate: false) + end + end + + def down; end + + private + + def root_commentable(comment) + return comment.commentable if comment.depth.zero? + + root_commentable comment.commentable + end +end diff --git a/db/migrate/20240418105354_set_root_commentable_null_constraints.decidim_comments.rb b/db/migrate/20240418105354_set_root_commentable_null_constraints.decidim_comments.rb new file mode 100644 index 0000000..b28113e --- /dev/null +++ b/db/migrate/20240418105354_set_root_commentable_null_constraints.decidim_comments.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20170510091409) + +class SetRootCommentableNullConstraints < ActiveRecord::Migration[5.0] + def change + change_column_null(:decidim_comments_comments, :decidim_root_commentable_id, false) + change_column_null(:decidim_comments_comments, :decidim_root_commentable_type, false) + end +end diff --git a/db/migrate/20240418105355_fix_user_groups_ids_in_comments.decidim_comments.rb b/db/migrate/20240418105355_fix_user_groups_ids_in_comments.decidim_comments.rb new file mode 100644 index 0000000..9021b32 --- /dev/null +++ b/db/migrate/20240418105355_fix_user_groups_ids_in_comments.decidim_comments.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20181003080320) + +class FixUserGroupsIdsInComments < ActiveRecord::Migration[5.2] + # rubocop:disable Rails/SkipsModelValidations + def change + Decidim::UserGroup.find_each do |group| + old_id = group.extended_data["old_user_group_id"] + next unless old_id + + Decidim::Comments::Comment + .where(decidim_user_group_id: old_id) + .update_all(decidim_user_group_id: group.id) + end + end + # rubocop:enable Rails/SkipsModelValidations +end diff --git a/db/migrate/20240418105356_make_authors_polymorphic_for_comments.decidim_comments.rb b/db/migrate/20240418105356_make_authors_polymorphic_for_comments.decidim_comments.rb new file mode 100644 index 0000000..fb3bc2d --- /dev/null +++ b/db/migrate/20240418105356_make_authors_polymorphic_for_comments.decidim_comments.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20181016142511) + +class MakeAuthorsPolymorphicForComments < ActiveRecord::Migration[5.2] + class Comment < ApplicationRecord + self.table_name = :decidim_comments_comments + end + + def change + add_column :decidim_comments_comments, :decidim_author_type, :string + + reversible do |direction| + direction.up do + execute <<~SQL.squish + UPDATE decidim_comments_comments + SET decidim_author_type = 'Decidim::UserBaseEntity' + SQL + end + end + + add_index :decidim_comments_comments, + [:decidim_author_id, :decidim_author_type], + name: "index_decidim_comments_comments_on_decidim_author" + + change_column_null :decidim_comments_comments, :decidim_author_id, false + change_column_null :decidim_comments_comments, :decidim_author_type, false + Comment.reset_column_information + end +end diff --git a/db/migrate/20240418105357_make_author_polymorphic_for_comment_votes.decidim_comments.rb b/db/migrate/20240418105357_make_author_polymorphic_for_comment_votes.decidim_comments.rb new file mode 100644 index 0000000..9f4dbe6 --- /dev/null +++ b/db/migrate/20240418105357_make_author_polymorphic_for_comment_votes.decidim_comments.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20181019092928) + +class MakeAuthorPolymorphicForCommentVotes < ActiveRecord::Migration[5.2] + class CommentVote < ApplicationRecord + self.table_name = :decidim_comments_comment_votes + end + + def change + add_column :decidim_comments_comment_votes, :decidim_author_type, :string + + reversible do |direction| + direction.up do + execute <<~SQL.squish + UPDATE decidim_comments_comment_votes + SET decidim_author_type = 'Decidim::UserBaseEntity' + SQL + end + end + + add_index :decidim_comments_comment_votes, + [:decidim_author_id, :decidim_author_type], + name: "index_decidim_comments_comment_votes_on_decidim_author" + + change_column_null :decidim_comments_comment_votes, :decidim_author_id, false + change_column_null :decidim_comments_comment_votes, :decidim_author_type, false + CommentVote.reset_column_information + end +end diff --git a/db/migrate/20240418105358_index_foreign_keys_in_decidim_comments_comments.decidim_comments.rb b/db/migrate/20240418105358_index_foreign_keys_in_decidim_comments_comments.decidim_comments.rb new file mode 100644 index 0000000..b14d131 --- /dev/null +++ b/db/migrate/20240418105358_index_foreign_keys_in_decidim_comments_comments.decidim_comments.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20200320105911) + +class IndexForeignKeysInDecidimCommentsComments < ActiveRecord::Migration[5.2] + def change + add_index :decidim_comments_comments, :decidim_user_group_id + end +end diff --git a/db/migrate/20240418105359_make_comments_handle_i18n.decidim_comments.rb b/db/migrate/20240418105359_make_comments_handle_i18n.decidim_comments.rb new file mode 100644 index 0000000..72263d5 --- /dev/null +++ b/db/migrate/20240418105359_make_comments_handle_i18n.decidim_comments.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20200706123136) + +class MakeCommentsHandleI18n < ActiveRecord::Migration[5.2] + class User < ApplicationRecord + self.table_name = :decidim_users + end + + class Comment < ApplicationRecord + self.table_name = :decidim_comments_comments + end + + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + def change + add_column :decidim_comments_comments, :new_body, :jsonb + + User.reset_column_information + Comment.reset_column_information + Organization.reset_column_information + + Comment.find_each do |comment| + locale, org_id = User.where(id: comment.decidim_author_id).pick(:locale, :decidim_organization_id) + locale = locale.presence || Organization.find(org_id).default_locale + + comment.new_body = { + locale => comment.body + } + + comment.save! + end + + remove_column :decidim_comments_comments, :body + rename_column :decidim_comments_comments, :new_body, :body + + User.reset_column_information + Comment.reset_column_information + Organization.reset_column_information + end +end diff --git a/db/migrate/20240418105360_add_commentable_counter_cache_to_comments.decidim_comments.rb b/db/migrate/20240418105360_add_commentable_counter_cache_to_comments.decidim_comments.rb new file mode 100644 index 0000000..52ea9e7 --- /dev/null +++ b/db/migrate/20240418105360_add_commentable_counter_cache_to_comments.decidim_comments.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20200828101910) + +class AddCommentableCounterCacheToComments < ActiveRecord::Migration[5.2] + def change + add_column :decidim_comments_comments, :comments_count, :integer, null: false, default: 0, index: true + Decidim::Comments::Comment.reset_column_information + Decidim::Comments::Comment.find_each(&:update_comments_count) + end +end diff --git a/db/migrate/20240418105361_add_participatory_process_to_comments.decidim_comments.rb b/db/migrate/20240418105361_add_participatory_process_to_comments.decidim_comments.rb new file mode 100644 index 0000000..4593b6d --- /dev/null +++ b/db/migrate/20240418105361_add_participatory_process_to_comments.decidim_comments.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20210402124534) + +class AddParticipatoryProcessToComments < ActiveRecord::Migration[5.2] + def change + add_column :decidim_comments_comments, :decidim_participatory_space_type, :string + add_column :decidim_comments_comments, :decidim_participatory_space_id, :integer + + add_index :decidim_comments_comments, + [:decidim_participatory_space_id, :decidim_participatory_space_type], + name: "index_decidim_comments_on_decidim_participatory_space" + end +end diff --git a/db/migrate/20240418105362_add_deleted_at_column_to_comments.decidim_comments.rb b/db/migrate/20240418105362_add_deleted_at_column_to_comments.decidim_comments.rb new file mode 100644 index 0000000..1294018 --- /dev/null +++ b/db/migrate/20240418105362_add_deleted_at_column_to_comments.decidim_comments.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_comments (originally 20210529095942) + +class AddDeletedAtColumnToComments < ActiveRecord::Migration[6.0] + def change + add_column :decidim_comments_comments, :deleted_at, :datetime + end +end diff --git a/db/migrate/20240418105363_create_decidim_proposals.decidim_proposals.rb b/db/migrate/20240418105363_create_decidim_proposals.decidim_proposals.rb new file mode 100644 index 0000000..c53078c --- /dev/null +++ b/db/migrate/20240418105363_create_decidim_proposals.decidim_proposals.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20161212110850) + +class CreateDecidimProposals < ActiveRecord::Migration[5.0] + def change + create_table :decidim_proposals_proposals do |t| + t.text :title, null: false + t.text :body, null: false + t.references :decidim_feature, index: true, null: false + t.references :decidim_author, index: true + t.references :decidim_category, index: true + t.references :decidim_scope, index: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105364_create_proposal_votes.decidim_proposals.rb b/db/migrate/20240418105364_create_proposal_votes.decidim_proposals.rb new file mode 100644 index 0000000..5e1ef4d --- /dev/null +++ b/db/migrate/20240418105364_create_proposal_votes.decidim_proposals.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170112115253) + +class CreateProposalVotes < ActiveRecord::Migration[5.0] + def change + create_table :decidim_proposals_proposal_votes do |t| + t.references :decidim_proposal, null: false, index: { name: "decidim_proposals_proposal_vote_proposal" } + t.references :decidim_author, null: false, index: { name: "decidim_proposals_proposal_vote_author" } + + t.timestamps + end + + add_index :decidim_proposals_proposal_votes, [:decidim_proposal_id, :decidim_author_id], unique: true, name: "decidim_proposals_proposal_vote_proposal_author_unique" + end +end diff --git a/db/migrate/20240418105365_add_text_search_indexes.decidim_proposals.rb b/db/migrate/20240418105365_add_text_search_indexes.decidim_proposals.rb new file mode 100644 index 0000000..f543ab5 --- /dev/null +++ b/db/migrate/20240418105365_add_text_search_indexes.decidim_proposals.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170113114245) + +class AddTextSearchIndexes < ActiveRecord::Migration[5.0] + def change + add_index :decidim_proposals_proposals, :title, name: "decidim_proposals_proposal_title_search" + add_index :decidim_proposals_proposals, :body, name: "decidim_proposals_proposal_body_search" + end +end diff --git a/db/migrate/20240418105366_add_counter_cache_votes_to_proposals.decidim_proposals.rb b/db/migrate/20240418105366_add_counter_cache_votes_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..eb19948 --- /dev/null +++ b/db/migrate/20240418105366_add_counter_cache_votes_to_proposals.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170118120151) + +class AddCounterCacheVotesToProposals < ActiveRecord::Migration[5.0] + def change + add_column :decidim_proposals_proposals, :proposal_votes_count, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20240418105367_add_user_group_id_to_proposals.decidim_proposals.rb b/db/migrate/20240418105367_add_user_group_id_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..a77078a --- /dev/null +++ b/db/migrate/20240418105367_add_user_group_id_to_proposals.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170120151202) + +class AddUserGroupIdToProposals < ActiveRecord::Migration[5.0] + def change + add_column :decidim_proposals_proposals, :decidim_user_group_id, :integer, index: true + end +end diff --git a/db/migrate/20240418105368_add_answers_to_proposals.decidim_proposals.rb b/db/migrate/20240418105368_add_answers_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..f36e5d7 --- /dev/null +++ b/db/migrate/20240418105368_add_answers_to_proposals.decidim_proposals.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170131092413) + +class AddAnswersToProposals < ActiveRecord::Migration[5.0] + def change + add_column :decidim_proposals_proposals, :state, :string, index: true + add_column :decidim_proposals_proposals, :answered_at, :datetime, index: true + add_column :decidim_proposals_proposals, :answer, :jsonb + end +end diff --git a/db/migrate/20240418105369_add_index_to_decidim_proposals_proposals_proposal_votes_count.decidim_proposals.rb b/db/migrate/20240418105369_add_index_to_decidim_proposals_proposals_proposal_votes_count.decidim_proposals.rb new file mode 100644 index 0000000..ad13ce3 --- /dev/null +++ b/db/migrate/20240418105369_add_index_to_decidim_proposals_proposals_proposal_votes_count.decidim_proposals.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170205082832) + +class AddIndexToDecidimProposalsProposalsProposalVotesCount < ActiveRecord::Migration[5.0] + def change + add_index :decidim_proposals_proposals, :proposal_votes_count + add_index :decidim_proposals_proposals, :created_at + add_index :decidim_proposals_proposals, :state + end +end diff --git a/db/migrate/20240418105370_create_proposal_reports.decidim_proposals.rb b/db/migrate/20240418105370_create_proposal_reports.decidim_proposals.rb new file mode 100644 index 0000000..691dae6 --- /dev/null +++ b/db/migrate/20240418105370_create_proposal_reports.decidim_proposals.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170215113152) + +class CreateProposalReports < ActiveRecord::Migration[5.0] + def change + create_table :decidim_proposals_proposal_reports do |t| + t.references :decidim_proposal, null: false, index: { name: "decidim_proposals_proposal_result_proposal" } + t.references :decidim_user, null: false, index: { name: "decidim_proposals_proposal_result_user" } + t.string :reason, null: false + t.text :details + + t.timestamps + end + + add_index :decidim_proposals_proposal_reports, [:decidim_proposal_id, :decidim_user_id], unique: true, name: "decidim_proposals_proposal_report_proposal_user_unique" + end +end diff --git a/db/migrate/20240418105371_add_report_count_to_proposals.decidim_proposals.rb b/db/migrate/20240418105371_add_report_count_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..12e483f --- /dev/null +++ b/db/migrate/20240418105371_add_report_count_to_proposals.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170215131720) + +class AddReportCountToProposals < ActiveRecord::Migration[5.0] + def change + add_column :decidim_proposals_proposals, :report_count, :integer, default: 0 + end +end diff --git a/db/migrate/20240418105372_add_reference_to_proposals.decidim_proposals.rb b/db/migrate/20240418105372_add_reference_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..91b360b --- /dev/null +++ b/db/migrate/20240418105372_add_reference_to_proposals.decidim_proposals.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170215132030) + +class AddReferenceToProposals < ActiveRecord::Migration[5.0] + class Proposal < ApplicationRecord + self.table_name = :decidim_proposals_proposals + end + + def change + add_column :decidim_proposals_proposals, :reference, :string + Proposal.find_each(&:save) + change_column_null :decidim_proposals_proposals, :reference, false + end +end diff --git a/db/migrate/20240418105373_add_hidden_at_to_proposals.decidim_proposals.rb b/db/migrate/20240418105373_add_hidden_at_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..bc8b193 --- /dev/null +++ b/db/migrate/20240418105373_add_hidden_at_to_proposals.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170220152416) + +class AddHiddenAtToProposals < ActiveRecord::Migration[5.0] + def change + add_column :decidim_proposals_proposals, :hidden_at, :datetime + end +end diff --git a/db/migrate/20240418105374_add_geolocalization_fields_to_proposals.decidim_proposals.rb b/db/migrate/20240418105374_add_geolocalization_fields_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..0d3f9d5 --- /dev/null +++ b/db/migrate/20240418105374_add_geolocalization_fields_to_proposals.decidim_proposals.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170228105156) + +class AddGeolocalizationFieldsToProposals < ActiveRecord::Migration[5.0] + def change + add_column :decidim_proposals_proposals, :address, :text + add_column :decidim_proposals_proposals, :latitude, :float + add_column :decidim_proposals_proposals, :longitude, :float + end +end diff --git a/db/migrate/20240418105375_migrate_proposal_reports_data_to_reports.decidim_proposals.rb b/db/migrate/20240418105375_migrate_proposal_reports_data_to_reports.decidim_proposals.rb new file mode 100644 index 0000000..1d5ce0c --- /dev/null +++ b/db/migrate/20240418105375_migrate_proposal_reports_data_to_reports.decidim_proposals.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170307085300) + +class MigrateProposalReportsDataToReports < ActiveRecord::Migration[5.0] + class Decidim::Proposals::ProposalReport < ApplicationRecord + belongs_to :user, foreign_key: "decidim_user_id", class_name: "Decidim::User" + belongs_to :proposal, foreign_key: "decidim_proposal_id", class_name: "Decidim::Proposals::Proposal" + end + + def change + Decidim::Proposals::ProposalReport.find_each do |proposal_report| + moderation = Decidim::Moderation.find_or_create_by!(reportable: proposal_report.proposal, + participatory_process: proposal_report.proposal.feature.participatory_space) + Decidim::Report.create!(moderation:, + user: proposal_report.user, + reason: proposal_report.reason, + details: proposal_report.details) + moderation.update!(report_count: moderation.report_count + 1) + end + + drop_table :decidim_proposals_proposal_reports + remove_column :decidim_proposals_proposals, :report_count + remove_column :decidim_proposals_proposals, :hidden_at + end +end diff --git a/db/migrate/20240418105376_remove_not_null_reference_proposals.decidim_proposals.rb b/db/migrate/20240418105376_remove_not_null_reference_proposals.decidim_proposals.rb new file mode 100644 index 0000000..e7d0d13 --- /dev/null +++ b/db/migrate/20240418105376_remove_not_null_reference_proposals.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170410073742) + +class RemoveNotNullReferenceProposals < ActiveRecord::Migration[5.0] + def change + change_column_null :decidim_proposals_proposals, :reference, true + end +end diff --git a/db/migrate/20240418105377_migrate_proposals_category.decidim_proposals.rb b/db/migrate/20240418105377_migrate_proposals_category.decidim_proposals.rb new file mode 100644 index 0000000..194157c --- /dev/null +++ b/db/migrate/20240418105377_migrate_proposals_category.decidim_proposals.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20170612101809) + +class MigrateProposalsCategory < ActiveRecord::Migration[5.1] + def change + # Create categorizations ensuring database integrity + execute(' + INSERT INTO decidim_categorizations(decidim_category_id, categorizable_id, categorizable_type, created_at, updated_at) + SELECT decidim_category_id, decidim_proposals_proposals.id, \'Decidim::Proposals::Proposal\', NOW(), NOW() + FROM decidim_proposals_proposals + INNER JOIN decidim_categories ON decidim_categories.id = decidim_proposals_proposals.decidim_category_id + ') + # Remove unused column + remove_column :decidim_proposals_proposals, :decidim_category_id + end +end diff --git a/db/migrate/20240418105378_create_proposal_endorsements.decidim_proposals.rb b/db/migrate/20240418105378_create_proposal_endorsements.decidim_proposals.rb new file mode 100644 index 0000000..856b699 --- /dev/null +++ b/db/migrate/20240418105378_create_proposal_endorsements.decidim_proposals.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20171201115434) + +class CreateProposalEndorsements < ActiveRecord::Migration[5.1] + def change + create_table :decidim_proposals_proposal_endorsements do |t| + t.references :decidim_proposal, null: false, index: { name: "decidim_proposals_proposal_endorsement_proposal" } + t.references :decidim_author, null: false, index: { name: "decidim_proposals_proposal_endorsement_author" } + t.references :decidim_user_group, null: true, index: { name: "decidim_proposals_proposal_endorsement_user_group" } + + t.timestamps + end + + add_index :decidim_proposals_proposal_endorsements, "decidim_proposal_id, decidim_author_id, (coalesce(decidim_user_group_id,-1))", unique: true, name: + "decidim_proposals_proposal_endorsmt_proposal_auth_ugroup_uniq" + end +end diff --git a/db/migrate/20240418105379_add_counter_cache_endorsements_to_proposals.decidim_proposals.rb b/db/migrate/20240418105379_add_counter_cache_endorsements_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..1d1b8ba --- /dev/null +++ b/db/migrate/20240418105379_add_counter_cache_endorsements_to_proposals.decidim_proposals.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20171201122623) + +class AddCounterCacheEndorsementsToProposals < ActiveRecord::Migration[5.1] + def change + add_column :decidim_proposals_proposals, :proposal_endorsements_count, :integer, null: false, default: 0 + add_index :decidim_proposals_proposals, :proposal_endorsements_count, name: "idx_decidim_proposals_proposals_on_proposal_endorsemnts_count" + end +end diff --git a/db/migrate/20240418105380_enable_pg_trgm_extension_for_proposals.decidim_proposals.rb b/db/migrate/20240418105380_enable_pg_trgm_extension_for_proposals.decidim_proposals.rb new file mode 100644 index 0000000..c2edf55 --- /dev/null +++ b/db/migrate/20240418105380_enable_pg_trgm_extension_for_proposals.decidim_proposals.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20171212102250) + +class EnablePgTrgmExtensionForProposals < ActiveRecord::Migration[5.1] + def change + return if extension_enabled?("pg_trgm") + + begin + # required so that test suite works in ci env + enable_extension "pg_trgm" + rescue StandardError + raise <<-MSG.squish + Decidim requires the pg_trgm extension to be enabled in your PostgreSQL. + You can do so by running `CREATE EXTENSION IF NOT EXISTS "pg_trgm";` on the current DB as a PostgreSQL + super user. + MSG + end + end +end diff --git a/db/migrate/20240418105381_add_published_at_to_proposals.decidim_proposals.rb b/db/migrate/20240418105381_add_published_at_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..7c9c6c0 --- /dev/null +++ b/db/migrate/20240418105381_add_published_at_to_proposals.decidim_proposals.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20171220084719) + +class AddPublishedAtToProposals < ActiveRecord::Migration[5.1] + def up + add_column :decidim_proposals_proposals, :published_at, :datetime, index: true + # rubocop:disable Rails/SkipsModelValidations + Decidim::Proposals::Proposal.update_all("published_at = updated_at") + # rubocop:enable Rails/SkipsModelValidations + end + + def down + remove_column :decidim_proposals_proposals, :published_at + end +end diff --git a/db/migrate/20240418105382_create_decidim_proposal_notes.decidim_proposals.rb b/db/migrate/20240418105382_create_decidim_proposal_notes.decidim_proposals.rb new file mode 100644 index 0000000..3089634 --- /dev/null +++ b/db/migrate/20240418105382_create_decidim_proposal_notes.decidim_proposals.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180111110204) + +class CreateDecidimProposalNotes < ActiveRecord::Migration[5.1] + def change + create_table :decidim_proposals_proposal_notes do |t| + t.references :decidim_proposal, null: false, index: { name: "decidim_proposals_proposal_note_proposal" } + t.references :decidim_author, null: false, index: { name: "decidim_proposals_proposal_note_author" } + t.text :body, null: false + + t.timestamps + end + + add_column :decidim_proposals_proposals, :proposal_notes_count, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20240418105383_add_index_created_at_proposal_notes.decidim_proposals.rb b/db/migrate/20240418105383_add_index_created_at_proposal_notes.decidim_proposals.rb new file mode 100644 index 0000000..c1126d7 --- /dev/null +++ b/db/migrate/20240418105383_add_index_created_at_proposal_notes.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180115155220) + +class AddIndexCreatedAtProposalNotes < ActiveRecord::Migration[5.1] + def change + add_index :decidim_proposals_proposal_notes, :created_at + end +end diff --git a/db/migrate/20240418105384_rename_features_to_components_at_proposals.decidim_proposals.rb b/db/migrate/20240418105384_rename_features_to_components_at_proposals.decidim_proposals.rb new file mode 100644 index 0000000..9d9d86e --- /dev/null +++ b/db/migrate/20240418105384_rename_features_to_components_at_proposals.decidim_proposals.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180305133811) + +class RenameFeaturesToComponentsAtProposals < ActiveRecord::Migration[5.1] + def change + rename_column :decidim_proposals_proposals, :decidim_feature_id, :decidim_component_id + + if index_name_exists?(:decidim_proposals_proposals, "index_decidim_proposals_proposals_on_decidim_feature_id") + rename_index :decidim_proposals_proposals, "index_decidim_proposals_proposals_on_decidim_feature_id", "index_decidim_proposals_proposals_on_decidim_component_id" + end + end +end diff --git a/db/migrate/20240418105385_create_decidim_proposals_collaborative_drafts.decidim_proposals.rb b/db/migrate/20240418105385_create_decidim_proposals_collaborative_drafts.decidim_proposals.rb new file mode 100644 index 0000000..8d5f78c --- /dev/null +++ b/db/migrate/20240418105385_create_decidim_proposals_collaborative_drafts.decidim_proposals.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180326091532) + +class CreateDecidimProposalsCollaborativeDrafts < ActiveRecord::Migration[5.1] + def change + create_table :decidim_proposals_collaborative_drafts do |t| + t.text "title", null: false + t.text "body", null: false + t.integer "decidim_component_id", null: false + t.integer "decidim_scope_id" + t.string "state" + t.string "reference" + t.text "address" + t.float "latitude" + t.float "longitude" + t.datetime "published_at" + t.integer "authors_count", default: 0, null: false + t.integer "versions_count", default: 0, null: false + t.integer "contributions_count", default: 0, null: false + t.index ["body"], name: "decidim_proposals_collaborative_draft_body_search" + t.index ["updated_at"], name: "decidim_proposals_collaborative_drafts_on_updated_at" + t.index ["decidim_component_id"], name: "decidim_proposals_collaborative_drafts_on_decidim_component_id" + t.index ["decidim_scope_id"], name: "decidim_proposals_collaborative_drafts_on_decidim_scope_id" + t.index ["state"], name: "decidim_proposals_collaborative_drafts_on_state" + t.index ["title"], name: "decidim_proposals_collaborative_drafts_title_search" + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105386_fix_nil_threshold_per_proposal.decidim_proposals.rb b/db/migrate/20240418105386_fix_nil_threshold_per_proposal.decidim_proposals.rb new file mode 100644 index 0000000..14be770 --- /dev/null +++ b/db/migrate/20240418105386_fix_nil_threshold_per_proposal.decidim_proposals.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180413135249) + +class FixNilThresholdPerProposal < ActiveRecord::Migration[5.1] + class Component < ApplicationRecord + self.table_name = :decidim_components + end + + def change + proposal_components = Component.where(manifest_name: "proposals") + + proposal_components.each do |component| + settings = component.attributes["settings"] + settings["global"]["threshold_per_proposal"] ||= 0 + component.settings = settings + component.save + end + end +end diff --git a/db/migrate/20240418105387_add_counter_cache_coauthorships_to_proposals.decidim_proposals.rb b/db/migrate/20240418105387_add_counter_cache_coauthorships_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..d8e8e76 --- /dev/null +++ b/db/migrate/20240418105387_add_counter_cache_coauthorships_to_proposals.decidim_proposals.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180529101323) + +class AddCounterCacheCoauthorshipsToProposals < ActiveRecord::Migration[5.1] + def change + add_column :decidim_proposals_proposals, :coauthorships_count, :integer, null: false, default: 0 + add_index :decidim_proposals_proposals, :coauthorships_count, name: "idx_decidim_proposals_proposals_on_proposal_coauthorships_count" + end +end diff --git a/db/migrate/20240418105388_move_authorships_to_coauthorships.decidim_proposals.rb b/db/migrate/20240418105388_move_authorships_to_coauthorships.decidim_proposals.rb new file mode 100644 index 0000000..aa6b1aa --- /dev/null +++ b/db/migrate/20240418105388_move_authorships_to_coauthorships.decidim_proposals.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180529110230) + +class MoveAuthorshipsToCoauthorships < ActiveRecord::Migration[5.1] + class Proposal < ApplicationRecord + self.table_name = :decidim_proposals_proposals + end + + class Coauthorship < ApplicationRecord + self.table_name = :decidim_coauthorships + end + + def change + proposals = Proposal.all + + proposals.each do |proposal| + author_id = proposal.attributes["decidim_author_id"] + user_group_id = proposal.attributes["decidim_user_group_id"] + + next if author_id.nil? + + Coauthorship.create!( + coauthorable_id: proposal.id, + coauthorable_type: "Decidim::Proposals::Proposal", + decidim_author_id: author_id, + decidim_user_group_id: user_group_id + ) + end + end +end diff --git a/db/migrate/20240418105389_remove_authorships_from_proposals.decidim_proposals.rb b/db/migrate/20240418105389_remove_authorships_from_proposals.decidim_proposals.rb new file mode 100644 index 0000000..00070ea --- /dev/null +++ b/db/migrate/20240418105389_remove_authorships_from_proposals.decidim_proposals.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180529110830) + +class RemoveAuthorshipsFromProposals < ActiveRecord::Migration[5.1] + def change + remove_column :decidim_proposals_proposals, :decidim_author_id, :integer + remove_column :decidim_proposals_proposals, :decidim_user_group_id, :integer + end +end diff --git a/db/migrate/20240418105390_create_collaborative_draft_collaborator_requests.decidim_proposals.rb b/db/migrate/20240418105390_create_collaborative_draft_collaborator_requests.decidim_proposals.rb new file mode 100644 index 0000000..64e71e0 --- /dev/null +++ b/db/migrate/20240418105390_create_collaborative_draft_collaborator_requests.decidim_proposals.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180613151121) + +class CreateCollaborativeDraftCollaboratorRequests < ActiveRecord::Migration[5.2] + def change + create_table :decidim_proposals_collaborative_draft_collaborator_requests do |t| + t.belongs_to :decidim_proposals_collaborative_draft, null: false, index: { name: "index_collab_requests_on_decidim_proposals_collab_draft_id" } + t.belongs_to :decidim_user, null: false, index: { name: "index_collab_requests_on_decidim_user_id" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105391_add_counter_cache_coauthorships_to_collaborative_drafts.decidim_proposals.rb b/db/migrate/20240418105391_add_counter_cache_coauthorships_to_collaborative_drafts.decidim_proposals.rb new file mode 100644 index 0000000..1286d32 --- /dev/null +++ b/db/migrate/20240418105391_add_counter_cache_coauthorships_to_collaborative_drafts.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180711074134) + +class AddCounterCacheCoauthorshipsToCollaborativeDrafts < ActiveRecord::Migration[5.2] + def change + add_column :decidim_proposals_collaborative_drafts, :coauthorships_count, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20240418105392_remove_index_counter_cache_coauthorships_to_proposals.decidim_proposals.rb b/db/migrate/20240418105392_remove_index_counter_cache_coauthorships_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..f6dae2e --- /dev/null +++ b/db/migrate/20240418105392_remove_index_counter_cache_coauthorships_to_proposals.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180711075004) + +class RemoveIndexCounterCacheCoauthorshipsToProposals < ActiveRecord::Migration[5.2] + def change + remove_index :decidim_proposals_proposals, name: "idx_decidim_proposals_proposals_on_proposal_coauthorships_count" + end +end diff --git a/db/migrate/20240418105393_create_participatory_texts.decidim_proposals.rb b/db/migrate/20240418105393_create_participatory_texts.decidim_proposals.rb new file mode 100644 index 0000000..168a1ad --- /dev/null +++ b/db/migrate/20240418105393_create_participatory_texts.decidim_proposals.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180927111721) + +class CreateParticipatoryTexts < ActiveRecord::Migration[5.2] + def change + create_table :decidim_proposals_participatory_texts do |t| + t.jsonb :title + t.jsonb :description + t.belongs_to :decidim_component, null: false, index: { name: "idx_participatory_texts_on_decidim_component_id" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105394_add_participatory_text_level_to_proposals.decidim_proposals.rb b/db/migrate/20240418105394_add_participatory_text_level_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..c3ac500 --- /dev/null +++ b/db/migrate/20240418105394_add_participatory_text_level_to_proposals.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180930125321) + +class AddParticipatoryTextLevelToProposals < ActiveRecord::Migration[5.2] + def change + add_column :decidim_proposals_proposals, :participatory_text_level, :string + end +end diff --git a/db/migrate/20240418105395_add_position_to_proposals.decidim_proposals.rb b/db/migrate/20240418105395_add_position_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..542f4f7 --- /dev/null +++ b/db/migrate/20240418105395_add_position_to_proposals.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20180930125321) + +class AddPositionToProposals < ActiveRecord::Migration[5.2] + def change + add_column :decidim_proposals_proposals, :position, :integer + end +end diff --git a/db/migrate/20240418105396_fix_user_groups_ids_in_proposals_endorsements.decidim_proposals.rb b/db/migrate/20240418105396_fix_user_groups_ids_in_proposals_endorsements.decidim_proposals.rb new file mode 100644 index 0000000..0a6fc76 --- /dev/null +++ b/db/migrate/20240418105396_fix_user_groups_ids_in_proposals_endorsements.decidim_proposals.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20181003074440) + +class FixUserGroupsIdsInProposalsEndorsements < ActiveRecord::Migration[5.2] + class ProposalEndorsement < ApplicationRecord + self.table_name = :decidim_proposals_proposal_endorsements + end + + class UserGroup < ApplicationRecord + self.table_name = :decidim_users + self.inheritance_column = nil # disable the default inheritance + + default_scope { where(type: "Decidim::UserGroup") } + end + + # rubocop:disable Rails/SkipsModelValidations + def change + UserGroup.find_each do |group| + old_id = group.extended_data["old_user_group_id"] + next unless old_id + + ProposalEndorsement + .where(decidim_user_group_id: old_id) + .update_all(decidim_user_group_id: group.id) + end + end + # rubocop:enable Rails/SkipsModelValidations +end diff --git a/db/migrate/20240418105397_add_temporary_votes.decidim_proposals.rb b/db/migrate/20240418105397_add_temporary_votes.decidim_proposals.rb new file mode 100644 index 0000000..09401c9 --- /dev/null +++ b/db/migrate/20240418105397_add_temporary_votes.decidim_proposals.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20181010114622) + +class AddTemporaryVotes < ActiveRecord::Migration[5.2] + def change + change_table :decidim_proposals_proposal_votes do |t| + t.boolean :temporary, null: false, default: false + end + end +end diff --git a/db/migrate/20240418105398_add_organization_as_author.decidim_proposals.rb b/db/migrate/20240418105398_add_organization_as_author.decidim_proposals.rb new file mode 100644 index 0000000..993eb40 --- /dev/null +++ b/db/migrate/20240418105398_add_organization_as_author.decidim_proposals.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20181016132225) + +class AddOrganizationAsAuthor < ActiveRecord::Migration[5.2] + def change + official_proposals = Decidim::Proposals::Proposal.find_each.select do |proposal| + proposal.coauthorships.count.zero? + end + + official_proposals.each do |proposal| + proposal.add_coauthor(proposal.organization) + end + end +end diff --git a/db/migrate/20240418105399_make_author_polymorhpic_for_proposal_endorsements.decidim_proposals.rb b/db/migrate/20240418105399_make_author_polymorhpic_for_proposal_endorsements.decidim_proposals.rb new file mode 100644 index 0000000..91ae6de --- /dev/null +++ b/db/migrate/20240418105399_make_author_polymorhpic_for_proposal_endorsements.decidim_proposals.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20181017084221) + +class MakeAuthorPolymorhpicForProposalEndorsements < ActiveRecord::Migration[5.2] + class ProposalEndorsement < ApplicationRecord + self.table_name = :decidim_proposals_proposal_endorsements + end + + def change + remove_index :decidim_proposals_proposal_endorsements, :decidim_author_id + + add_column :decidim_proposals_proposal_endorsements, :decidim_author_type, :string + + reversible do |direction| + direction.up do + execute <<~SQL.squish + UPDATE decidim_proposals_proposal_endorsements + SET decidim_author_type = 'Decidim::UserBaseEntity' + SQL + end + end + + add_index :decidim_proposals_proposal_endorsements, + [:decidim_author_id, :decidim_author_type], + name: "index_decidim_proposals_proposal_endorsements_on_decidim_author" + + change_column_null :decidim_proposals_proposal_endorsements, :decidim_author_id, false + change_column_null :decidim_proposals_proposal_endorsements, :decidim_author_type, false + + ProposalEndorsement.reset_column_information + end +end diff --git a/db/migrate/20240418105400_add_created_in_meeting.decidim_proposals.rb b/db/migrate/20240418105400_add_created_in_meeting.decidim_proposals.rb new file mode 100644 index 0000000..4dcd9a7 --- /dev/null +++ b/db/migrate/20240418105400_add_created_in_meeting.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20181026073215) + +class AddCreatedInMeeting < ActiveRecord::Migration[5.2] + def change + add_column :decidim_proposals_proposals, :created_in_meeting, :boolean, default: false + end +end diff --git a/db/migrate/20240418105401_use_md5_indexes.decidim_proposals.rb b/db/migrate/20240418105401_use_md5_indexes.decidim_proposals.rb new file mode 100644 index 0000000..e230881 --- /dev/null +++ b/db/migrate/20240418105401_use_md5_indexes.decidim_proposals.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20190215113158) + +class UseMd5Indexes < ActiveRecord::Migration[5.2] + def up + remove_index :decidim_proposals_proposals, name: "decidim_proposals_proposal_title_search" + remove_index :decidim_proposals_proposals, name: "decidim_proposals_proposal_body_search" + execute "CREATE INDEX decidim_proposals_proposal_title_search ON decidim_proposals_proposals(md5(title::text))" + execute "CREATE INDEX decidim_proposals_proposal_body_search ON decidim_proposals_proposals(md5(body::text))" + end + + def down + remove_index :decidim_proposals_proposals, name: "decidim_proposals_proposal_title_search" + remove_index :decidim_proposals_proposals, name: "decidim_proposals_proposal_body_search" + add_index :decidim_proposals_proposals, :title, name: "decidim_proposals_proposal_title_search" + add_index :decidim_proposals_proposals, :body, name: "decidim_proposals_proposal_body_search" + end +end diff --git a/db/migrate/20240418105402_add_endorsements_counter_cache_to_proposals.decidim_proposals.rb b/db/migrate/20240418105402_add_endorsements_counter_cache_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..e7264da --- /dev/null +++ b/db/migrate/20240418105402_add_endorsements_counter_cache_to_proposals.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20191206154128) + +class AddEndorsementsCounterCacheToProposals < ActiveRecord::Migration[5.2] + def change + add_column :decidim_proposals_proposals, :endorsements_count, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20240418105403_move_proposal_endorsements_to_core_endorsements.decidim_proposals.rb b/db/migrate/20240418105403_move_proposal_endorsements_to_core_endorsements.decidim_proposals.rb new file mode 100644 index 0000000..da67a40 --- /dev/null +++ b/db/migrate/20240418105403_move_proposal_endorsements_to_core_endorsements.decidim_proposals.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20200120215928) + +# This migration must be executed after CreateDecidimEndorsements migration in decidim-core. +class MoveProposalEndorsementsToCoreEndorsements < ActiveRecord::Migration[5.2] + class ProposalEndorsement < ApplicationRecord + self.table_name = :decidim_proposals_proposal_endorsements + end + + class Endorsement < ApplicationRecord + self.table_name = :decidim_endorsements + end + + # Move ProposalEndorsements to Endorsements + def up + non_duplicated_group_endorsements = ProposalEndorsement.select( + "MIN(id) as id, decidim_user_group_id" + ).group(:decidim_user_group_id).where.not(decidim_user_group_id: nil).map(&:id) + + ProposalEndorsement.where("id IN (?) OR decidim_user_group_id IS NULL", non_duplicated_group_endorsements).find_each do |prop_endorsement| + Endorsement.create!( + resource_type: Decidim::Proposals::Proposal.name, + resource_id: prop_endorsement.decidim_proposal_id, + decidim_author_type: prop_endorsement.decidim_author_type, + decidim_author_id: prop_endorsement.decidim_author_id, + decidim_user_group_id: prop_endorsement.decidim_user_group_id + ) + end + # update new `decidim_proposals_proposal.endorsements_count` counter cache + Decidim::Proposals::Proposal.select(:id).all.find_each do |proposal| + Decidim::Proposals::Proposal.reset_counters(proposal.id, :endorsements) + end + end + + def down + non_duplicated_group_endorsements = Endorsement.select( + "MIN(id) as id, decidim_user_group_id" + ).group(:decidim_user_group_id).where.not(decidim_user_group_id: nil).map(&:id) + + Endorsement + .where(resource_type: "Decidim::Proposals::Proposal") + .where("id IN (?) OR decidim_user_group_id IS NULL", non_duplicated_group_endorsements).find_each do |endorsement| + ProposalEndorsement.find_or_create_by!( + decidim_proposal_id: endorsement.resource_id, + decidim_author_type: endorsement.decidim_author_type, + decidim_author_id: endorsement.decidim_author_id, + decidim_user_group_id: endorsement.decidim_user_group_id + ) + end + # update `decidim_proposals_proposal.proposal_endorsements_count` counter cache + Decidim::Proposals::Proposal.select(:id).all.find_each do |proposal| + Decidim::Proposals::Proposal.reset_counters(proposal.id, :proposal_endorsements) + end + end +end diff --git a/db/migrate/20240418105404_drop_proposal_endorsements.decidim_proposals.rb b/db/migrate/20240418105404_drop_proposal_endorsements.decidim_proposals.rb new file mode 100644 index 0000000..4f6d63f --- /dev/null +++ b/db/migrate/20240418105404_drop_proposal_endorsements.decidim_proposals.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20200120230130) + +class DropProposalEndorsements < ActiveRecord::Migration[5.2] + def change + drop_table :decidim_proposals_proposal_endorsements, if_exists: true, force: :restrict + remove_column :decidim_proposals_proposals, :proposal_endorsements_count + end +end diff --git a/db/migrate/20240418105405_add_proposal_valuation_assignments.decidim_proposals.rb b/db/migrate/20240418105405_add_proposal_valuation_assignments.decidim_proposals.rb new file mode 100644 index 0000000..c872d15 --- /dev/null +++ b/db/migrate/20240418105405_add_proposal_valuation_assignments.decidim_proposals.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20200203111239) + +class AddProposalValuationAssignments < ActiveRecord::Migration[5.2] + def change + create_table :decidim_proposals_valuation_assignments do |t| + t.references :decidim_proposal, null: false, index: { name: "decidim_proposals_valuation_assignment_proposal" } + t.references :valuator_role, polymorphic: true, null: false, index: { name: "decidim_proposals_valuation_assignment_valuator_role" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105406_add_costs_to_proposals.decidim_proposals.rb b/db/migrate/20240418105406_add_costs_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..9f45a6c --- /dev/null +++ b/db/migrate/20240418105406_add_costs_to_proposals.decidim_proposals.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20200210135152) + +class AddCostsToProposals < ActiveRecord::Migration[5.2] + def change + add_column :decidim_proposals_proposals, :cost, :decimal + add_column :decidim_proposals_proposals, :cost_report, :jsonb + add_column :decidim_proposals_proposals, :execution_period, :jsonb + end +end diff --git a/db/migrate/20240418105407_sync_proposals_state_with_amendments_state.decidim_proposals.rb b/db/migrate/20240418105407_sync_proposals_state_with_amendments_state.decidim_proposals.rb new file mode 100644 index 0000000..7fc15a5 --- /dev/null +++ b/db/migrate/20240418105407_sync_proposals_state_with_amendments_state.decidim_proposals.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20200212120110) + +class SyncProposalsStateWithAmendmentsState < ActiveRecord::Migration[5.2] + def up + execute <<-SQL.squish + UPDATE decidim_proposals_proposals AS proposals + SET state = amendments.state + FROM decidim_amendments AS amendments + WHERE + proposals.state IS NULL AND + amendments.decidim_emendation_type = 'Decidim::Proposals::Proposal' AND + amendments.decidim_emendation_id = proposals.id AND + amendments.state IS NOT NULL + SQL + end + + def down + execute <<-SQL.squish + UPDATE decidim_proposals_proposals AS proposals + SET state = NULL + FROM decidim_amendments AS amendments + WHERE + amendments.decidim_emendation_type = 'Decidim::Proposals::Proposal' AND + amendments.decidim_emendation_id = proposals.id AND + amendments.state IS NOT NULL + SQL + end +end diff --git a/db/migrate/20240418105408_add_state_published_at_to_proposals.decidim_proposals.rb b/db/migrate/20240418105408_add_state_published_at_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..b7d265e --- /dev/null +++ b/db/migrate/20240418105408_add_state_published_at_to_proposals.decidim_proposals.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20200227175922) + +class AddStatePublishedAtToProposals < ActiveRecord::Migration[5.2] + def change + add_column :decidim_proposals_proposals, :state_published_at, :datetime + end +end diff --git a/db/migrate/20240418105409_publish_existing_proposals_state.decidim_proposals.rb b/db/migrate/20240418105409_publish_existing_proposals_state.decidim_proposals.rb new file mode 100644 index 0000000..6565456 --- /dev/null +++ b/db/migrate/20240418105409_publish_existing_proposals_state.decidim_proposals.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20200306123652) + +class PublishExistingProposalsState < ActiveRecord::Migration[5.2] + def up + execute <<-SQL.squish + UPDATE decidim_proposals_proposals SET state_published_at = COALESCE(answered_at, published_at) WHERE state IS NOT NULL + SQL + end + + def down + execute <<-SQL.squish + UPDATE decidim_proposals_proposals SET state_published_at = NULL + SQL + end +end diff --git a/db/migrate/20240418105410_move_proposals_fields_to_i18n.decidim_proposals.rb b/db/migrate/20240418105410_move_proposals_fields_to_i18n.decidim_proposals.rb new file mode 100644 index 0000000..1c1421d --- /dev/null +++ b/db/migrate/20240418105410_move_proposals_fields_to_i18n.decidim_proposals.rb @@ -0,0 +1,97 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20200708091228) + +class MoveProposalsFieldsToI18n < ActiveRecord::Migration[5.2] + class Proposal < ApplicationRecord + include Decidim::HasComponent + + self.table_name = :decidim_proposals_proposals + end + + class Coauthorship < ApplicationRecord + self.table_name = :decidim_coauthorships + end + + class UserBaseEntity < ApplicationRecord + self.table_name = :decidim_users + self.inheritance_column = nil # disable the default inheritance + end + + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + def up + add_column :decidim_proposals_proposals, :new_title, :jsonb + add_column :decidim_proposals_proposals, :new_body, :jsonb + + PaperTrail.request(enabled: false) do + Proposal.find_each do |proposal| + coauthorship = Coauthorship.order(:id).find_by(coauthorable_type: "Decidim::Proposals::Proposal", coauthorable_id: proposal.id) + author = + if coauthorship.decidim_author_type == "Decidim::Organization" + Organization.find_by(id: coauthorship.decidim_author_id) + else + UserBaseEntity.find_by(id: coauthorship.decidim_author_id) + end + + locale = if author + author.try(:locale).presence || author.try(:default_locale).presence || author.try(:organization).try(:default_locale).presence + elsif proposal.component && proposal.component.participatory_space + proposal.component.participatory_space.organization.default_locale + else + I18n.default_locale.to_s + end + + proposal.new_title = { + locale => proposal.title + } + proposal.new_body = { + locale => proposal.body + } + + proposal.save(validate: false) + end + end + + remove_indexs + + remove_column :decidim_proposals_proposals, :title + rename_column :decidim_proposals_proposals, :new_title, :title + remove_column :decidim_proposals_proposals, :body + rename_column :decidim_proposals_proposals, :new_body, :body + + create_indexs + end + + def down + add_column :decidim_proposals_proposals, :new_title, :string + add_column :decidim_proposals_proposals, :new_body, :string + + Proposal.find_each do |proposal| + proposal.new_title = proposal.title.values.first + proposal.new_body = proposal.body.values.first + + proposal.save! + end + + remove_indexs + + remove_column :decidim_proposals_proposals, :title + rename_column :decidim_proposals_proposals, :new_title, :title + remove_column :decidim_proposals_proposals, :body + rename_column :decidim_proposals_proposals, :new_body, :body + + create_indexs + end + + def remove_indexs + remove_index :decidim_proposals_proposals, name: "decidim_proposals_proposal_title_search" + remove_index :decidim_proposals_proposals, name: "decidim_proposals_proposal_body_search" + end + + def create_indexs + execute "CREATE INDEX decidim_proposals_proposal_title_search ON decidim_proposals_proposals(md5(title::text))" + execute "CREATE INDEX decidim_proposals_proposal_body_search ON decidim_proposals_proposals(md5(body::text))" + end +end diff --git a/db/migrate/20240418105411_move_proposal_endorsed_event_notifications_to_resource_endorsed_event.decidim_proposals.rb b/db/migrate/20240418105411_move_proposal_endorsed_event_notifications_to_resource_endorsed_event.decidim_proposals.rb new file mode 100644 index 0000000..de14505 --- /dev/null +++ b/db/migrate/20240418105411_move_proposal_endorsed_event_notifications_to_resource_endorsed_event.decidim_proposals.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20200730131631) + +class MoveProposalEndorsedEventNotificationsToResourceEndorsedEvent < ActiveRecord::Migration[5.2] + def up + Decidim::Notification.where(event_name: "decidim.events.proposals.proposal_endorsed", event_class: "Decidim::Proposals::ProposalEndorsedEvent").find_each do |notification| + notification.update(event_name: "decidim.events.resource_endorsed", event_class: "Decidim::ResourceEndorsedEvent") + end + end + + def down + Decidim::Notification.where( + event_name: "decidim.events.resource_endorsed", + event_class: "Decidim::ResourceEndorsedEvent", + decidim_resource_type: "Decidim::Proposals::Proposal" + ) + .find_each do |notification| + notification.update(event_name: "decidim.events.proposals.proposal_endorsed", event_class: "Decidim::Proposals::ProposalEndorsedEvent") + end + end +end diff --git a/db/migrate/20240418105412_add_commentable_counter_cache_to_proposals.decidim_proposals.rb b/db/migrate/20240418105412_add_commentable_counter_cache_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..ad83c95 --- /dev/null +++ b/db/migrate/20240418105412_add_commentable_counter_cache_to_proposals.decidim_proposals.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20200827154156) + +class AddCommentableCounterCacheToProposals < ActiveRecord::Migration[5.2] + def change + add_column :decidim_proposals_proposals, :comments_count, :integer, null: false, default: 0, index: true + add_column :decidim_proposals_collaborative_drafts, :comments_count, :integer, null: false, default: 0, index: true + Decidim::Proposals::Proposal.reset_column_information + Decidim::Proposals::Proposal.find_each(&:update_comments_count) + Decidim::Proposals::CollaborativeDraft.reset_column_information + Decidim::Proposals::CollaborativeDraft.find_each(&:update_comments_count) + end +end diff --git a/db/migrate/20240418105413_fix_proposals_data.decidim_proposals.rb b/db/migrate/20240418105413_fix_proposals_data.decidim_proposals.rb new file mode 100644 index 0000000..e71e9e4 --- /dev/null +++ b/db/migrate/20240418105413_fix_proposals_data.decidim_proposals.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20201002085508) + +class FixProposalsData < ActiveRecord::Migration[5.2] + class Proposal < ApplicationRecord + self.table_name = :decidim_proposals_proposals + end + + class Coauthorship < ApplicationRecord + self.table_name = :decidim_coauthorships + end + + class UserBaseEntity < ApplicationRecord + self.table_name = :decidim_users + self.inheritance_column = nil # disable the default inheritance + end + + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + def up + PaperTrail.request(enabled: false) do + Proposal.find_each do |proposal| + next if proposal.title.is_a?(Hash) && proposal.body.is_a?(Hash) + + coauthorship = Coauthorship.order(:id).find_by(coauthorable_type: "Decidim::Proposals::Proposal", coauthorable_id: proposal.id) + author = + if coauthorship.decidim_author_type == "Decidim::Organization" + Organization.find_by(id: coauthorship.decidim_author_id) + else + UserBaseEntity.find_by(id: coauthorship.decidim_author_id) + end + + locale = author.try(:locale).presence || author.try(:default_locale).presence || author.try(:organization).try(:default_locale).presence + + # rubocop:disable Rails/SkipsModelValidations + values = {} + values[:title] = { locale => proposal.title } unless proposal.title.is_a?(Hash) + values[:body] = { locale => proposal.body } unless proposal.body.is_a?(Hash) + + proposal.update_columns(values) + # rubocop:enable Rails/SkipsModelValidations + end + end + end + + def down; end +end diff --git a/db/migrate/20240418105414_fix_answered_proposals_after_copy.decidim_proposals.rb b/db/migrate/20240418105414_fix_answered_proposals_after_copy.decidim_proposals.rb new file mode 100644 index 0000000..93105d8 --- /dev/null +++ b/db/migrate/20240418105414_fix_answered_proposals_after_copy.decidim_proposals.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20210127115628) + +class FixAnsweredProposalsAfterCopy < ActiveRecord::Migration[5.2] + def change + proposals_after_copy = Decidim::ResourceLink.where(from_type: "Decidim::Proposals::Proposal").pluck(:from_id) + + result = Decidim::Proposals::Proposal.where.not(state_published_at: nil).where(state: nil, id: proposals_after_copy) + + result.find_each do |proposal| + proposal.state_published_at = nil + proposal.save! + end + end +end diff --git a/db/migrate/20240418105415_add_followable_counter_cache_to_proposals.decidim_proposals.rb b/db/migrate/20240418105415_add_followable_counter_cache_to_proposals.decidim_proposals.rb new file mode 100644 index 0000000..0eb81ad --- /dev/null +++ b/db/migrate/20240418105415_add_followable_counter_cache_to_proposals.decidim_proposals.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20210310102839) + +class AddFollowableCounterCacheToProposals < ActiveRecord::Migration[5.2] + def change + add_column :decidim_proposals_proposals, :follows_count, :integer, null: false, default: 0, index: true + + reversible do |dir| + dir.up do + Decidim::Proposals::Proposal.reset_column_information + Decidim::Proposals::Proposal.find_each do |record| + record.class.reset_counters(record.id, :follows) + end + end + end + end +end diff --git a/db/migrate/20240418105416_add_followable_counter_cache_to_collaborative_drafts.decidim_proposals.rb b/db/migrate/20240418105416_add_followable_counter_cache_to_collaborative_drafts.decidim_proposals.rb new file mode 100644 index 0000000..1d9209c --- /dev/null +++ b/db/migrate/20240418105416_add_followable_counter_cache_to_collaborative_drafts.decidim_proposals.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20210310120812) + +class AddFollowableCounterCacheToCollaborativeDrafts < ActiveRecord::Migration[5.2] + def change + add_column :decidim_proposals_collaborative_drafts, :follows_count, :integer, null: false, default: 0, index: true + + reversible do |dir| + dir.up do + Decidim::Proposals::CollaborativeDraft.reset_column_information + Decidim::Proposals::CollaborativeDraft.find_each do |record| + record.class.reset_counters(record.id, :follows) + end + end + end + end +end diff --git a/db/migrate/20240418105417_fix_counters_for_copied_proposals.decidim_proposals.rb b/db/migrate/20240418105417_fix_counters_for_copied_proposals.decidim_proposals.rb new file mode 100644 index 0000000..b84a2c9 --- /dev/null +++ b/db/migrate/20240418105417_fix_counters_for_copied_proposals.decidim_proposals.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20210318082934) + +class FixCountersForCopiedProposals < ActiveRecord::Migration[5.2] + def up + copies_ids = Decidim::ResourceLink + .where( + name: "copied_from_component", + from_type: "Decidim::Proposals::Proposal", + to_type: "Decidim::Proposals::Proposal" + ).pluck(:to_id) + + Decidim::Proposals::Proposal.where(id: copies_ids).find_each do |record| + record.class.reset_counters(record.id, :follows) + record.update_comments_count + end + end + + def down; end +end diff --git a/db/migrate/20240418105418_change_states_on_collaborative_drafts.decidim_proposals.rb b/db/migrate/20240418105418_change_states_on_collaborative_drafts.decidim_proposals.rb new file mode 100644 index 0000000..225158e --- /dev/null +++ b/db/migrate/20240418105418_change_states_on_collaborative_drafts.decidim_proposals.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20230427105700) + +class ChangeStatesOnCollaborativeDrafts < ActiveRecord::Migration[6.1] + class CollaborativeDraft < ApplicationRecord + self.table_name = :decidim_proposals_collaborative_drafts + STATES = { open: 0, published: 10, withdrawn: -1 }.freeze + end + + def up + rename_column :decidim_proposals_collaborative_drafts, :state, :old_state + add_column :decidim_proposals_collaborative_drafts, :state, :integer, default: 0, null: false + + CollaborativeDraft.reset_column_information + + CollaborativeDraft::STATES.each_pair do |status, index| + CollaborativeDraft.where(old_state: status).update_all(state: index) # rubocop:disable Rails/SkipsModelValidations + end + + remove_column :decidim_proposals_collaborative_drafts, :old_state + end + + def down + rename_column :decidim_proposals_collaborative_drafts, :state, :old_state + add_column :decidim_proposals_collaborative_drafts, :state, :string + + CollaborativeDraft.reset_column_information + + CollaborativeDraft::STATES.each_pair do |status, index| + CollaborativeDraft.where(old_state: index).update_all(state: status) # rubocop:disable Rails/SkipsModelValidations + end + + remove_column :decidim_proposals_collaborative_drafts, :old_state + end +end diff --git a/db/migrate/20240418105419_change_states_on_proposals.decidim_proposals.rb b/db/migrate/20240418105419_change_states_on_proposals.decidim_proposals.rb new file mode 100644 index 0000000..7ea1fed --- /dev/null +++ b/db/migrate/20240418105419_change_states_on_proposals.decidim_proposals.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true +# This migration comes from decidim_proposals (originally 20230427105700) + +class ChangeStatesOnProposals < ActiveRecord::Migration[6.1] + class Proposal < ApplicationRecord + self.table_name = :decidim_proposals_proposals + STATES = { not_answered: 0, evaluating: 10, accepted: 20, rejected: -10, withdrawn: -20 }.freeze + end + + def up + rename_column :decidim_proposals_proposals, :state, :old_state + add_column :decidim_proposals_proposals, :state, :integer, default: 0, null: false + + Proposal.reset_column_information + + Proposal::STATES.each_pair do |status, index| + Proposal.where(old_state: status).update_all(state: index) # rubocop:disable Rails/SkipsModelValidations + end + + remove_column :decidim_proposals_proposals, :old_state + end + + def down + rename_column :decidim_proposals_proposals, :state, :old_state + add_column :decidim_proposals_proposals, :state, :string + + Proposal.reset_column_information + + Proposal::STATES.each_pair do |status, index| + Proposal.where(old_state: index).update_all(state: status) # rubocop:disable Rails/SkipsModelValidations + end + + remove_column :decidim_proposals_proposals, :old_state + end +end diff --git a/db/migrate/20240418105420_create_meetings.decidim_meetings.rb b/db/migrate/20240418105420_create_meetings.decidim_meetings.rb new file mode 100644 index 0000000..bdc00f9 --- /dev/null +++ b/db/migrate/20240418105420_create_meetings.decidim_meetings.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20161130121354) + +class CreateMeetings < ActiveRecord::Migration[5.0] + def change + create_table :decidim_meetings_meetings do |t| + t.jsonb :title + t.jsonb :description + t.jsonb :short_description + t.datetime :start_time + t.datetime :end_time + t.text :address + t.jsonb :location + t.jsonb :location_hints + t.references :decidim_feature, index: true + t.references :decidim_author, index: true + t.references :decidim_scope, index: true + t.references :decidim_category, index: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105421_close_a_meeting.decidim_meetings.rb b/db/migrate/20240418105421_close_a_meeting.decidim_meetings.rb new file mode 100644 index 0000000..1bf1533 --- /dev/null +++ b/db/migrate/20240418105421_close_a_meeting.decidim_meetings.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20170110142105) + +class CloseAMeeting < ActiveRecord::Migration[5.0] + def change + add_column :decidim_meetings_meetings, :closing_report, :jsonb + add_column :decidim_meetings_meetings, :attendees_count, :integer + add_column :decidim_meetings_meetings, :contributions_count, :integer + add_column :decidim_meetings_meetings, :attending_organizations, :text + add_column :decidim_meetings_meetings, :closed_at, :time, index: true + end +end diff --git a/db/migrate/20240418105422_add_latitude_and_longitude_to_meetings.decidim_meetings.rb b/db/migrate/20240418105422_add_latitude_and_longitude_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..ee39831 --- /dev/null +++ b/db/migrate/20240418105422_add_latitude_and_longitude_to_meetings.decidim_meetings.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20170123151650) + +class AddLatitudeAndLongitudeToMeetings < ActiveRecord::Migration[5.0] + def change + add_column :decidim_meetings_meetings, :latitude, :float + add_column :decidim_meetings_meetings, :longitude, :float + end +end diff --git a/db/migrate/20240418105423_remove_short_description_from_meetings.decidim_meetings.rb b/db/migrate/20240418105423_remove_short_description_from_meetings.decidim_meetings.rb new file mode 100644 index 0000000..4e5c90f --- /dev/null +++ b/db/migrate/20240418105423_remove_short_description_from_meetings.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20170129153716) + +class RemoveShortDescriptionFromMeetings < ActiveRecord::Migration[5.0] + def change + remove_column :decidim_meetings_meetings, :short_description + end +end diff --git a/db/migrate/20240418105424_add_reference_to_meetings.decidim_meetings.rb b/db/migrate/20240418105424_add_reference_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..3b8c889 --- /dev/null +++ b/db/migrate/20240418105424_add_reference_to_meetings.decidim_meetings.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20170215132546) + +class AddReferenceToMeetings < ActiveRecord::Migration[5.0] + class Meeting < ApplicationRecord + self.table_name = :decidim_meetings_meetings + end + + def change + add_column :decidim_meetings_meetings, :reference, :string + Meeting.find_each(&:save) + change_column_null :decidim_meetings_meetings, :reference, false + end +end diff --git a/db/migrate/20240418105425_remove_not_null_reference_meetings.decidim_meetings.rb b/db/migrate/20240418105425_remove_not_null_reference_meetings.decidim_meetings.rb new file mode 100644 index 0000000..e8b5fbb --- /dev/null +++ b/db/migrate/20240418105425_remove_not_null_reference_meetings.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20170410074252) + +class RemoveNotNullReferenceMeetings < ActiveRecord::Migration[5.0] + def change + change_column_null :decidim_meetings_meetings, :reference, true + end +end diff --git a/db/migrate/20240418105426_migrate_meetings_category.decidim_meetings.rb b/db/migrate/20240418105426_migrate_meetings_category.decidim_meetings.rb new file mode 100644 index 0000000..0e8cc07 --- /dev/null +++ b/db/migrate/20240418105426_migrate_meetings_category.decidim_meetings.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20170612101925) + +class MigrateMeetingsCategory < ActiveRecord::Migration[5.1] + def change + # Create categorizations ensuring database integrity + execute(' + INSERT INTO decidim_categorizations(decidim_category_id, categorizable_id, categorizable_type, created_at, updated_at) + SELECT decidim_category_id, decidim_meetings_meetings.id, \'Decidim::Meetings::Meeting\', NOW(), NOW() + FROM decidim_meetings_meetings + INNER JOIN decidim_categories ON decidim_categories.id = decidim_meetings_meetings.decidim_category_id + ') + # Remove unused column + remove_column :decidim_meetings_meetings, :decidim_category_id + end +end diff --git a/db/migrate/20240418105427_add_registration_attributes_to_meetings.decidim_meetings.rb b/db/migrate/20240418105427_add_registration_attributes_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..443af5a --- /dev/null +++ b/db/migrate/20240418105427_add_registration_attributes_to_meetings.decidim_meetings.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20170810120836) + +class AddRegistrationAttributesToMeetings < ActiveRecord::Migration[5.1] + def change + add_column :decidim_meetings_meetings, :registrations_enabled, :boolean, null: false, default: false + add_column :decidim_meetings_meetings, :available_slots, :integer, null: false, default: 0 + add_column :decidim_meetings_meetings, :registration_terms, :jsonb + end +end diff --git a/db/migrate/20240418105428_create_registrations.decidim_meetings.rb b/db/migrate/20240418105428_create_registrations.decidim_meetings.rb new file mode 100644 index 0000000..e024acb --- /dev/null +++ b/db/migrate/20240418105428_create_registrations.decidim_meetings.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20170810131100) + +class CreateRegistrations < ActiveRecord::Migration[5.1] + def change + create_table :decidim_meetings_registrations do |t| + t.references :decidim_user, null: false, index: true + t.references :decidim_meeting, null: false, index: true + + t.timestamps + end + + add_index :decidim_meetings_registrations, [:decidim_user_id, :decidim_meeting_id], unique: true, name: "decidim_meetings_registrations_user_meeting_unique" + end +end diff --git a/db/migrate/20240418105429_rename_features_to_components_at_meetings.decidim_meetings.rb b/db/migrate/20240418105429_rename_features_to_components_at_meetings.decidim_meetings.rb new file mode 100644 index 0000000..1b48f5f --- /dev/null +++ b/db/migrate/20240418105429_rename_features_to_components_at_meetings.decidim_meetings.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180305133634) + +class RenameFeaturesToComponentsAtMeetings < ActiveRecord::Migration[5.1] + def change + rename_column :decidim_meetings_meetings, :decidim_feature_id, :decidim_component_id + + if index_name_exists?(:decidim_meetings_meetings, "index_decidim_meetings_meetings_on_decidim_feature_id") + rename_index :decidim_meetings_meetings, "index_decidim_meetings_meetings_on_decidim_feature_id", "index_decidim_meetings_meetings_on_decidim_component_id" + end + end +end diff --git a/db/migrate/20240418105430_add_fields_for_registrations.decidim_meetings.rb b/db/migrate/20240418105430_add_fields_for_registrations.decidim_meetings.rb new file mode 100644 index 0000000..4954855 --- /dev/null +++ b/db/migrate/20240418105430_add_fields_for_registrations.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180326082611) + +class AddFieldsForRegistrations < ActiveRecord::Migration[5.1] + def change + add_column :decidim_meetings_meetings, :reserved_slots, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20240418105431_add_meeting_types.decidim_meetings.rb b/db/migrate/20240418105431_add_meeting_types.decidim_meetings.rb new file mode 100644 index 0000000..a1432da --- /dev/null +++ b/db/migrate/20240418105431_add_meeting_types.decidim_meetings.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180403145218) + +class AddMeetingTypes < ActiveRecord::Migration[5.1] + def change + add_column :decidim_meetings_meetings, :private_meeting, :boolean, default: false + add_column :decidim_meetings_meetings, :transparent, :boolean, default: true + end +end diff --git a/db/migrate/20240418105432_add_organizer_to_meetings.decidim_meetings.rb b/db/migrate/20240418105432_add_organizer_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..79bf602 --- /dev/null +++ b/db/migrate/20240418105432_add_organizer_to_meetings.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180404075312) + +class AddOrganizerToMeetings < ActiveRecord::Migration[5.1] + def change + add_reference :decidim_meetings_meetings, :organizer, index: true + end +end diff --git a/db/migrate/20240418105433_create_meetings_minutes.decidim_meetings.rb b/db/migrate/20240418105433_create_meetings_minutes.decidim_meetings.rb new file mode 100644 index 0000000..32331d1 --- /dev/null +++ b/db/migrate/20240418105433_create_meetings_minutes.decidim_meetings.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180406080619) + +class CreateMeetingsMinutes < ActiveRecord::Migration[5.1] + def change + create_table :decidim_meetings_minutes do |t| + t.references :decidim_meeting, index: true + t.jsonb :description + t.string :video_url + t.string :audio_url + t.boolean :visible + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105434_add_services_to_meetings.decidim_meetings.rb b/db/migrate/20240418105434_add_services_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..ccb27e4 --- /dev/null +++ b/db/migrate/20240418105434_add_services_to_meetings.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180407110934) + +class AddServicesToMeetings < ActiveRecord::Migration[5.1] + def change + add_column :decidim_meetings_meetings, :services, :jsonb, default: [] + end +end diff --git a/db/migrate/20240418105435_create_decidim_agendas.decidim_meetings.rb b/db/migrate/20240418105435_create_decidim_agendas.decidim_meetings.rb new file mode 100644 index 0000000..24572f5 --- /dev/null +++ b/db/migrate/20240418105435_create_decidim_agendas.decidim_meetings.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180419131924) + +class CreateDecidimAgendas < ActiveRecord::Migration[5.1] + def change + create_table :decidim_meetings_agendas do |t| + t.jsonb :title + t.references :decidim_meeting, null: false, index: true + t.boolean :visible + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105436_create_decidim_agenda_items.decidim_meetings.rb b/db/migrate/20240418105436_create_decidim_agenda_items.decidim_meetings.rb new file mode 100644 index 0000000..baa6823 --- /dev/null +++ b/db/migrate/20240418105436_create_decidim_agenda_items.decidim_meetings.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180419132104) + +class CreateDecidimAgendaItems < ActiveRecord::Migration[5.1] + def change + create_table :decidim_meetings_agenda_items do |t| + t.references :decidim_agenda, index: true + t.integer :position + t.references :parent, index: true + t.integer :duration + t.jsonb :title + t.jsonb :description + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105437_create_decidim_meetings_invites.decidim_meetings.rb b/db/migrate/20240418105437_create_decidim_meetings_invites.decidim_meetings.rb new file mode 100644 index 0000000..f7ba2d5 --- /dev/null +++ b/db/migrate/20240418105437_create_decidim_meetings_invites.decidim_meetings.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180607142020) + +class CreateDecidimMeetingsInvites < ActiveRecord::Migration[5.2] + def change + create_table :decidim_meetings_invites do |t| + t.references :decidim_user, null: false, index: true + t.references :decidim_meeting, null: false, index: true + t.datetime :sent_at + t.datetime :accepted_at + t.datetime :rejected_at + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105438_add_code_to_decidim_meetings_registrations.decidim_meetings.rb b/db/migrate/20240418105438_add_code_to_decidim_meetings_registrations.decidim_meetings.rb new file mode 100644 index 0000000..44e18aa --- /dev/null +++ b/db/migrate/20240418105438_add_code_to_decidim_meetings_registrations.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180615160839) + +class AddCodeToDecidimMeetingsRegistrations < ActiveRecord::Migration[5.2] + def change + add_column :decidim_meetings_registrations, :code, :string, index: true + end +end diff --git a/db/migrate/20240418105439_add_validated_at_to_decidim_meetings_registrations.decidim_meetings.rb b/db/migrate/20240418105439_add_validated_at_to_decidim_meetings_registrations.decidim_meetings.rb new file mode 100644 index 0000000..6838eb9 --- /dev/null +++ b/db/migrate/20240418105439_add_validated_at_to_decidim_meetings_registrations.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180711111023) + +class AddValidatedAtToDecidimMeetingsRegistrations < ActiveRecord::Migration[5.2] + def change + add_column :decidim_meetings_registrations, :validated_at, :datetime + end +end diff --git a/db/migrate/20240418105440_add_registration_form_enabled_to_decidim_meetings.decidim_meetings.rb b/db/migrate/20240418105440_add_registration_form_enabled_to_decidim_meetings.decidim_meetings.rb new file mode 100644 index 0000000..f2f6bb5 --- /dev/null +++ b/db/migrate/20240418105440_add_registration_form_enabled_to_decidim_meetings.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180801150031) + +class AddRegistrationFormEnabledToDecidimMeetings < ActiveRecord::Migration[5.2] + def change + add_column :decidim_meetings_meetings, :registration_form_enabled, :boolean, default: false + end +end diff --git a/db/migrate/20240418105441_add_upcoming_events_as_content_block.decidim_meetings.rb b/db/migrate/20240418105441_add_upcoming_events_as_content_block.decidim_meetings.rb new file mode 100644 index 0000000..292375c --- /dev/null +++ b/db/migrate/20240418105441_add_upcoming_events_as_content_block.decidim_meetings.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20180809134748) + +class AddUpcomingEventsAsContentBlock < ActiveRecord::Migration[5.2] + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + class ContentBlock < ApplicationRecord + self.table_name = :decidim_content_blocks + end + + def change + Organization.find_each do |organization| + next if ContentBlock.where(decidim_organization_id: organization.id).exists?(manifest_name: "upcoming_events") + + last_weight = ContentBlock.where(decidim_organization_id: organization.id).order("weight DESC").limit(1).pluck(:weight).last.to_i + + ContentBlock.create!( + decidim_organization_id: organization.id, + weight: last_weight, + scope: :homepage, + manifest_name: :upcoming_events, + published_at: Time.current + ) + end + end +end diff --git a/db/migrate/20240418105442_add_questionnaire_to_existing_meetings.decidim_meetings.rb b/db/migrate/20240418105442_add_questionnaire_to_existing_meetings.decidim_meetings.rb new file mode 100644 index 0000000..83a12de --- /dev/null +++ b/db/migrate/20240418105442_add_questionnaire_to_existing_meetings.decidim_meetings.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20181107175558) + +class AddQuestionnaireToExistingMeetings < ActiveRecord::Migration[5.2] + def change + Decidim::Meetings::Meeting.transaction do + Decidim::Meetings::Meeting.find_each do |meeting| + if meeting.component.present? && meeting.questionnaire.blank? + meeting.update!( + questionnaire: Decidim::Forms::Questionnaire.new + ) + end + end + end + end +end diff --git a/db/migrate/20240418105443_add_user_group_to_meetings_registrations.decidim_meetings.rb b/db/migrate/20240418105443_add_user_group_to_meetings_registrations.decidim_meetings.rb new file mode 100644 index 0000000..61a364d --- /dev/null +++ b/db/migrate/20240418105443_add_user_group_to_meetings_registrations.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20190404132923) + +class AddUserGroupToMeetingsRegistrations < ActiveRecord::Migration[5.2] + def change + add_column :decidim_meetings_registrations, :decidim_user_group_id, :bigint + end +end diff --git a/db/migrate/20240418105444_index_foreign_keys_in_decidim_meetings_registrations.decidim_meetings.rb b/db/migrate/20240418105444_index_foreign_keys_in_decidim_meetings_registrations.decidim_meetings.rb new file mode 100644 index 0000000..3f13055 --- /dev/null +++ b/db/migrate/20240418105444_index_foreign_keys_in_decidim_meetings_registrations.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20200320105922) + +class IndexForeignKeysInDecidimMeetingsRegistrations < ActiveRecord::Migration[5.2] + def change + add_index :decidim_meetings_registrations, :decidim_user_group_id + end +end diff --git a/db/migrate/20240418105445_add_author_to_meetings.decidim_meetings.rb b/db/migrate/20240418105445_add_author_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..12a7a9c --- /dev/null +++ b/db/migrate/20240418105445_add_author_to_meetings.decidim_meetings.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20200526110940) + +class AddAuthorToMeetings < ActiveRecord::Migration[5.2] + class Meeting < ApplicationRecord + self.table_name = :decidim_meetings_meetings + include Decidim::HasComponent + end + + def change + add_column :decidim_meetings_meetings, :decidim_author_type, :string + add_column :decidim_meetings_meetings, :decidim_user_group_id, :integer + + Meeting.reset_column_information + Meeting.find_each do |meeting| + if meeting.organizer_id.present? + meeting.decidim_author_id = meeting.organizer_id + meeting.decidim_author_type = "Decidim::UserBaseEntity" + else + meeting.decidim_author_id = meeting.organization.id + meeting.decidim_author_type = "Decidim::Organization" + end + meeting.save! + end + + remove_column :decidim_meetings_meetings, :organizer_id + add_index :decidim_meetings_meetings, + [:decidim_author_id, :decidim_author_type], + name: "index_decidim_meetings_meetings_on_author" + end +end diff --git a/db/migrate/20240418105446_create_meeting_services_table.decidim_meetings.rb b/db/migrate/20240418105446_create_meeting_services_table.decidim_meetings.rb new file mode 100644 index 0000000..febc330 --- /dev/null +++ b/db/migrate/20240418105446_create_meeting_services_table.decidim_meetings.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20200702123209) + +class CreateMeetingServicesTable < ActiveRecord::Migration[5.2] + def change + create_table :decidim_meetings_services do |t| + t.jsonb :title + t.jsonb :description + t.bigint :decidim_meeting_id, null: false, index: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105447_move_meeting_services_to_own_model.decidim_meetings.rb b/db/migrate/20240418105447_move_meeting_services_to_own_model.decidim_meetings.rb new file mode 100644 index 0000000..4d7aa34 --- /dev/null +++ b/db/migrate/20240418105447_move_meeting_services_to_own_model.decidim_meetings.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20200702123210) + +class MoveMeetingServicesToOwnModel < ActiveRecord::Migration[5.2] + class Meeting < ApplicationRecord + self.table_name = :decidim_meetings_meetings + end + + class Service < ApplicationRecord + self.table_name = :decidim_meetings_services + end + + def change + Meeting.reset_column_information + Service.reset_column_information + + Meeting.find_each do |meeting| + meeting["services"].each do |service| + Service.create!( + decidim_meeting_id: meeting.id, + title: service["title"], + description: service["description"] + ) + end + end + + remove_column :decidim_meetings_meetings, :services + + Meeting.reset_column_information + Service.reset_column_information + end +end diff --git a/db/migrate/20240418105448_add_commentable_counter_cache_to_meetings.decidim_meetings.rb b/db/migrate/20240418105448_add_commentable_counter_cache_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..6405457 --- /dev/null +++ b/db/migrate/20240418105448_add_commentable_counter_cache_to_meetings.decidim_meetings.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20200827153856) + +class AddCommentableCounterCacheToMeetings < ActiveRecord::Migration[5.2] + def change + add_column :decidim_meetings_meetings, :comments_count, :integer, null: false, default: 0 + Decidim::Meetings::Meeting.reset_column_information + Decidim::Meetings::Meeting.find_each(&:update_comments_count) + end +end diff --git a/db/migrate/20240418105449_add_online_meeting_url.decidim_meetings.rb b/db/migrate/20240418105449_add_online_meeting_url.decidim_meetings.rb new file mode 100644 index 0000000..0536c12 --- /dev/null +++ b/db/migrate/20240418105449_add_online_meeting_url.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20201006140511) + +class AddOnlineMeetingUrl < ActiveRecord::Migration[5.2] + def change + add_column :decidim_meetings_meetings, :online_meeting_url, :string + end +end diff --git a/db/migrate/20240418105450_add_type_of_meeting.decidim_meetings.rb b/db/migrate/20240418105450_add_type_of_meeting.decidim_meetings.rb new file mode 100644 index 0000000..a429f88 --- /dev/null +++ b/db/migrate/20240418105450_add_type_of_meeting.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20201009124057) + +class AddTypeOfMeeting < ActiveRecord::Migration[5.2] + def change + add_column :decidim_meetings_meetings, :type_of_meeting, :string, default: "in_person" + end +end diff --git a/db/migrate/20240418105451_fix_meetings_registration_terms.decidim_meetings.rb b/db/migrate/20240418105451_fix_meetings_registration_terms.decidim_meetings.rb new file mode 100644 index 0000000..32370ce --- /dev/null +++ b/db/migrate/20240418105451_fix_meetings_registration_terms.decidim_meetings.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20201016065302) + +class FixMeetingsRegistrationTerms < ActiveRecord::Migration[5.2] + def up + reset_column_information + + PaperTrail.request(enabled: false) do + Decidim::Meetings::Meeting.find_each do |meeting| + next if meeting.component.nil? + # Only user-created meetings have this problem + next if meeting.official? + + # Since user-created meetings have no way to override the `registration_terms` field + # and it is supposed to use the component defaults, + # we can safely override this. + meeting.registration_terms = meeting.component.settings.default_registration_terms + meeting.save! + end + end + reset_column_information + end + + def down; end + + def reset_column_information + Decidim::Meetings::Meeting.reset_column_information + Decidim::Component.reset_column_information + end +end diff --git a/db/migrate/20240418105452_add_registration_type_and_url_to_meetings.decidim_meetings.rb b/db/migrate/20240418105452_add_registration_type_and_url_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..e564d4a --- /dev/null +++ b/db/migrate/20240418105452_add_registration_type_and_url_to_meetings.decidim_meetings.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20201016112641) + +class AddRegistrationTypeAndUrlToMeetings < ActiveRecord::Migration[5.2] + class Meetings < ApplicationRecord + self.table_name = :decidim_meetings_meetings + include Decidim::HasComponent + end + + def change + add_column :decidim_meetings_meetings, :registration_type, :string, null: false, default: "registration_disabled" + add_column :decidim_meetings_meetings, :registration_url, :string + + Meetings.reset_column_information + Meetings.find_each do |meeting| + meeting.registration_type = "on_this_platform" if meeting.decidim_author_type == "Decidim::Organization" + meeting.save! + end + end +end diff --git a/db/migrate/20240418105453_add_salt_to_decidim_meetings.decidim_meetings.rb b/db/migrate/20240418105453_add_salt_to_decidim_meetings.decidim_meetings.rb new file mode 100644 index 0000000..d715040 --- /dev/null +++ b/db/migrate/20240418105453_add_salt_to_decidim_meetings.decidim_meetings.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20201111133246) + +class AddSaltToDecidimMeetings < ActiveRecord::Migration[5.2] + def change + add_column :decidim_meetings_meetings, :salt, :string + # we leave old entries empty to maintain the old pad reference + end +end diff --git a/db/migrate/20240418105454_add_registration_custom_content_to_meetings.decidim_meetings.rb b/db/migrate/20240418105454_add_registration_custom_content_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..97f08e8 --- /dev/null +++ b/db/migrate/20240418105454_add_registration_custom_content_to_meetings.decidim_meetings.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210217124802) + +class AddRegistrationCustomContentToMeetings < ActiveRecord::Migration[5.2] + def change + add_column :decidim_meetings_meetings, :customize_registration_email, :boolean, default: false, null: false + add_column :decidim_meetings_meetings, :registration_email_custom_content, :jsonb + end +end diff --git a/db/migrate/20240418105455_add_followable_counter_cache_to_meetings.decidim_meetings.rb b/db/migrate/20240418105455_add_followable_counter_cache_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..fa6d924 --- /dev/null +++ b/db/migrate/20240418105455_add_followable_counter_cache_to_meetings.decidim_meetings.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210310120731) + +class AddFollowableCounterCacheToMeetings < ActiveRecord::Migration[5.2] + def change + add_column :decidim_meetings_meetings, :follows_count, :integer, null: false, default: 0, index: true + + reversible do |dir| + dir.up do + Decidim::Meetings::Meeting.reset_column_information + Decidim::Meetings::Meeting.find_each do |record| + record.class.reset_counters(record.id, :follows) + end + end + end + end +end diff --git a/db/migrate/20240418105456_add_published_at_to_meetings.decidim_meetings.rb b/db/migrate/20240418105456_add_published_at_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..7d5160c --- /dev/null +++ b/db/migrate/20240418105456_add_published_at_to_meetings.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210413050756) + +class AddPublishedAtToMeetings < ActiveRecord::Migration[5.2] + def change + add_column :decidim_meetings_meetings, :published_at, :datetime, index: true + end +end diff --git a/db/migrate/20240418105457_update_published_at_to_existing_meetings.decidim_meetings.rb b/db/migrate/20240418105457_update_published_at_to_existing_meetings.decidim_meetings.rb new file mode 100644 index 0000000..09b21fe --- /dev/null +++ b/db/migrate/20240418105457_update_published_at_to_existing_meetings.decidim_meetings.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210413050917) + +# By default all existing meetings were published when created +# This migration prevents un-publishing all existing meetings +class UpdatePublishedAtToExistingMeetings < ActiveRecord::Migration[5.2] + class Meeting < ApplicationRecord + self.table_name = :decidim_meetings_meetings + end + + def change + Meeting.reset_column_information + + Meeting.find_each do |meeting| + if meeting.published_at.nil? + meeting.published_at = meeting.created_at + meeting.save! + end + end + end +end diff --git a/db/migrate/20240418105458_add_public_participation_to_decidim_meetings_registrations.decidim_meetings.rb b/db/migrate/20240418105458_add_public_participation_to_decidim_meetings_registrations.decidim_meetings.rb new file mode 100644 index 0000000..1f9b968 --- /dev/null +++ b/db/migrate/20240418105458_add_public_participation_to_decidim_meetings_registrations.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210430123416) + +class AddPublicParticipationToDecidimMeetingsRegistrations < ActiveRecord::Migration[6.0] + def change + add_column :decidim_meetings_registrations, :public_participation, :boolean, default: false + end +end diff --git a/db/migrate/20240418105459_merge_meetings_minutes_into_meetings_table.decidim_meetings.rb b/db/migrate/20240418105459_merge_meetings_minutes_into_meetings_table.decidim_meetings.rb new file mode 100644 index 0000000..381f787 --- /dev/null +++ b/db/migrate/20240418105459_merge_meetings_minutes_into_meetings_table.decidim_meetings.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210506180226) + +class MergeMeetingsMinutesIntoMeetingsTable < ActiveRecord::Migration[6.0] + class Minutes < ApplicationRecord + self.table_name = "decidim_meetings_minutes" + + belongs_to :meeting, foreign_key: "decidim_meeting_id", class_name: "Meeting" + end + + class Meeting < ApplicationRecord + self.table_name = "decidim_meetings_meetings" + end + + def up + add_column :decidim_meetings_meetings, :minutes_description, :jsonb + add_column :decidim_meetings_meetings, :video_url, :string + add_column :decidim_meetings_meetings, :audio_url, :string + add_column :decidim_meetings_meetings, :minutes_visible, :boolean + + Minutes.find_each do |minutes| + minutes.meeting.update!( + minutes_description: minutes.description, + video_url: minutes.video_url, + audio_url: minutes.audio_url, + minutes_visible: minutes.visible + ) + end + end + + def down + Meeting.find_each do |meeting| + next if meeting.video_url.blank? && meeting.audio_url.blank? + + Minutes.find_or_create_by!( + decidim_meeting_id: meeting.id, + description: meeting.minutes_description, + video_url: meeting.video_url, + audio_url: meeting.audio_url, + visible: meeting.minutes_visible + ) + end + + remove_column :decidim_meetings_meetings, :minutes_description + remove_column :decidim_meetings_meetings, :video_url + remove_column :decidim_meetings_meetings, :audio_url + remove_column :decidim_meetings_meetings, :minutes_visible + end +end diff --git a/db/migrate/20240418105460_create_decidim_meetings_polls.decidim_meetings.rb b/db/migrate/20240418105460_create_decidim_meetings_polls.decidim_meetings.rb new file mode 100644 index 0000000..2f9d62e --- /dev/null +++ b/db/migrate/20240418105460_create_decidim_meetings_polls.decidim_meetings.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210512055802) + +class CreateDecidimMeetingsPolls < ActiveRecord::Migration[6.0] + def change + create_table :decidim_meetings_polls do |t| + t.references :decidim_meeting, index: true + t.timestamps + end + end +end diff --git a/db/migrate/20240418105461_drop_decidim_meetings_minutes_table.decidim_meetings.rb b/db/migrate/20240418105461_drop_decidim_meetings_minutes_table.decidim_meetings.rb new file mode 100644 index 0000000..4948993 --- /dev/null +++ b/db/migrate/20240418105461_drop_decidim_meetings_minutes_table.decidim_meetings.rb @@ -0,0 +1,79 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210512100333) + +class DropDecidimMeetingsMinutesTable < ActiveRecord::Migration[6.0] + class Minutes < ApplicationRecord + self.table_name = "decidim_meetings_minutes" + end + + class ActionLog < ApplicationRecord + self.table_name = "decidim_action_logs" + end + + class Version < ApplicationRecord + self.table_name = :versions + end + + class Meeting < ApplicationRecord + self.table_name = "decidim_meetings_meetings" + end + + def up + ActionLog.where(resource_type: "Decidim::Meetings::Minutes").each do |action_log| + minutes = Minutes.find_by(id: action_log.resource_id) + version = Version.find_by(id: action_log.version_id) + next unless minutes && version + + version_updates = { + item_type: "Decidim::Meetings::Meeting", + item_id: minutes.decidim_meeting_id + } + if version.object_changes.present? + version_updates[:object_changes] = version.object_changes + .gsub("\ndescription:\n-\n-", "\nminutes_description:\n-\n-") + .gsub("\ndescription:\n-\n-", "\nminutes_description:\n-\n-") + end + + version.update!(version_updates) + action_log.update!( + resource_type: "Decidim::Meetings::Meeting", + resource_id: minutes.decidim_meeting_id, + action: "close" + ) + end + + drop_table :decidim_meetings_minutes + end + + def down + create_table :decidim_meetings_minutes do |t| + t.references :decidim_meeting, index: true + t.jsonb :description + t.string :video_url + t.string :audio_url + t.boolean :visible + + t.timestamps + end + + Meeting.find_each do |meeting| + next if blank_minutes?(meeting) + + Minutes.create!( + decidim_meeting_id: meeting.id, + description: meeting.minutes_description, + video_url: meeting.video_url, + audio_url: meeting.audio_url, + visible: meeting.minutes_visible + ) + end + end +end + +private + +def blank_minutes?(meeting) + (meeting.video_url.blank? && + meeting.audio_url.blank? && + meeting.minutes_description.blank?) || (meeting.minutes_description.is_a?(Hash) && meeting.minutes_description.values.all?(&:blank?)) +end diff --git a/db/migrate/20240418105462_merge_minutes_with_closing_report_in_meetings_table.decidim_meetings.rb b/db/migrate/20240418105462_merge_minutes_with_closing_report_in_meetings_table.decidim_meetings.rb new file mode 100644 index 0000000..11b2a45 --- /dev/null +++ b/db/migrate/20240418105462_merge_minutes_with_closing_report_in_meetings_table.decidim_meetings.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210518133236) + +class MergeMinutesWithClosingReportInMeetingsTable < ActiveRecord::Migration[6.0] + class Meeting < ApplicationRecord + self.table_name = "decidim_meetings_meetings" + end + + def up + Meeting.find_each do |meeting| + check_close_data_presence(meeting) + check_closing_visibility(meeting) + merge_closing_report(meeting) + + meeting.save! + end + + rename_column :decidim_meetings_meetings, :minutes_visible, :closing_visible + remove_column :decidim_meetings_meetings, :minutes_description + end + + def down + add_column :decidim_meetings_meetings, :minutes_description, :jsonb + rename_column :decidim_meetings_meetings, :closing_visible, :minutes_visible + end +end + +private + +# Ensures close meeting if minutes_data exists +def check_close_data_presence(meeting) + return if meeting.closed_at.present? || !minutes_data?(meeting) + + meeting.closed_at = Time.current +end + +# If meeting is closed and minutes data is blank the closing +# should remain visible unless it has already been defined +def check_closing_visibility(meeting) + return unless meeting.minutes_visible.nil? + return if minutes_data?(meeting) || meeting.closed_at.blank? + + meeting.minutes_visible = true +end + +# Ignore minutes_description if already exists a closing report or +# minutes_description is blank +def merge_closing_report(meeting) + return if meeting.closing_report.is_a?(Hash) && meeting.closing_report.values.any?(&:present?) + return unless meeting.minutes_description.is_a?(Hash) && meeting.minutes_description.values.any?(&:present?) + + meeting.closing_report = meeting.minutes_description +end + +def minutes_data?(meeting) + [meeting.video_url, meeting.audio_url].any?(&:present?) || + (meeting.minutes_description.is_a?(Hash) && meeting.minutes_description.values.any?(&:present?)) +end diff --git a/db/migrate/20240418105463_add_comments_availability_columns_to_meetings_table.decidim_meetings.rb b/db/migrate/20240418105463_add_comments_availability_columns_to_meetings_table.decidim_meetings.rb new file mode 100644 index 0000000..a23992e --- /dev/null +++ b/db/migrate/20240418105463_add_comments_availability_columns_to_meetings_table.decidim_meetings.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210519133705) + +class AddCommentsAvailabilityColumnsToMeetingsTable < ActiveRecord::Migration[6.0] + def change + add_column :decidim_meetings_meetings, :comments_enabled, :boolean, default: true + add_column :decidim_meetings_meetings, :comments_start_time, :datetime + add_column :decidim_meetings_meetings, :comments_end_time, :datetime + reversible do |dir| + dir.up do + execute "UPDATE decidim_meetings_meetings set comments_enabled = true" + end + end + end +end diff --git a/db/migrate/20240418105464_create_decidim_meetings_questionnaires.decidim_meetings.rb b/db/migrate/20240418105464_create_decidim_meetings_questionnaires.decidim_meetings.rb new file mode 100644 index 0000000..6243026 --- /dev/null +++ b/db/migrate/20240418105464_create_decidim_meetings_questionnaires.decidim_meetings.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210520084247) + +class CreateDecidimMeetingsQuestionnaires < ActiveRecord::Migration[6.0] + def change + create_table :decidim_meetings_questionnaires do |t| + t.references :questionnaire_for, polymorphic: true, index: { name: "index_decidim_meetings_questionnaires_questionnaire_for" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105465_create_decidim_meetings_questions.decidim_meetings.rb b/db/migrate/20240418105465_create_decidim_meetings_questions.decidim_meetings.rb new file mode 100644 index 0000000..3ec80c4 --- /dev/null +++ b/db/migrate/20240418105465_create_decidim_meetings_questions.decidim_meetings.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210520084253) + +class CreateDecidimMeetingsQuestions < ActiveRecord::Migration[6.0] + def change + create_table :decidim_meetings_questions do |t| + t.references :decidim_questionnaire, index: true + t.integer :position, index: true + t.string :question_type + t.jsonb :body + t.integer :max_choices + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105466_create_decidim_meetings_answers.decidim_meetings.rb b/db/migrate/20240418105466_create_decidim_meetings_answers.decidim_meetings.rb new file mode 100644 index 0000000..6f539f2 --- /dev/null +++ b/db/migrate/20240418105466_create_decidim_meetings_answers.decidim_meetings.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210520084321) + +class CreateDecidimMeetingsAnswers < ActiveRecord::Migration[6.0] + def change + create_table :decidim_meetings_answers do |t| + t.references :decidim_user, index: true + t.references :decidim_questionnaire, index: true + t.references :decidim_question, index: { name: "index_decidim_meetings_answers_question_id" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105467_create_decidim_meetings_answer_options.decidim_meetings.rb b/db/migrate/20240418105467_create_decidim_meetings_answer_options.decidim_meetings.rb new file mode 100644 index 0000000..df20c26 --- /dev/null +++ b/db/migrate/20240418105467_create_decidim_meetings_answer_options.decidim_meetings.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210520084330) + +class CreateDecidimMeetingsAnswerOptions < ActiveRecord::Migration[6.0] + def change + create_table :decidim_meetings_answer_options do |t| + t.references :decidim_question, index: { name: "index_decidim_meetings_answer_options_question_id" } + t.jsonb :body + end + end +end diff --git a/db/migrate/20240418105468_create_decidim_meetings_answer_choices.decidim_meetings.rb b/db/migrate/20240418105468_create_decidim_meetings_answer_choices.decidim_meetings.rb new file mode 100644 index 0000000..da26822 --- /dev/null +++ b/db/migrate/20240418105468_create_decidim_meetings_answer_choices.decidim_meetings.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210520084337) + +class CreateDecidimMeetingsAnswerChoices < ActiveRecord::Migration[6.0] + def change + create_table :decidim_meetings_answer_choices do |t| + t.references :decidim_answer, index: { name: "index_decidim_meetings_answer_choices_answer_id" } + t.references :decidim_answer_option, index: { name: "index_decidim_meetings_answer_choices_answer_option_id" } + t.integer :position + t.jsonb :body + t.text :custom_body + end + end +end diff --git a/db/migrate/20240418105469_add_status_to_meetings_questions.decidim_meetings.rb b/db/migrate/20240418105469_add_status_to_meetings_questions.decidim_meetings.rb new file mode 100644 index 0000000..f14c3b4 --- /dev/null +++ b/db/migrate/20240418105469_add_status_to_meetings_questions.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210520134834) + +class AddStatusToMeetingsQuestions < ActiveRecord::Migration[6.0] + def change + add_column :decidim_meetings_questions, :status, :integer, default: 0, index: true + end +end diff --git a/db/migrate/20240418105470_add_setting_embed_iframe_to_meetings.decidim_meetings.rb b/db/migrate/20240418105470_add_setting_embed_iframe_to_meetings.decidim_meetings.rb new file mode 100644 index 0000000..96035f6 --- /dev/null +++ b/db/migrate/20240418105470_add_setting_embed_iframe_to_meetings.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210602040614) + +class AddSettingEmbedIframeToMeetings < ActiveRecord::Migration[6.0] + def change + add_column :decidim_meetings_meetings, :show_embedded_iframe, :boolean, default: false + end +end diff --git a/db/migrate/20240418105471_add_state_field_to_meeting.decidim_meetings.rb b/db/migrate/20240418105471_add_state_field_to_meeting.decidim_meetings.rb new file mode 100644 index 0000000..54ab50a --- /dev/null +++ b/db/migrate/20240418105471_add_state_field_to_meeting.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210727085318) + +class AddStateFieldToMeeting < ActiveRecord::Migration[6.0] + def change + add_column :decidim_meetings_meetings, :state, :string, index: true + end +end diff --git a/db/migrate/20240418105472_add_iframe_access_level_to_decidim_meetings.decidim_meetings.rb b/db/migrate/20240418105472_add_iframe_access_level_to_decidim_meetings.decidim_meetings.rb new file mode 100644 index 0000000..5f3a1fd --- /dev/null +++ b/db/migrate/20240418105472_add_iframe_access_level_to_decidim_meetings.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210903143040) + +class AddIframeAccessLevelToDecidimMeetings < ActiveRecord::Migration[6.0] + def change + add_column :decidim_meetings_meetings, :iframe_access_level, :integer, default: 0 + end +end diff --git a/db/migrate/20240418105473_transform_show_embedded_iframe_column.decidim_meetings.rb b/db/migrate/20240418105473_transform_show_embedded_iframe_column.decidim_meetings.rb new file mode 100644 index 0000000..21da5b5 --- /dev/null +++ b/db/migrate/20240418105473_transform_show_embedded_iframe_column.decidim_meetings.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210922140454) + +class TransformShowEmbeddedIframeColumn < ActiveRecord::Migration[6.0] + def up + add_column :decidim_meetings_meetings, :iframe_embed_type, :integer, default: 0 + execute "UPDATE decidim_meetings_meetings SET iframe_embed_type = 1 WHERE show_embedded_iframe = 't'" + remove_column :decidim_meetings_meetings, :show_embedded_iframe + end + + def down + add_column :decidim_meetings_meetings, :show_embedded_iframe, :boolean, default: false + execute "UPDATE decidim_meetings_meetings SET show_embedded_iframe = 't' WHERE iframe_embed_type = 1" + remove_column :decidim_meetings_meetings, :iframe_embed_type + end +end diff --git a/db/migrate/20240418105474_rename_upcoming_events_content_block_to_upcoming_meetings.decidim_meetings.rb b/db/migrate/20240418105474_rename_upcoming_events_content_block_to_upcoming_meetings.decidim_meetings.rb new file mode 100644 index 0000000..f82f835 --- /dev/null +++ b/db/migrate/20240418105474_rename_upcoming_events_content_block_to_upcoming_meetings.decidim_meetings.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20210928095036) + +class RenameUpcomingEventsContentBlockToUpcomingMeetings < ActiveRecord::Migration[6.0] + class ContentBlock < ApplicationRecord + self.table_name = :decidim_content_blocks + end + + def change + # rubocop:disable Rails/SkipsModelValidations + ContentBlock.where(manifest_name: "upcoming_events").update_all(manifest_name: "upcoming_meetings") + # rubocop:enable Rails/SkipsModelValidations + end +end diff --git a/db/migrate/20240418105475_remove_not_null_on_customize_registration_email.decidim_meetings.rb b/db/migrate/20240418105475_remove_not_null_on_customize_registration_email.decidim_meetings.rb new file mode 100644 index 0000000..b75856c --- /dev/null +++ b/db/migrate/20240418105475_remove_not_null_on_customize_registration_email.decidim_meetings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20211105115625) + +class RemoveNotNullOnCustomizeRegistrationEmail < ActiveRecord::Migration[6.0] + def change + change_column_null :decidim_meetings_meetings, :customize_registration_email, true + end +end diff --git a/db/migrate/20240418105476_change_types_and_registration_types_on_meetings.decidim_meetings.rb b/db/migrate/20240418105476_change_types_and_registration_types_on_meetings.decidim_meetings.rb new file mode 100644 index 0000000..5c57e6d --- /dev/null +++ b/db/migrate/20240418105476_change_types_and_registration_types_on_meetings.decidim_meetings.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true +# This migration comes from decidim_meetings (originally 20230427105701) + +class ChangeTypesAndRegistrationTypesOnMeetings < ActiveRecord::Migration[6.1] + class Meeting < ApplicationRecord + self.table_name = :decidim_meetings_meetings + + TYPE_OF_MEETING = { in_person: 0, online: 10, hybrid: 20 }.freeze + REGISTRATION_TYPES = { registration_disabled: 0, on_this_platform: 10, on_different_platform: 20 }.freeze + end + + def up + rename_column :decidim_meetings_meetings, :type_of_meeting, :old_type_of_meeting + rename_column :decidim_meetings_meetings, :registration_type, :old_registration_type + add_column :decidim_meetings_meetings, :type_of_meeting, :integer, default: 0, null: false + add_column :decidim_meetings_meetings, :registration_type, :integer, default: 0, null: false + + Meeting.reset_column_information + + Meeting::TYPE_OF_MEETING.each_pair do |status, index| + Meeting.where(old_type_of_meeting: status).update_all(type_of_meeting: index) # rubocop:disable Rails/SkipsModelValidations + end + Meeting::REGISTRATION_TYPES.each_pair do |status, index| + Meeting.where(old_registration_type: status).update_all(registration_type: index) # rubocop:disable Rails/SkipsModelValidations + end + + remove_column :decidim_meetings_meetings, :old_type_of_meeting + remove_column :decidim_meetings_meetings, :old_registration_type + end + + def down + rename_column :decidim_meetings_meetings, :type_of_meeting, :old_type_of_meeting + rename_column :decidim_meetings_meetings, :registration_type, :old_registration_type + + add_column :decidim_meetings_meetings, :type_of_meeting, :string, default: null + add_column :decidim_meetings_meetings, :registration_type, :string, default: null + + Meeting.reset_column_information + + Meeting::TYPE_OF_MEETING.each_pair do |status, index| + Meeting.where(old_type_of_meeting: index).update_all(type_of_meeting: status) # rubocop:disable Rails/SkipsModelValidations + end + Meeting::REGISTRATION_TYPES.each_pair do |status, index| + Meeting.where(old_registration_type: index).update_all(registration_type: status) # rubocop:disable Rails/SkipsModelValidations + end + + remove_column :decidim_meetings_meetings, :old_type_of_meeting + remove_column :decidim_meetings_meetings, :old_registration_type + end +end diff --git a/db/migrate/20240418105477_create_projects.decidim_budgets.rb b/db/migrate/20240418105477_create_projects.decidim_budgets.rb new file mode 100644 index 0000000..acd9a52 --- /dev/null +++ b/db/migrate/20240418105477_create_projects.decidim_budgets.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20170127114122) + +class CreateProjects < ActiveRecord::Migration[5.0] + def change + create_table :decidim_budgets_projects do |t| + t.jsonb :title + t.jsonb :description + t.jsonb :short_description + t.integer :budget, null: false + t.references :decidim_feature, index: true + t.references :decidim_scope, index: true + t.references :decidim_category, index: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105478_create_orders.decidim_budgets.rb b/db/migrate/20240418105478_create_orders.decidim_budgets.rb new file mode 100644 index 0000000..e417599 --- /dev/null +++ b/db/migrate/20240418105478_create_orders.decidim_budgets.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20170130095615) + +class CreateOrders < ActiveRecord::Migration[5.0] + def change + create_table :decidim_budgets_orders do |t| + t.references :decidim_user, index: true + t.references :decidim_feature, index: true + t.datetime :checked_out_at + + t.timestamps + end + + add_index :decidim_budgets_orders, [:decidim_user_id, :decidim_feature_id], unique: true, name: "decidim_budgets_order_user_feature_unique" + end +end diff --git a/db/migrate/20240418105479_create_line_items.decidim_budgets.rb b/db/migrate/20240418105479_create_line_items.decidim_budgets.rb new file mode 100644 index 0000000..cbe9c5a --- /dev/null +++ b/db/migrate/20240418105479_create_line_items.decidim_budgets.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20170130101825) + +class CreateLineItems < ActiveRecord::Migration[5.0] + def change + create_table :decidim_budgets_line_items do |t| + t.references :decidim_order, index: true + t.references :decidim_project, index: true + end + + add_index :decidim_budgets_line_items, [:decidim_order_id, :decidim_project_id], unique: true, name: "decidim_budgets_line_items_order_project_unique" + end +end diff --git a/db/migrate/20240418105480_remove_short_description_from_decidim_projects.decidim_budgets.rb b/db/migrate/20240418105480_remove_short_description_from_decidim_projects.decidim_budgets.rb new file mode 100644 index 0000000..915d941 --- /dev/null +++ b/db/migrate/20240418105480_remove_short_description_from_decidim_projects.decidim_budgets.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20170207101750) + +class RemoveShortDescriptionFromDecidimProjects < ActiveRecord::Migration[5.0] + def change + remove_column :decidim_budgets_projects, :short_description + end +end diff --git a/db/migrate/20240418105481_add_reference_to_projects.decidim_budgets.rb b/db/migrate/20240418105481_add_reference_to_projects.decidim_budgets.rb new file mode 100644 index 0000000..2da3ec2 --- /dev/null +++ b/db/migrate/20240418105481_add_reference_to_projects.decidim_budgets.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20170215132708) + +class AddReferenceToProjects < ActiveRecord::Migration[5.0] + class Project < ApplicationRecord + self.table_name = :decidim_budgets_projects + end + + def change + add_column :decidim_budgets_projects, :reference, :string + Project.find_each(&:save) + change_column_null :decidim_budgets_projects, :reference, false + end +end diff --git a/db/migrate/20240418105482_remove_not_null_reference_budgets.decidim_budgets.rb b/db/migrate/20240418105482_remove_not_null_reference_budgets.decidim_budgets.rb new file mode 100644 index 0000000..9ee6328 --- /dev/null +++ b/db/migrate/20240418105482_remove_not_null_reference_budgets.decidim_budgets.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20170410074214) + +class RemoveNotNullReferenceBudgets < ActiveRecord::Migration[5.0] + def change + change_column_null :decidim_budgets_projects, :reference, true + end +end diff --git a/db/migrate/20240418105483_migrate_projects_category.decidim_budgets.rb b/db/migrate/20240418105483_migrate_projects_category.decidim_budgets.rb new file mode 100644 index 0000000..19d0fee --- /dev/null +++ b/db/migrate/20240418105483_migrate_projects_category.decidim_budgets.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20170612101846) + +class MigrateProjectsCategory < ActiveRecord::Migration[5.1] + def change + # Create categorizations ensuring database integrity + execute(' + INSERT INTO decidim_categorizations(decidim_category_id, categorizable_id, categorizable_type, created_at, updated_at) + SELECT decidim_category_id, decidim_budgets_projects.id, \'Decidim::Budgets::Project\', NOW(), NOW() + FROM decidim_budgets_projects + INNER JOIN decidim_categories ON decidim_categories.id = decidim_budgets_projects.decidim_category_id + ') + # Remove unused column + remove_column :decidim_budgets_projects, :decidim_category_id + end +end diff --git a/db/migrate/20240418105484_rename_features_to_components_at_budgets.decidim_budgets.rb b/db/migrate/20240418105484_rename_features_to_components_at_budgets.decidim_budgets.rb new file mode 100644 index 0000000..77d3ee1 --- /dev/null +++ b/db/migrate/20240418105484_rename_features_to_components_at_budgets.decidim_budgets.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20180305133340) + +class RenameFeaturesToComponentsAtBudgets < ActiveRecord::Migration[5.1] + def change + rename_column :decidim_budgets_orders, :decidim_feature_id, :decidim_component_id + rename_column :decidim_budgets_projects, :decidim_feature_id, :decidim_component_id + rename_index :decidim_budgets_orders, "decidim_budgets_order_user_feature_unique", "decidim_budgets_order_user_component_unique" + + if index_name_exists?(:decidim_budgets_orders, "index_decidim_budgets_orders_on_decidim_feature_id") + rename_index :decidim_budgets_orders, "index_decidim_budgets_orders_on_decidim_feature_id", "index_decidim_budgets_orders_on_decidim_component_id" + end + + if index_name_exists?(:decidim_budgets_projects, "index_decidim_budgets_projects_on_decidim_feature_id") + rename_index :decidim_budgets_projects, "index_decidim_budgets_projects_on_decidim_feature_id", "index_decidim_budgets_projects_on_decidim_component_id" + end + end +end diff --git a/db/migrate/20240418105485_use_big_ints_for_budgets.decidim_budgets.rb b/db/migrate/20240418105485_use_big_ints_for_budgets.decidim_budgets.rb new file mode 100644 index 0000000..88a2476 --- /dev/null +++ b/db/migrate/20240418105485_use_big_ints_for_budgets.decidim_budgets.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20181205141115) + +class UseBigIntsForBudgets < ActiveRecord::Migration[5.2] + def change + change_column :decidim_budgets_projects, :budget, :bigint + end +end diff --git a/db/migrate/20240418105486_create_decidim_budgets.decidim_budgets.rb b/db/migrate/20240418105486_create_decidim_budgets.decidim_budgets.rb new file mode 100644 index 0000000..ca23f04 --- /dev/null +++ b/db/migrate/20240418105486_create_decidim_budgets.decidim_budgets.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20200617105120) + +class CreateDecidimBudgets < ActiveRecord::Migration[5.0] + def change + create_table :decidim_budgets_budgets do |t| + t.jsonb :title + t.integer :weight, null: false, default: 0 + t.jsonb :description + t.integer :total_budget, default: 0 + t.references :decidim_component, index: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105487_rename_budget_to_budget_ammount.decidim_budgets.rb b/db/migrate/20240418105487_rename_budget_to_budget_ammount.decidim_budgets.rb new file mode 100644 index 0000000..8ba8c4d --- /dev/null +++ b/db/migrate/20240418105487_rename_budget_to_budget_ammount.decidim_budgets.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20200629072626) + +class RenameBudgetToBudgetAmmount < ActiveRecord::Migration[5.2] + def change + rename_column :decidim_budgets_projects, :budget, :budget_amount + end +end diff --git a/db/migrate/20240418105488_add_budget_reference_to_project.decidim_budgets.rb b/db/migrate/20240418105488_add_budget_reference_to_project.decidim_budgets.rb new file mode 100644 index 0000000..fd80472 --- /dev/null +++ b/db/migrate/20240418105488_add_budget_reference_to_project.decidim_budgets.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20200629134013) + +class AddBudgetReferenceToProject < ActiveRecord::Migration[5.2] + def change + add_reference :decidim_budgets_projects, :decidim_budgets_budget, foreign_key: true + end +end diff --git a/db/migrate/20240418105489_add_budget_reference_to_order.decidim_budgets.rb b/db/migrate/20240418105489_add_budget_reference_to_order.decidim_budgets.rb new file mode 100644 index 0000000..e0a24c7 --- /dev/null +++ b/db/migrate/20240418105489_add_budget_reference_to_order.decidim_budgets.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20200706142609) + +class AddBudgetReferenceToOrder < ActiveRecord::Migration[5.2] + def change + add_reference :decidim_budgets_orders, :decidim_budgets_budget, foreign_key: true + end +end diff --git a/db/migrate/20240418105490_move_budgets_to_own_model.decidim_budgets.rb b/db/migrate/20240418105490_move_budgets_to_own_model.decidim_budgets.rb new file mode 100644 index 0000000..179be9b --- /dev/null +++ b/db/migrate/20240418105490_move_budgets_to_own_model.decidim_budgets.rb @@ -0,0 +1,110 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20200714103519) + +class MoveBudgetsToOwnModel < ActiveRecord::Migration[5.2] + class Component < ApplicationRecord + self.table_name = :decidim_components + end + + class Budget < ApplicationRecord + self.table_name = :decidim_budgets_budgets + end + + class Project < ApplicationRecord + self.table_name = :decidim_budgets_projects + end + + class Order < ApplicationRecord + self.table_name = :decidim_budgets_orders + end + + def up + Project.reset_column_information + Order.reset_column_information + + budget_components.each do |component| + resource = create_budget_resource_from(component) + + add_budget_references_to_projects(resource) + add_budget_reference_to_orders(resource) + end + + remove_column :decidim_budgets_projects, :decidim_component_id + remove_column :decidim_budgets_orders, :decidim_component_id + end + + def down + add_column :decidim_budgets_projects, :decidim_component_id, :integer, index: true + add_column :decidim_budgets_orders, :decidim_component_id, :integer, index: true + + Budget.find_each do |resource| + revert_budget_to_component(resource) + if resource + add_component_reference_to_projects(resource) + add_component_reference_to_orders(resource) + end + end + end + + # up methods + def budget_components + @budget_components ||= Component.where(manifest_name: "budgets") + end + + def create_budget_resource_from(component) + component_total_budget = if component["settings"].dig("global", "total_budget") + component["settings"]["global"]["total_budget"] + else + 100_000_000 + end + + Budget.create!( + decidim_component_id: component.id, + total_budget: component_total_budget, + title: component.name + ) + end + + def add_budget_references_to_projects(resource) + # rubocop:disable Rails/SkipsModelValidations + Project.where(decidim_component_id: resource.decidim_component_id) + .update_all(decidim_budgets_budget_id: resource.id) + # rubocop:enable Rails/SkipsModelValidations + end + + def add_budget_reference_to_orders(resource) + # rubocop:disable Rails/SkipsModelValidations + Order.where(decidim_component_id: resource.decidim_component_id) + .update_all(decidim_budgets_budget_id: resource.id) + # rubocop:enable Rails/SkipsModelValidations + end + + # down methods + + def revert_budget_to_component(resource) + component = Component.find_by(id: resource.decidim_component_id, manifest_name: "budgets") + component_settings = if resource.total_budget && component["settings"].try(:key?, "global") + component["settings"]["global"].merge!(total_budget: resource.total_budget) + component["settings"] + end + + component.update!( + settings: component_settings, + name: resource.title + ) + end + + def add_component_reference_to_orders(resource) + # rubocop:disable Rails/SkipsModelValidations + Order.where(decidim_budgets_budget_id: resource.id) + .update_all(decidim_component_id: resource.decidim_component_id) + # rubocop:enable Rails/SkipsModelValidations + end + + def add_component_reference_to_projects(resource) + # rubocop:disable Rails/SkipsModelValidations + Project.where(decidim_budgets_budget_id: resource.id) + .update_all(decidim_component_id: resource.decidim_component_id) + # rubocop:enable Rails/SkipsModelValidations + end +end diff --git a/db/migrate/20240418105491_add_scope_to_budgets.decidim_budgets.rb b/db/migrate/20240418105491_add_scope_to_budgets.decidim_budgets.rb new file mode 100644 index 0000000..9c4f0c4 --- /dev/null +++ b/db/migrate/20240418105491_add_scope_to_budgets.decidim_budgets.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20200717140012) + +class AddScopeToBudgets < ActiveRecord::Migration[5.2] + def change + add_reference :decidim_budgets_budgets, :decidim_scope, foreign_key: true, index: true + end +end diff --git a/db/migrate/20240418105492_add_selected_at_to_project.decidim_budgets.rb b/db/migrate/20240418105492_add_selected_at_to_project.decidim_budgets.rb new file mode 100644 index 0000000..758441c --- /dev/null +++ b/db/migrate/20240418105492_add_selected_at_to_project.decidim_budgets.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20200728075039) + +class AddSelectedAtToProject < ActiveRecord::Migration[5.2] + def change + add_column :decidim_budgets_projects, :selected_at, :date, index: true + end +end diff --git a/db/migrate/20240418105493_votes_enabled_to_votes_choices.decidim_budgets.rb b/db/migrate/20240418105493_votes_enabled_to_votes_choices.decidim_budgets.rb new file mode 100644 index 0000000..4b2d717 --- /dev/null +++ b/db/migrate/20240418105493_votes_enabled_to_votes_choices.decidim_budgets.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20200804175222) + +class VotesEnabledToVotesChoices < ActiveRecord::Migration[5.2] + class Component < ApplicationRecord + self.table_name = :decidim_components + end + + def up + budget_components.each do |component| + steps = component["settings"] && component["settings"]["steps"] + default_step = component["settings"] && component["settings"]["default_step"] + + if steps.present? + new_steps_settings = component["settings"]["steps"].each_with_object({}) do |(step, config), new_config| + votes_value = config["votes_enabled"] ? "enabled" : "disabled" + + new_config[step] = config.merge(votes: votes_value).except("votes_enabled") + new_config + end + component["settings"]["steps"] = new_steps_settings + component.save! + elsif default_step.present? + votes_value = component["settings"]["default_step"]["votes_enabled"] ? "enabled" : "disabled" + + new_default_step_settings = component["settings"]["default_step"].merge(votes: votes_value).except("votes_enabled") + component["settings"]["default_step"] = new_default_step_settings + component.save! + end + end + end + + def budget_components + @budget_components ||= Component.where(manifest_name: "budgets") + end +end diff --git a/db/migrate/20240418105494_add_commentable_counter_cache_to_projects.decidim_budgets.rb b/db/migrate/20240418105494_add_commentable_counter_cache_to_projects.decidim_budgets.rb new file mode 100644 index 0000000..e707926 --- /dev/null +++ b/db/migrate/20240418105494_add_commentable_counter_cache_to_projects.decidim_budgets.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20200827154129) + +class AddCommentableCounterCacheToProjects < ActiveRecord::Migration[5.2] + def change + add_column :decidim_budgets_projects, :comments_count, :integer, null: false, default: 0, index: true + Decidim::Budgets::Project.reset_column_information + Decidim::Budgets::Project.find_each(&:update_comments_count) + end +end diff --git a/db/migrate/20240418105495_add_followable_counter_cache_to_budgets.decidim_budgets.rb b/db/migrate/20240418105495_add_followable_counter_cache_to_budgets.decidim_budgets.rb new file mode 100644 index 0000000..8b8d045 --- /dev/null +++ b/db/migrate/20240418105495_add_followable_counter_cache_to_budgets.decidim_budgets.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20210310120613) + +class AddFollowableCounterCacheToBudgets < ActiveRecord::Migration[5.2] + def change + add_column :decidim_budgets_projects, :follows_count, :integer, null: false, default: 0, index: true + + reversible do |dir| + dir.up do + Decidim::Budgets::Project.reset_column_information + Decidim::Budgets::Project.find_each do |record| + record.class.reset_counters(record.id, :follows) + end + end + end + end +end diff --git a/db/migrate/20240418105496_add_geolocalization_fields_to_projects.decidim_budgets.rb b/db/migrate/20240418105496_add_geolocalization_fields_to_projects.decidim_budgets.rb new file mode 100644 index 0000000..2a7b59f --- /dev/null +++ b/db/migrate/20240418105496_add_geolocalization_fields_to_projects.decidim_budgets.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_budgets (originally 20220428072638) + +class AddGeolocalizationFieldsToProjects < ActiveRecord::Migration[6.1] + def change + add_column :decidim_budgets_projects, :address, :text + add_column :decidim_budgets_projects, :latitude, :float + add_column :decidim_budgets_projects, :longitude, :float + end +end diff --git a/db/migrate/20240418105497_create_decidim_templates.decidim_templates.rb b/db/migrate/20240418105497_create_decidim_templates.decidim_templates.rb new file mode 100644 index 0000000..1eac5dd --- /dev/null +++ b/db/migrate/20240418105497_create_decidim_templates.decidim_templates.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_templates (originally 20200518093819) + +class CreateDecidimTemplates < ActiveRecord::Migration[5.2] + def change + create_table :decidim_templates_templates do |t| + t.integer :decidim_organization_id, null: false, index: { name: "index_decidim_templates_organization" } + t.references :templatable, polymorphic: true, index: { name: "index_decidim_templates_templatable" } + t.jsonb :name, null: false + t.jsonb :description + t.timestamps + end + end +end diff --git a/db/migrate/20240418105498_add_field_values_and_target_to_decidim_templates.decidim_templates.rb b/db/migrate/20240418105498_add_field_values_and_target_to_decidim_templates.decidim_templates.rb new file mode 100644 index 0000000..fd1afdb --- /dev/null +++ b/db/migrate/20240418105498_add_field_values_and_target_to_decidim_templates.decidim_templates.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true +# This migration comes from decidim_templates (originally 20221006055954) + +class AddFieldValuesAndTargetToDecidimTemplates < ActiveRecord::Migration[6.0] + class Template < ApplicationRecord + self.table_name = :decidim_templates_templates + end + + def change + add_column :decidim_templates_templates, :field_values, :json, default: {} + add_column :decidim_templates_templates, :target, :string + + reversible do |direction| + direction.up do + # rubocop:disable Rails/SkipsModelValidations + Template.where(templatable_type: "Decidim::Forms::Questionnaire").update_all(target: "questionnaire") + Template.where(templatable_type: "Decidim::Organization").update_all(target: "user_block") + # rubocop:enable Rails/SkipsModelValidations + end + end + end +end diff --git a/db/migrate/20240418105499_create_decidim_surveys.decidim_surveys.rb b/db/migrate/20240418105499_create_decidim_surveys.decidim_surveys.rb new file mode 100644 index 0000000..0e0b234 --- /dev/null +++ b/db/migrate/20240418105499_create_decidim_surveys.decidim_surveys.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20170511092231) + +class CreateDecidimSurveys < ActiveRecord::Migration[5.0] + def change + create_table :decidim_surveys_surveys do |t| + t.jsonb :title + t.jsonb :description + t.jsonb :tos + t.references :decidim_feature, index: true + t.datetime :published_at + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105500_create_decidim_survey_questions.decidim_surveys.rb b/db/migrate/20240418105500_create_decidim_survey_questions.decidim_surveys.rb new file mode 100644 index 0000000..ab5874d --- /dev/null +++ b/db/migrate/20240418105500_create_decidim_survey_questions.decidim_surveys.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20170515090916) + +class CreateDecidimSurveyQuestions < ActiveRecord::Migration[5.0] + def change + create_table :decidim_surveys_survey_questions do |t| + t.jsonb :body + t.references :decidim_survey, index: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105501_create_decidim_survey_answers.decidim_surveys.rb b/db/migrate/20240418105501_create_decidim_survey_answers.decidim_surveys.rb new file mode 100644 index 0000000..7942fa9 --- /dev/null +++ b/db/migrate/20240418105501_create_decidim_survey_answers.decidim_surveys.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20170515144119) + +class CreateDecidimSurveyAnswers < ActiveRecord::Migration[5.0] + def change + create_table :decidim_surveys_survey_answers do |t| + t.jsonb :body, default: [] + t.references :decidim_user, index: true + t.references :decidim_survey, index: true + t.references :decidim_survey_question, index: { name: "index_decidim_surveys_answers_question_id" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105502_add_position_to_surveys_questions.decidim_surveys.rb b/db/migrate/20240418105502_add_position_to_surveys_questions.decidim_surveys.rb new file mode 100644 index 0000000..dff3430 --- /dev/null +++ b/db/migrate/20240418105502_add_position_to_surveys_questions.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20170518085302) + +class AddPositionToSurveysQuestions < ActiveRecord::Migration[5.0] + def change + add_column :decidim_surveys_survey_questions, :position, :integer, index: true + end +end diff --git a/db/migrate/20240418105503_add_mandatory_to_surveys_questions.decidim_surveys.rb b/db/migrate/20240418105503_add_mandatory_to_surveys_questions.decidim_surveys.rb new file mode 100644 index 0000000..b16d7cb --- /dev/null +++ b/db/migrate/20240418105503_add_mandatory_to_surveys_questions.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20170522075938) + +class AddMandatoryToSurveysQuestions < ActiveRecord::Migration[5.0] + def change + add_column :decidim_surveys_survey_questions, :mandatory, :boolean + end +end diff --git a/db/migrate/20240418105504_add_question_type_to_surveys_questions.decidim_surveys.rb b/db/migrate/20240418105504_add_question_type_to_surveys_questions.decidim_surveys.rb new file mode 100644 index 0000000..759f9e7 --- /dev/null +++ b/db/migrate/20240418105504_add_question_type_to_surveys_questions.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20170524122229) + +class AddQuestionTypeToSurveysQuestions < ActiveRecord::Migration[5.0] + def change + add_column :decidim_surveys_survey_questions, :question_type, :string + end +end diff --git a/db/migrate/20240418105505_add_answer_options_to_surveys_questions.decidim_surveys.rb b/db/migrate/20240418105505_add_answer_options_to_surveys_questions.decidim_surveys.rb new file mode 100644 index 0000000..cca7954 --- /dev/null +++ b/db/migrate/20240418105505_add_answer_options_to_surveys_questions.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20170525132233) + +class AddAnswerOptionsToSurveysQuestions < ActiveRecord::Migration[5.0] + def change + add_column :decidim_surveys_survey_questions, :answer_options, :jsonb, default: [] + end +end diff --git a/db/migrate/20240418105506_rename_features_to_components_at_surveys.decidim_surveys.rb b/db/migrate/20240418105506_rename_features_to_components_at_surveys.decidim_surveys.rb new file mode 100644 index 0000000..b1e2429 --- /dev/null +++ b/db/migrate/20240418105506_rename_features_to_components_at_surveys.decidim_surveys.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20180305133837) + +class RenameFeaturesToComponentsAtSurveys < ActiveRecord::Migration[5.1] + def change + rename_column :decidim_surveys_surveys, :decidim_feature_id, :decidim_component_id + + if index_name_exists?(:decidim_surveys_surveys, "index_decidim_surveys_surveys_on_decidim_feature_id") + rename_index :decidim_surveys_surveys, "index_decidim_surveys_surveys_on_decidim_feature_id", "index_decidim_surveys_surveys_on_decidim_component_id" + end + end +end diff --git a/db/migrate/20240418105507_add_max_choices_to_survey_questions.decidim_surveys.rb b/db/migrate/20240418105507_add_max_choices_to_survey_questions.decidim_surveys.rb new file mode 100644 index 0000000..92f22f6 --- /dev/null +++ b/db/migrate/20240418105507_add_max_choices_to_survey_questions.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20180314225829) + +class AddMaxChoicesToSurveyQuestions < ActiveRecord::Migration[5.1] + def change + add_column :decidim_surveys_survey_questions, :max_choices, :integer + end +end diff --git a/db/migrate/20240418105508_add_description_to_decidim_survey_questions.decidim_surveys.rb b/db/migrate/20240418105508_add_description_to_decidim_survey_questions.decidim_surveys.rb new file mode 100644 index 0000000..90ac684 --- /dev/null +++ b/db/migrate/20240418105508_add_description_to_decidim_survey_questions.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20180321141024) + +class AddDescriptionToDecidimSurveyQuestions < ActiveRecord::Migration[5.1] + def change + add_column :decidim_surveys_survey_questions, :description, :jsonb + end +end diff --git a/db/migrate/20240418105509_add_choices_to_decidim_survey_answers.decidim_surveys.rb b/db/migrate/20240418105509_add_choices_to_decidim_survey_answers.decidim_surveys.rb new file mode 100644 index 0000000..b892fa4 --- /dev/null +++ b/db/migrate/20240418105509_add_choices_to_decidim_survey_answers.decidim_surveys.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20180405014929) + +class AddChoicesToDecidimSurveyAnswers < ActiveRecord::Migration[5.1] + class SurveyAnswer < ApplicationRecord + self.table_name = :decidim_surveys_survey_answers + end + + class SurveyQuestion < ApplicationRecord + self.table_name = :decidim_surveys_survey_questions + end + + def up + add_column :decidim_surveys_survey_answers, :text_body, :text + add_column :decidim_surveys_survey_answers, :choices, :jsonb, default: [] + + SurveyAnswer.find_each do |answer| + question = SurveyQuestion.find_by(id: answer.decidim_survey_question_id) + + if %w(single_option multiple_option).include?(question.question_type) + answer.update!(choices: answer.body) + else + answer.update!(text_body: answer.body.first) + end + end + + remove_column :decidim_surveys_survey_answers, :body + rename_column :decidim_surveys_survey_answers, :text_body, :body + end + + def down + add_column :decidim_surveys_survey_answers, :jsonb_body, :jsonb, default: [] + + SurveyAnswer.find_each do |answer| + question = SurveyQuestion.find_by(id: answer.decidim_survey_question_id) + + if %w(single_option multiple_option).include?(question.question_type) + answer.update!(jsonb_body: answer.choices) + else + answer.update!(jsonb_body: [answer.body]) + end + end + + remove_column :decidim_surveys_survey_answers, :choices + + remove_column :decidim_surveys_survey_answers, :body + rename_column :decidim_surveys_survey_answers, :jsonb_body, :body + end +end diff --git a/db/migrate/20240418105510_create_decidim_survey_answer_options.decidim_surveys.rb b/db/migrate/20240418105510_create_decidim_survey_answer_options.decidim_surveys.rb new file mode 100644 index 0000000..2934500 --- /dev/null +++ b/db/migrate/20240418105510_create_decidim_survey_answer_options.decidim_surveys.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20180405015012) + +class CreateDecidimSurveyAnswerOptions < ActiveRecord::Migration[5.1] + class SurveyQuestion < ApplicationRecord + self.table_name = :decidim_surveys_survey_questions + end + + class SurveyAnswerOption < ApplicationRecord + self.table_name = :decidim_surveys_survey_answer_options + end + + def up + create_table :decidim_surveys_survey_answer_options do |t| + t.references :decidim_survey_question, index: { name: "index_decidim_surveys_answer_options_question_id" } + t.jsonb :body + end + + SurveyQuestion.find_each do |question| + question.answer_options.each do |answer_option| + SurveyAnswerOption.create!( + decidim_survey_question_id: question.id, + body: answer_option["body"] + ) + end + end + + remove_column :decidim_surveys_survey_questions, :answer_options + end + + def down + add_column :decidim_surveys_survey_questions, :answer_options, :jsonb, default: [] + + SurveyAnswerOption.find_each do |answer_option| + question = SurveyQuestion.find(answer_option.decidim_survey_question_id) + + question.answer_options << { "body" => answer_option.body } + + question.save! + end + + drop_table :decidim_surveys_survey_answer_options + end +end diff --git a/db/migrate/20240418105511_create_decidim_survey_answer_choices.decidim_surveys.rb b/db/migrate/20240418105511_create_decidim_survey_answer_choices.decidim_surveys.rb new file mode 100644 index 0000000..d1775e2 --- /dev/null +++ b/db/migrate/20240418105511_create_decidim_survey_answer_choices.decidim_surveys.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20180405015147) + +class CreateDecidimSurveyAnswerChoices < ActiveRecord::Migration[5.1] + class SurveyAnswer < ApplicationRecord + self.table_name = :decidim_surveys_survey_answers + end + + class SurveyAnswerChoice < ApplicationRecord + self.table_name = :decidim_surveys_survey_answer_choices + end + + class SurveyQuestion < ApplicationRecord + self.table_name = :decidim_surveys_survey_questions + end + + class SurveyAnswerOption < ApplicationRecord + self.table_name = :decidim_surveys_survey_answer_options + end + + def up + create_table :decidim_surveys_survey_answer_choices do |t| + t.references :decidim_survey_answer, index: { name: "index_decidim_surveys_answer_choices_answer_id" } + t.references :decidim_survey_answer_option, index: { name: "index_decidim_surveys_answer_choices_answer_option_id" } + t.jsonb :body + end + + SurveyAnswer.find_each do |answer| + question = SurveyQuestion.find_by(id: answer.decidim_survey_question_id) + choices = SurveyAnswerChoice.where(decidim_survey_answer_id: answer.id) + + choices.each do |answer_choice| + answer_options = SurveyAnswerOption.where(decidim_survey_question_id: question.id) + + answer_option = answer_options.find do |option| + option.body.has_value?(answer_choice) + end + + SurveyAnswerChoice.create!( + decidim_survey_answer_id: answer.id, + decidim_survey_answer_option_id: answer_option.id, + body: answer_choice + ) + end + end + + remove_column :decidim_surveys_survey_answers, :choices + end + + def down + add_column :decidim_surveys_survey_answers, :choices, :jsonb, default: [] + + SurveyAnswerChoice.find_each do |answer_choice| + answer = SurveyAnswer.find_by(id: answer_choice.decidim_survey_answer_id) + + answer.choices << answer_choice.body + + answer.save! + end + + drop_table :decidim_surveys_survey_answer_choices + end +end diff --git a/db/migrate/20240418105512_add_free_text_to_survey_answer_options.decidim_surveys.rb b/db/migrate/20240418105512_add_free_text_to_survey_answer_options.decidim_surveys.rb new file mode 100644 index 0000000..ccf9ff7 --- /dev/null +++ b/db/migrate/20240418105512_add_free_text_to_survey_answer_options.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20180405015258) + +class AddFreeTextToSurveyAnswerOptions < ActiveRecord::Migration[5.1] + def change + add_column :decidim_surveys_survey_answer_options, :free_text, :boolean + end +end diff --git a/db/migrate/20240418105513_add_custom_body_to_survey_answer_choices.decidim_surveys.rb b/db/migrate/20240418105513_add_custom_body_to_survey_answer_choices.decidim_surveys.rb new file mode 100644 index 0000000..2ad8377 --- /dev/null +++ b/db/migrate/20240418105513_add_custom_body_to_survey_answer_choices.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20180405015314) + +class AddCustomBodyToSurveyAnswerChoices < ActiveRecord::Migration[5.1] + def change + add_column :decidim_surveys_survey_answer_choices, :custom_body, :text + end +end diff --git a/db/migrate/20240418105514_add_position_to_decidim_survey_answer_choices.decidim_surveys.rb b/db/migrate/20240418105514_add_position_to_decidim_survey_answer_choices.decidim_surveys.rb new file mode 100644 index 0000000..3aabaa5 --- /dev/null +++ b/db/migrate/20240418105514_add_position_to_decidim_survey_answer_choices.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20180406201818) + +class AddPositionToDecidimSurveyAnswerChoices < ActiveRecord::Migration[5.1] + def change + add_column :decidim_surveys_survey_answer_choices, :position, :integer + end +end diff --git a/db/migrate/20240418105515_check_legacy_tables.decidim_surveys.rb b/db/migrate/20240418105515_check_legacy_tables.decidim_surveys.rb new file mode 100644 index 0000000..2ce168f --- /dev/null +++ b/db/migrate/20240418105515_check_legacy_tables.decidim_surveys.rb @@ -0,0 +1,115 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20200609090533) + +# rubocop:disable Rails/Output +# rubocop:disable Style/GuardClause +class CheckLegacyTables < ActiveRecord::Migration[5.2] + class Answer < ApplicationRecord + self.table_name = :decidim_surveys_survey_answers + end + + class AnswerChoice < ApplicationRecord + self.table_name = :decidim_surveys_survey_answer_choices + end + + class AnswerOption < ApplicationRecord + self.table_name = :decidim_surveys_survey_answer_options + end + + class Question < ApplicationRecord + self.table_name = :decidim_surveys_survey_questions + end + + def up + if tables_exists.any? + if tables_exists.all? + migrate_legacy_data if Question.any? + else + puts "Some legacy surveys tables exist but not all. Have you migrated all the data?" + puts "Migrate or backup your data and then remove the following raise statement to continue with the migrations (that will remove surveys legacy tables)" + puts "For migrating your data you can do that with the command:" + puts "bundle exec rake decidim_surveys:migrate_data_to_decidim_forms" + raise "ERROR: there is the risk to loose legacy information from old surveys!" + end + end + end + + def tables_exists + @tables_exists ||= [Answer, AnswerChoice, AnswerOption, Question].collect { |model| ActiveRecord::Base.connection.table_exists? model.table_name } + end + + def migrate_legacy_data + puts "Migrating data from decidim_surveys tables to decidim_forms tables..." + ActiveRecord::Base.transaction do + Decidim::Surveys::Survey.find_each do |survey| + puts "Migrating survey #{survey.id}..." + if survey.questionnaire.present? + puts("already migrated at questionnaire #{survey.questionnaire.id}") + next + end + + questionnaire = ::Decidim::Forms::Questionnaire.create!( + questionnaire_for: survey, + title: survey.title, + description: survey.description, + tos: survey.tos, + published_at: survey.published_at, + created_at: survey.created_at, + updated_at: survey.updated_at + ) + + Question.where(decidim_survey_id: survey.id).find_each do |survey_question| + puts "Migrating question #{survey_question.id}..." + + question = ::Decidim::Forms::Question.create!( + questionnaire:, + position: survey_question.position, + question_type: survey_question.question_type, + mandatory: survey_question.mandatory, + body: survey_question.body, + description: survey_question.description, + max_choices: survey_question.max_choices, + created_at: survey_question.created_at, + updated_at: survey_question.updated_at + ) + + # A hash with the old answer_option id as key, and the new form answer option as value + answer_option_mapping = {} + + AnswerOption.where(decidim_survey_question_id: survey_question.id).find_each do |survey_answer_option| + answer_option_mapping[survey_answer_option.id] = ::Decidim::Forms::AnswerOption.create!( + question:, + body: survey_answer_option.body, + free_text: survey_answer_option.free_text + ) + end + + Answer.where(decidim_survey_id: survey.id, decidim_survey_question_id: survey_question.id).find_each do |survey_answer| + answer = ::Decidim::Forms::Answer.new( + questionnaire:, + question:, + decidim_user_id: survey_answer.decidim_user_id, + body: survey_answer.body, + created_at: survey_answer.created_at, + updated_at: survey_answer.updated_at + ) + + AnswerChoice.where(decidim_survey_answer_id: survey_answer.id).find_each do |survey_answer_choice| + answer.choices.build( + answer_option: answer_option_mapping[survey_answer_choice.decidim_survey_answer_option_id], + body: survey_answer_choice.body, + custom_body: survey_answer_choice.custom_body, + position: survey_answer_choice.position + ) + end + + answer.save! + end + end + end + end + end +end + +# rubocop:enable Style/GuardClause +# rubocop:enable Rails/Output diff --git a/db/migrate/20240418105516_remove_survey_answer_choices.decidim_surveys.rb b/db/migrate/20240418105516_remove_survey_answer_choices.decidim_surveys.rb new file mode 100644 index 0000000..52123be --- /dev/null +++ b/db/migrate/20240418105516_remove_survey_answer_choices.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20200610090533) + +class RemoveSurveyAnswerChoices < ActiveRecord::Migration[5.2] + def change + drop_table :decidim_surveys_survey_answer_choices, if_exists: true + end +end diff --git a/db/migrate/20240418105517_remove_survey_answer_options.decidim_surveys.rb b/db/migrate/20240418105517_remove_survey_answer_options.decidim_surveys.rb new file mode 100644 index 0000000..1bb14a3 --- /dev/null +++ b/db/migrate/20240418105517_remove_survey_answer_options.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20200610090650) + +class RemoveSurveyAnswerOptions < ActiveRecord::Migration[5.2] + def change + drop_table :decidim_surveys_survey_answer_options, if_exists: true + end +end diff --git a/db/migrate/20240418105518_remove_survey_answers.decidim_surveys.rb b/db/migrate/20240418105518_remove_survey_answers.decidim_surveys.rb new file mode 100644 index 0000000..95f9cc5 --- /dev/null +++ b/db/migrate/20240418105518_remove_survey_answers.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20200610090725) + +class RemoveSurveyAnswers < ActiveRecord::Migration[5.2] + def change + drop_table :decidim_surveys_survey_answers, if_exists: true + end +end diff --git a/db/migrate/20240418105519_remove_survey_questions.decidim_surveys.rb b/db/migrate/20240418105519_remove_survey_questions.decidim_surveys.rb new file mode 100644 index 0000000..3008d05 --- /dev/null +++ b/db/migrate/20240418105519_remove_survey_questions.decidim_surveys.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20200610090845) + +class RemoveSurveyQuestions < ActiveRecord::Migration[5.2] + def change + drop_table :decidim_surveys_survey_questions, if_exists: true + end +end diff --git a/db/migrate/20240418105520_remove_survey_columns.decidim_surveys.rb b/db/migrate/20240418105520_remove_survey_columns.decidim_surveys.rb new file mode 100644 index 0000000..7822647 --- /dev/null +++ b/db/migrate/20240418105520_remove_survey_columns.decidim_surveys.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +# This migration comes from decidim_surveys (originally 20200610105927) + +class RemoveSurveyColumns < ActiveRecord::Migration[5.2] + def change + remove_column :decidim_surveys_surveys, :title if ActiveRecord::Base.connection.column_exists?(:decidim_surveys_surveys, :title) + remove_column :decidim_surveys_surveys, :description if ActiveRecord::Base.connection.column_exists?(:decidim_surveys_surveys, :description) + remove_column :decidim_surveys_surveys, :tos if ActiveRecord::Base.connection.column_exists?(:decidim_surveys_surveys, :tos) + remove_column :decidim_surveys_surveys, :published_at if ActiveRecord::Base.connection.column_exists?(:decidim_surveys_surveys, :published_at) + end +end diff --git a/db/migrate/20240418105521_create_accountability_statuses.decidim_accountability.rb b/db/migrate/20240418105521_create_accountability_statuses.decidim_accountability.rb new file mode 100644 index 0000000..6c98054 --- /dev/null +++ b/db/migrate/20240418105521_create_accountability_statuses.decidim_accountability.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20170425154712) + +class CreateAccountabilityStatuses < ActiveRecord::Migration[5.0] + def change + create_table :decidim_accountability_statuses do |t| + t.string :key + t.jsonb :name + t.references :decidim_feature, index: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105522_create_accountability_results.decidim_accountability.rb b/db/migrate/20240418105522_create_accountability_results.decidim_accountability.rb new file mode 100644 index 0000000..f72bb52 --- /dev/null +++ b/db/migrate/20240418105522_create_accountability_results.decidim_accountability.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20170426104125) + +class CreateAccountabilityResults < ActiveRecord::Migration[5.0] + def change + create_table :decidim_accountability_results do |t| + t.jsonb :title + t.jsonb :description + t.string :reference + t.date :start_date + t.date :end_date + t.decimal :progress, precision: 5, scale: 2 + t.references :parent, index: { name: :decidim_accountability_results_on_parent_id } + t.references :decidim_accountability_status, index: { name: :decidim_accountability_results_on_status_id } + t.references :decidim_feature, index: true + t.references :decidim_scope, index: true + t.references :decidim_category, index: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105523_add_description_and_progress_to_statuses.decidim_accountability.rb b/db/migrate/20240418105523_add_description_and_progress_to_statuses.decidim_accountability.rb new file mode 100644 index 0000000..890bb45 --- /dev/null +++ b/db/migrate/20240418105523_add_description_and_progress_to_statuses.decidim_accountability.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20170508104902) + +class AddDescriptionAndProgressToStatuses < ActiveRecord::Migration[5.0] + def change + add_column :decidim_accountability_statuses, :description, :jsonb + add_column :decidim_accountability_statuses, :progress, :integer + end +end diff --git a/db/migrate/20240418105524_create_accountability_timeline_entries.decidim_accountability.rb b/db/migrate/20240418105524_create_accountability_timeline_entries.decidim_accountability.rb new file mode 100644 index 0000000..8d3826c --- /dev/null +++ b/db/migrate/20240418105524_create_accountability_timeline_entries.decidim_accountability.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20170620154712) + +class CreateAccountabilityTimelineEntries < ActiveRecord::Migration[5.0] + def change + create_table :decidim_accountability_timeline_entries do |t| + t.date :entry_date, index: true + t.jsonb :description + t.references :decidim_accountability_result, index: { name: :index_decidim_accountability_timeline_entries_on_results_id } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105525_migrate_accountability_results_category.decidim_accountability.rb b/db/migrate/20240418105525_migrate_accountability_results_category.decidim_accountability.rb new file mode 100644 index 0000000..d941b44 --- /dev/null +++ b/db/migrate/20240418105525_migrate_accountability_results_category.decidim_accountability.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20170623094200) + +class MigrateAccountabilityResultsCategory < ActiveRecord::Migration[5.1] + def change + # Create categorizations ensuring database integrity + execute(' + INSERT INTO decidim_categorizations(decidim_category_id, categorizable_id, categorizable_type, created_at, updated_at) + SELECT decidim_category_id, decidim_accountability_results.id, \'Decidim::Accountability::Result\', NOW(), NOW() + FROM decidim_accountability_results + INNER JOIN decidim_categories ON decidim_categories.id = decidim_accountability_results.decidim_category_id + ') + # Remove unused column + remove_column :decidim_accountability_results, :decidim_category_id + end +end diff --git a/db/migrate/20240418105526_add_children_counter_cache_to_results.decidim_accountability.rb b/db/migrate/20240418105526_add_children_counter_cache_to_results.decidim_accountability.rb new file mode 100644 index 0000000..e2d89f8 --- /dev/null +++ b/db/migrate/20240418105526_add_children_counter_cache_to_results.decidim_accountability.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20170623144902) + +class AddChildrenCounterCacheToResults < ActiveRecord::Migration[5.0] + def change + add_column :decidim_accountability_results, :children_count, :integer, default: 0 + end +end diff --git a/db/migrate/20240418105527_migrate_old_results.decidim_accountability.rb b/db/migrate/20240418105527_migrate_old_results.decidim_accountability.rb new file mode 100644 index 0000000..108c6d0 --- /dev/null +++ b/db/migrate/20240418105527_migrate_old_results.decidim_accountability.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20170928073905) + +class MigrateOldResults < ActiveRecord::Migration[5.1] + class OldResult < ApplicationRecord + self.table_name = :decidim_results_results + end + + class Categorization < ApplicationRecord + self.table_name = :decidim_categorizations + end + + class Result < ApplicationRecord + self.table_name = :decidim_accountability_results + end + + class Feature < ApplicationRecord + self.table_name = :decidim_features + end + + class ResourceLink < ApplicationRecord + self.table_name = :decidim_resource_links + end + + def up + return unless ActiveRecord::Base.connection.data_source_exists? :decidim_results_results + + # rubocop:disable Rails/SkipsModelValidations + OldResult.find_each do |old_result| + Result.create!( + id: old_result.id, + decidim_feature_id: old_result.decidim_feature_id, + decidim_scope_id: old_result.decidim_scope_id, + title: old_result.title, + description: old_result.description + ) + + Categorization.where( + categorizable_id: old_result.id, + categorizable_type: "Decidim::Results::Result" + ).update_all("categorizable_type = 'Decidim::Accountability::Result'") + + ResourceLink.where( + from_id: old_result.id, + from_type: "Decidim::Results::Result" + ).update_all("from_type = 'Decidim::Accountability::Result'") + end + + Feature.where(manifest_name: "results").update_all("manifest_name = 'accountability'") + + drop_table :decidim_results_results + end + # rubocop:enable Rails/SkipsModelValidations +end diff --git a/db/migrate/20240418105528_rename_features_to_components_at_accountability.decidim_accountability.rb b/db/migrate/20240418105528_rename_features_to_components_at_accountability.decidim_accountability.rb new file mode 100644 index 0000000..f4073f7 --- /dev/null +++ b/db/migrate/20240418105528_rename_features_to_components_at_accountability.decidim_accountability.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20180305133145) + +class RenameFeaturesToComponentsAtAccountability < ActiveRecord::Migration[5.1] + def change + rename_column :decidim_accountability_statuses, :decidim_feature_id, :decidim_component_id + rename_column :decidim_accountability_results, :decidim_feature_id, :decidim_component_id + + if index_name_exists?(:decidim_accountability_results, "index_decidim_accountability_results_on_decidim_feature_id") + rename_index :decidim_accountability_results, "index_decidim_accountability_results_on_decidim_feature_id", "index_decidim_accountability_results_on_decidim_component_id" + end + + if index_name_exists?(:decidim_accountability_statuses, "index_decidim_accountability_statuses_on_decidim_feature_id") + rename_index :decidim_accountability_statuses, "index_decidim_accountability_statuses_on_decidim_feature_id", "index_decidim_accountability_statuses_on_decidim_component_id" + end + end +end diff --git a/db/migrate/20240418105529_add_weight_to_results.decidim_accountability.rb b/db/migrate/20240418105529_add_weight_to_results.decidim_accountability.rb new file mode 100644 index 0000000..179f0d0 --- /dev/null +++ b/db/migrate/20240418105529_add_weight_to_results.decidim_accountability.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20180508170210) + +class AddWeightToResults < ActiveRecord::Migration[5.1] + def change + add_column :decidim_accountability_results, :weight, :float, default: 1.0 + end +end diff --git a/db/migrate/20240418105530_add_external_id_to_results.decidim_accountability.rb b/db/migrate/20240418105530_add_external_id_to_results.decidim_accountability.rb new file mode 100644 index 0000000..f085ea5 --- /dev/null +++ b/db/migrate/20240418105530_add_external_id_to_results.decidim_accountability.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20180508170647) + +class AddExternalIdToResults < ActiveRecord::Migration[5.1] + def change + add_column :decidim_accountability_results, :external_id, :string, index: true + end +end diff --git a/db/migrate/20240418105531_index_foreign_keys_in_decidim_accountability_results.decidim_accountability.rb b/db/migrate/20240418105531_index_foreign_keys_in_decidim_accountability_results.decidim_accountability.rb new file mode 100644 index 0000000..a6c3111 --- /dev/null +++ b/db/migrate/20240418105531_index_foreign_keys_in_decidim_accountability_results.decidim_accountability.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20200320105903) + +class IndexForeignKeysInDecidimAccountabilityResults < ActiveRecord::Migration[5.2] + def change + add_index :decidim_accountability_results, :external_id + end +end diff --git a/db/migrate/20240418105532_add_commentable_counter_cache_to_results.decidim_accountability.rb b/db/migrate/20240418105532_add_commentable_counter_cache_to_results.decidim_accountability.rb new file mode 100644 index 0000000..fde6693 --- /dev/null +++ b/db/migrate/20240418105532_add_commentable_counter_cache_to_results.decidim_accountability.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20200827154103) + +class AddCommentableCounterCacheToResults < ActiveRecord::Migration[5.2] + def change + add_column :decidim_accountability_results, :comments_count, :integer, null: false, default: 0, index: true + Decidim::Accountability::Result.reset_column_information + Decidim::Accountability::Result.find_each(&:update_comments_count) + end +end diff --git a/db/migrate/20240418105533_add_title_to_timeline_entries.decidim_accountability.rb b/db/migrate/20240418105533_add_title_to_timeline_entries.decidim_accountability.rb new file mode 100644 index 0000000..d003be8 --- /dev/null +++ b/db/migrate/20240418105533_add_title_to_timeline_entries.decidim_accountability.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20220331150008) + +class AddTitleToTimelineEntries < ActiveRecord::Migration[6.1] + def change + add_column :decidim_accountability_timeline_entries, :title, :jsonb + end +end diff --git a/db/migrate/20240418105534_move_legacy_description_to_title_of_timeline_entries.decidim_accountability.rb b/db/migrate/20240418105534_move_legacy_description_to_title_of_timeline_entries.decidim_accountability.rb new file mode 100644 index 0000000..ca121c7 --- /dev/null +++ b/db/migrate/20240418105534_move_legacy_description_to_title_of_timeline_entries.decidim_accountability.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_accountability (originally 20220331150155) + +class MoveLegacyDescriptionToTitleOfTimelineEntries < ActiveRecord::Migration[6.1] + class TimelineEntry < ApplicationRecord + self.table_name = :decidim_accountability_timeline_entries + end + + def up + TimelineEntry.find_each do |timeline_entry| + timeline_entry.update!(title: timeline_entry.description, description: nil) + end + end +end diff --git a/db/migrate/20240418105535_create_debates.decidim_debates.rb b/db/migrate/20240418105535_create_debates.decidim_debates.rb new file mode 100644 index 0000000..db584fb --- /dev/null +++ b/db/migrate/20240418105535_create_debates.decidim_debates.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20170118141619) + +class CreateDebates < ActiveRecord::Migration[5.0] + def change + create_table :decidim_debates_debates do |t| + t.jsonb :title + t.jsonb :description + t.jsonb :instructions + t.datetime :start_time + t.datetime :end_time + t.string :image + t.references :decidim_feature, index: true + t.references :decidim_category, index: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105536_add_debate_information_updates.decidim_debates.rb b/db/migrate/20240418105536_add_debate_information_updates.decidim_debates.rb new file mode 100644 index 0000000..356b77f --- /dev/null +++ b/db/migrate/20240418105536_add_debate_information_updates.decidim_debates.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20180117100413) + +class AddDebateInformationUpdates < ActiveRecord::Migration[5.1] + def change + add_column :decidim_debates_debates, :information_updates, :jsonb + end +end diff --git a/db/migrate/20240418105537_add_author_to_debates.decidim_debates.rb b/db/migrate/20240418105537_add_author_to_debates.decidim_debates.rb new file mode 100644 index 0000000..7149b54 --- /dev/null +++ b/db/migrate/20240418105537_add_author_to_debates.decidim_debates.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20180118132243) + +class AddAuthorToDebates < ActiveRecord::Migration[5.1] + def change + add_column :decidim_debates_debates, :decidim_author_id, :integer + end +end diff --git a/db/migrate/20240418105538_add_reference_to_debates.decidim_debates.rb b/db/migrate/20240418105538_add_reference_to_debates.decidim_debates.rb new file mode 100644 index 0000000..a812cfb --- /dev/null +++ b/db/migrate/20240418105538_add_reference_to_debates.decidim_debates.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20180119150434) + +class AddReferenceToDebates < ActiveRecord::Migration[5.1] + class Debate < ApplicationRecord + self.table_name = :decidim_debates_debates + end + + def change + add_column :decidim_debates_debates, :reference, :string + Debate.find_each(&:touch) + end +end diff --git a/db/migrate/20240418105539_add_user_group_author_to_debates.decidim_debates.rb b/db/migrate/20240418105539_add_user_group_author_to_debates.decidim_debates.rb new file mode 100644 index 0000000..e93f883 --- /dev/null +++ b/db/migrate/20240418105539_add_user_group_author_to_debates.decidim_debates.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20180122090505) + +class AddUserGroupAuthorToDebates < ActiveRecord::Migration[5.1] + def change + add_column :decidim_debates_debates, :decidim_user_group_id, :integer + end +end diff --git a/db/migrate/20240418105540_drop_category_id_column.decidim_debates.rb b/db/migrate/20240418105540_drop_category_id_column.decidim_debates.rb new file mode 100644 index 0000000..ea81265 --- /dev/null +++ b/db/migrate/20240418105540_drop_category_id_column.decidim_debates.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20180305092347) + +class DropCategoryIdColumn < ActiveRecord::Migration[5.1] + def change + remove_column :decidim_debates_debates, :decidim_category_id + end +end diff --git a/db/migrate/20240418105541_rename_features_to_components_at_debates.decidim_debates.rb b/db/migrate/20240418105541_rename_features_to_components_at_debates.decidim_debates.rb new file mode 100644 index 0000000..9af6350 --- /dev/null +++ b/db/migrate/20240418105541_rename_features_to_components_at_debates.decidim_debates.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20180305133556) + +class RenameFeaturesToComponentsAtDebates < ActiveRecord::Migration[5.1] + def change + rename_column :decidim_debates_debates, :decidim_feature_id, :decidim_component_id + + if index_name_exists?(:decidim_debates_debates, "index_decidim_debates_debates_on_decidim_feature_id") + rename_index :decidim_debates_debates, "index_decidim_debates_debates_on_decidim_feature_id", "index_decidim_debates_debates_on_decidim_component_id" + end + end +end diff --git a/db/migrate/20240418105542_fix_user_groups_ids_on_debates.decidim_debates.rb b/db/migrate/20240418105542_fix_user_groups_ids_on_debates.decidim_debates.rb new file mode 100644 index 0000000..989efed --- /dev/null +++ b/db/migrate/20240418105542_fix_user_groups_ids_on_debates.decidim_debates.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20181003081235) + +class FixUserGroupsIdsOnDebates < ActiveRecord::Migration[5.2] + class UserGroup < ApplicationRecord + self.table_name = :decidim_users + self.inheritance_column = nil # disable the default inheritance + + default_scope { where(type: "Decidim::UserGroup") } + end + + class Debate < ApplicationRecord + self.table_name = :decidim_debates_debates + end + + # rubocop:disable Rails/SkipsModelValidations + def change + UserGroup.find_each do |group| + old_id = group.extended_data["old_user_group_id"] + next unless old_id + + Debate + .where(decidim_user_group_id: old_id) + .update_all(decidim_user_group_id: group.id) + end + end + # rubocop:enable Rails/SkipsModelValidations +end diff --git a/db/migrate/20240418105543_add_organization_as_author_to_debates.decidim_debates.rb b/db/migrate/20240418105543_add_organization_as_author_to_debates.decidim_debates.rb new file mode 100644 index 0000000..81f32fe --- /dev/null +++ b/db/migrate/20240418105543_add_organization_as_author_to_debates.decidim_debates.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20181016132850) + +class AddOrganizationAsAuthorToDebates < ActiveRecord::Migration[5.2] + class Debate < ApplicationRecord + self.table_name = :decidim_debates_debates + include Decidim::HasComponent + end + + class User < ApplicationRecord + self.table_name = :decidim_users + end + + def change + add_column :decidim_debates_debates, :decidim_author_type, :string + + Debate.find_each do |debate| + if debate.decidim_author_id.present? + debate.decidim_author_type = "Decidim::UserBaseEntity" + else + debate.decidim_author_id = debate.organization.id + debate.decidim_author_type = "Decidim::Organization" + end + debate.save! + end + + add_index :decidim_debates_debates, + [:decidim_author_id, :decidim_author_type], + name: "index_decidim_debates_debates_on_decidim_author" + change_column_null :decidim_debates_debates, :decidim_author_id, false + change_column_null :decidim_debates_debates, :decidim_author_type, false + end +end diff --git a/db/migrate/20240418105544_index_foreign_keys_in_decidim_debates_debates.decidim_debates.rb b/db/migrate/20240418105544_index_foreign_keys_in_decidim_debates_debates.decidim_debates.rb new file mode 100644 index 0000000..bf4057c --- /dev/null +++ b/db/migrate/20240418105544_index_foreign_keys_in_decidim_debates_debates.decidim_debates.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20200320105918) + +class IndexForeignKeysInDecidimDebatesDebates < ActiveRecord::Migration[5.2] + def change + add_index :decidim_debates_debates, :decidim_user_group_id + end +end diff --git a/db/migrate/20240418105545_close_debates.decidim_debates.rb b/db/migrate/20240418105545_close_debates.decidim_debates.rb new file mode 100644 index 0000000..b80fbf7 --- /dev/null +++ b/db/migrate/20240418105545_close_debates.decidim_debates.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20200703134657) + +class CloseDebates < ActiveRecord::Migration[5.2] + def change + add_column :decidim_debates_debates, :closed_at, :datetime + add_column :decidim_debates_debates, :conclusions, :jsonb + add_index :decidim_debates_debates, :closed_at + end +end diff --git a/db/migrate/20240418105546_fix_debates_i18n_fields.decidim_debates.rb b/db/migrate/20240418105546_fix_debates_i18n_fields.decidim_debates.rb new file mode 100644 index 0000000..314d1a0 --- /dev/null +++ b/db/migrate/20240418105546_fix_debates_i18n_fields.decidim_debates.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20200708072042) + +class FixDebatesI18nFields < ActiveRecord::Migration[5.2] + class User < ApplicationRecord + self.table_name = :decidim_users + end + + class Debate < ApplicationRecord + self.table_name = :decidim_debates_debates + end + + class Organization < ApplicationRecord + self.table_name = :decidim_organizations + end + + def change + reset_column_information + + debates.find_each do |debate| + locale, org_id = User.where(id: debate.decidim_author_id).pick(:locale, :decidim_organization_id) + locale = locale.presence || Organization.find(org_id).default_locale + locale = locale.to_s + + debate.title = { + locale => debate.title[locale] + } + debate.description = { + locale => debate.description[locale] + } + + debate.save!(validate: false) + end + + reset_column_information + end + + def debates + Debate + .where.not(decidim_author_type: "Decidim::Organization") + .select(:id, :decidim_author_id, :title, :description) + end + + def reset_column_information + User.reset_column_information + Debate.reset_column_information + Organization.reset_column_information + end +end diff --git a/db/migrate/20240418105547_add_endorsable_to_debates.decidim_debates.rb b/db/migrate/20240418105547_add_endorsable_to_debates.decidim_debates.rb new file mode 100644 index 0000000..a0804d7 --- /dev/null +++ b/db/migrate/20240418105547_add_endorsable_to_debates.decidim_debates.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20200716143929) + +class AddEndorsableToDebates < ActiveRecord::Migration[5.2] + def change + add_column :decidim_debates_debates, :endorsements_count, :integer, null: false, default: 0 + add_index :decidim_debates_debates, :endorsements_count, name: "idx_decidim_debates_debates_on_endorsemnts_count" + end +end diff --git a/db/migrate/20240418105548_add_commentable_counter_cache_to_debates.decidim_debates.rb b/db/migrate/20240418105548_add_commentable_counter_cache_to_debates.decidim_debates.rb new file mode 100644 index 0000000..2dba74d --- /dev/null +++ b/db/migrate/20240418105548_add_commentable_counter_cache_to_debates.decidim_debates.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20200827154116) + +class AddCommentableCounterCacheToDebates < ActiveRecord::Migration[5.2] + def change + add_column :decidim_debates_debates, :comments_count, :integer, null: false, default: 0, index: true + Decidim::Debates::Debate.reset_column_information + + # rubocop:disable Rails/SkipsModelValidations + Decidim::Debates::Debate.includes(:comments).find_each do |debate| + debate.update_columns(comments_count: debate.comments.not_hidden.count) + end + # rubocop:enable Rails/SkipsModelValidations + end +end diff --git a/db/migrate/20240418105549_add_cached_comment_metadata_to_debates.decidim_debates.rb b/db/migrate/20240418105549_add_cached_comment_metadata_to_debates.decidim_debates.rb new file mode 100644 index 0000000..7b20be5 --- /dev/null +++ b/db/migrate/20240418105549_add_cached_comment_metadata_to_debates.decidim_debates.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20200902133452) + +class AddCachedCommentMetadataToDebates < ActiveRecord::Migration[5.2] + def change + add_column :decidim_debates_debates, :last_comment_at, :datetime + add_column :decidim_debates_debates, :last_comment_by_id, :integer + add_column :decidim_debates_debates, :last_comment_by_type, :string + + # rubocop:disable Rails/SkipsModelValidations + Decidim::Debates::Debate.reset_column_information + Decidim::Debates::Debate.includes(comments: [:author, :user_group]).find_each do |debate| + last_comment = debate.comments.order("created_at DESC").first + next unless last_comment + + debate.update_columns( + last_comment_at: last_comment.created_at, + last_comment_by_id: last_comment.decidim_author_id, + last_comment_by_type: last_comment.decidim_author_type + ) + end + # rubocop:enable Rails/SkipsModelValidations + end +end diff --git a/db/migrate/20240418105550_add_scope_to_debates_debate.decidim_debates.rb b/db/migrate/20240418105550_add_scope_to_debates_debate.decidim_debates.rb new file mode 100644 index 0000000..2aa4596 --- /dev/null +++ b/db/migrate/20240418105550_add_scope_to_debates_debate.decidim_debates.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20200930145546) + +class AddScopeToDebatesDebate < ActiveRecord::Migration[5.2] + def change + add_reference :decidim_debates_debates, :decidim_scope, foreign_key: true, index: true + end +end diff --git a/db/migrate/20240418105551_archive_debates.decidim_debates.rb b/db/migrate/20240418105551_archive_debates.decidim_debates.rb new file mode 100644 index 0000000..886ddff --- /dev/null +++ b/db/migrate/20240418105551_archive_debates.decidim_debates.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20201126112752) + +class ArchiveDebates < ActiveRecord::Migration[5.2] + def change + add_column :decidim_debates_debates, :archived_at, :datetime + add_index :decidim_debates_debates, :archived_at + end +end diff --git a/db/migrate/20240418105552_revert_archive_debates.decidim_debates.rb b/db/migrate/20240418105552_revert_archive_debates.decidim_debates.rb new file mode 100644 index 0000000..a543242 --- /dev/null +++ b/db/migrate/20240418105552_revert_archive_debates.decidim_debates.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20210125101735) + +class RevertArchiveDebates < ActiveRecord::Migration[5.2] + def change + remove_index :decidim_debates_debates, :archived_at + remove_column :decidim_debates_debates, :archived_at + end +end diff --git a/db/migrate/20240418105553_add_followable_counter_cache_to_debates.decidim_debates.rb b/db/migrate/20240418105553_add_followable_counter_cache_to_debates.decidim_debates.rb new file mode 100644 index 0000000..a91eb4d --- /dev/null +++ b/db/migrate/20240418105553_add_followable_counter_cache_to_debates.decidim_debates.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20210310120652) + +class AddFollowableCounterCacheToDebates < ActiveRecord::Migration[5.2] + def change + add_column :decidim_debates_debates, :follows_count, :integer, null: false, default: 0, index: true + + reversible do |dir| + dir.up do + Decidim::Debates::Debate.reset_column_information + Decidim::Debates::Debate.find_each do |record| + record.class.reset_counters(record.id, :follows) + end + end + end + end +end diff --git a/db/migrate/20240418105554_add_comments_availability_columns_to_debates_table.decidim_debates.rb b/db/migrate/20240418105554_add_comments_availability_columns_to_debates_table.decidim_debates.rb new file mode 100644 index 0000000..1363e1f --- /dev/null +++ b/db/migrate/20240418105554_add_comments_availability_columns_to_debates_table.decidim_debates.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_debates (originally 20210519201932) + +class AddCommentsAvailabilityColumnsToDebatesTable < ActiveRecord::Migration[6.0] + def change + add_column :decidim_debates_debates, :comments_enabled, :boolean, default: true + reversible do |dir| + dir.up do + execute "UPDATE decidim_debates_debates set comments_enabled = true" + end + end + end +end diff --git a/db/migrate/20240418105555_create_decidim_module_sortitions_sortitions.decidim_sortitions.rb b/db/migrate/20240418105555_create_decidim_module_sortitions_sortitions.decidim_sortitions.rb new file mode 100644 index 0000000..a93957a --- /dev/null +++ b/db/migrate/20240418105555_create_decidim_module_sortitions_sortitions.decidim_sortitions.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20171215161358) + +class CreateDecidimModuleSortitionsSortitions < ActiveRecord::Migration[5.1] + def change + create_table :decidim_module_sortitions_sortitions do |t| + t.references :decidim_feature, index: { name: "index_sortitions__on_feature" } + + t.references :decidim_category, + foreign_key: true, + index: { name: "index_sortitions__on_category" } + + t.integer :decidim_proposals_feature_id, + index: { name: "index_sortitions__on_proposals_feature" } + + t.integer :dice, null: false + t.integer :target_items, null: false + t.timestamp :request_timestamp, null: false + t.jsonb :selected_proposals + + t.timestamps + end + end +end diff --git a/db/migrate/20240418105556_add_witnesses_to_sortitions.decidim_sortitions.rb b/db/migrate/20240418105556_add_witnesses_to_sortitions.decidim_sortitions.rb new file mode 100644 index 0000000..ec846f9 --- /dev/null +++ b/db/migrate/20240418105556_add_witnesses_to_sortitions.decidim_sortitions.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20171220164658) + +class AddWitnessesToSortitions < ActiveRecord::Migration[5.1] + def change + add_column :decidim_module_sortitions_sortitions, :witnesses, :jsonb + end +end diff --git a/db/migrate/20240418105557_add_additional_info_to_sortitions.decidim_sortitions.rb b/db/migrate/20240418105557_add_additional_info_to_sortitions.decidim_sortitions.rb new file mode 100644 index 0000000..160effc --- /dev/null +++ b/db/migrate/20240418105557_add_additional_info_to_sortitions.decidim_sortitions.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20171220164744) + +class AddAdditionalInfoToSortitions < ActiveRecord::Migration[5.1] + def change + add_column :decidim_module_sortitions_sortitions, :additional_info, :jsonb + end +end diff --git a/db/migrate/20240418105558_add_author_to_sortitions.decidim_sortitions.rb b/db/migrate/20240418105558_add_author_to_sortitions.decidim_sortitions.rb new file mode 100644 index 0000000..14775be --- /dev/null +++ b/db/migrate/20240418105558_add_author_to_sortitions.decidim_sortitions.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20180102100101) + +class AddAuthorToSortitions < ActiveRecord::Migration[5.1] + def change + add_reference :decidim_module_sortitions_sortitions, :decidim_author, index: true + end +end diff --git a/db/migrate/20240418105559_add_reference_to_sortitions.decidim_sortitions.rb b/db/migrate/20240418105559_add_reference_to_sortitions.decidim_sortitions.rb new file mode 100644 index 0000000..b51d72e --- /dev/null +++ b/db/migrate/20240418105559_add_reference_to_sortitions.decidim_sortitions.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20180102101128) + +class AddReferenceToSortitions < ActiveRecord::Migration[5.1] + def change + add_column :decidim_module_sortitions_sortitions, :reference, :string + change_column_null :decidim_module_sortitions_sortitions, :reference, false + end +end diff --git a/db/migrate/20240418105560_add_title_to_sortition.decidim_sortitions.rb b/db/migrate/20240418105560_add_title_to_sortition.decidim_sortitions.rb new file mode 100644 index 0000000..9982926 --- /dev/null +++ b/db/migrate/20240418105560_add_title_to_sortition.decidim_sortitions.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20180103082645) + +class AddTitleToSortition < ActiveRecord::Migration[5.1] + def change + add_column :decidim_module_sortitions_sortitions, :title, :jsonb + end +end diff --git a/db/migrate/20240418105561_drop_decidim_category_id_from_sortitions.decidim_sortitions.rb b/db/migrate/20240418105561_drop_decidim_category_id_from_sortitions.decidim_sortitions.rb new file mode 100644 index 0000000..2df9c5c --- /dev/null +++ b/db/migrate/20240418105561_drop_decidim_category_id_from_sortitions.decidim_sortitions.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20180103123055) + +class DropDecidimCategoryIdFromSortitions < ActiveRecord::Migration[5.1] + def up + remove_column :decidim_module_sortitions_sortitions, :decidim_category_id + end + + def down + add_reference :decidim_module_sortitions_sortitions, :decidim_category, + foreign_key: true, + index: { name: "index_sortitions__on_category" } + end +end diff --git a/db/migrate/20240418105562_add_cancel_data_to_sortition.decidim_sortitions.rb b/db/migrate/20240418105562_add_cancel_data_to_sortition.decidim_sortitions.rb new file mode 100644 index 0000000..2c84de0 --- /dev/null +++ b/db/migrate/20240418105562_add_cancel_data_to_sortition.decidim_sortitions.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20180103160301) + +class AddCancelDataToSortition < ActiveRecord::Migration[5.1] + def change + add_column :decidim_module_sortitions_sortitions, :cancel_reason, :jsonb + add_column :decidim_module_sortitions_sortitions, :cancelled_on, :datetime + add_column :decidim_module_sortitions_sortitions, :cancelled_by_user_id, :integer, index: true + end +end diff --git a/db/migrate/20240418105563_make_sortition_reference_nullable.decidim_sortitions.rb b/db/migrate/20240418105563_make_sortition_reference_nullable.decidim_sortitions.rb new file mode 100644 index 0000000..c64b574 --- /dev/null +++ b/db/migrate/20240418105563_make_sortition_reference_nullable.decidim_sortitions.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20180104143054) + +class MakeSortitionReferenceNullable < ActiveRecord::Migration[5.1] + def change + change_column_null :decidim_module_sortitions_sortitions, :reference, true + end +end diff --git a/db/migrate/20240418105564_add_candidate_proposals_to_sortitions.decidim_sortitions.rb b/db/migrate/20240418105564_add_candidate_proposals_to_sortitions.decidim_sortitions.rb new file mode 100644 index 0000000..dc7ce25 --- /dev/null +++ b/db/migrate/20240418105564_add_candidate_proposals_to_sortitions.decidim_sortitions.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20180104145344) + +class AddCandidateProposalsToSortitions < ActiveRecord::Migration[5.1] + def change + add_column :decidim_module_sortitions_sortitions, :candidate_proposals, :jsonb + end +end diff --git a/db/migrate/20240418105565_rename_sortitions_table.decidim_sortitions.rb b/db/migrate/20240418105565_rename_sortitions_table.decidim_sortitions.rb new file mode 100644 index 0000000..06a7f77 --- /dev/null +++ b/db/migrate/20240418105565_rename_sortitions_table.decidim_sortitions.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20180108132729) + +class RenameSortitionsTable < ActiveRecord::Migration[5.1] + def change + rename_table :decidim_module_sortitions_sortitions, :decidim_sortitions_sortitions + end +end diff --git a/db/migrate/20240418105566_fix_sortitions_feature.decidim_sortitions.rb b/db/migrate/20240418105566_fix_sortitions_feature.decidim_sortitions.rb new file mode 100644 index 0000000..8796bb9 --- /dev/null +++ b/db/migrate/20240418105566_fix_sortitions_feature.decidim_sortitions.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20180322082150) + +class FixSortitionsFeature < ActiveRecord::Migration[5.1] + def up + rename_column :decidim_sortitions_sortitions, :decidim_feature_id, :decidim_component_id + end + + def down + rename_column :decidim_sortitions_sortitions, :decidim_component_id, :decidim_feature_id + end +end diff --git a/db/migrate/20240418105567_fix_sortitions_proposal_feature.decidim_sortitions.rb b/db/migrate/20240418105567_fix_sortitions_proposal_feature.decidim_sortitions.rb new file mode 100644 index 0000000..564a19e --- /dev/null +++ b/db/migrate/20240418105567_fix_sortitions_proposal_feature.decidim_sortitions.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20180322085145) + +class FixSortitionsProposalFeature < ActiveRecord::Migration[5.1] + def up + rename_column :decidim_sortitions_sortitions, :decidim_proposals_feature_id, :decidim_proposals_component_id + end + + def down + rename_column :decidim_sortitions_sortitions, :decidim_proposals_component_id, :decidim_proposals_feature_id + end +end diff --git a/db/migrate/20240418105568_make_sortitions_authors_polymorphic.decidim_sortitions.rb b/db/migrate/20240418105568_make_sortitions_authors_polymorphic.decidim_sortitions.rb new file mode 100644 index 0000000..759b505 --- /dev/null +++ b/db/migrate/20240418105568_make_sortitions_authors_polymorphic.decidim_sortitions.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20181017110803) + +class MakeSortitionsAuthorsPolymorphic < ActiveRecord::Migration[5.2] + class User < ApplicationRecord + self.table_name = :decidim_users + self.inheritance_column = nil # disable the default inheritance + + default_scope { where(type: "Decidim::User") } + end + + class Sortition < ApplicationRecord + include Decidim::HasComponent + + self.table_name = :decidim_sortitions_sortitions + end + + def change + add_column :decidim_sortitions_sortitions, :decidim_author_type, :string + + Sortition.find_each do |sortition| + author = User.find_by(id: sortition.decidim_author_id) if sortition.decidim_author_id.present? + author ||= sortition.organization + sortition.update!( + decidim_author_type: author.is_a?(User) ? author.type : "Decidim::Organization", + decidim_author_id: author.id + ) + end + + add_index :decidim_sortitions_sortitions, + [:decidim_author_id, :decidim_author_type], + name: "index_decidim_sortitions_sortitions_on_decidim_author" + change_column_null :decidim_sortitions_sortitions, :decidim_author_id, false + change_column_null :decidim_sortitions_sortitions, :decidim_author_type, false + end +end diff --git a/db/migrate/20240418105569_index_foreign_keys_in_decidim_sortitions_sortitions.decidim_sortitions.rb b/db/migrate/20240418105569_index_foreign_keys_in_decidim_sortitions_sortitions.decidim_sortitions.rb new file mode 100644 index 0000000..1a8a902 --- /dev/null +++ b/db/migrate/20240418105569_index_foreign_keys_in_decidim_sortitions_sortitions.decidim_sortitions.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20200320105926) + +class IndexForeignKeysInDecidimSortitionsSortitions < ActiveRecord::Migration[5.2] + def change + add_index :decidim_sortitions_sortitions, :cancelled_by_user_id + end +end diff --git a/db/migrate/20240418105570_add_commentable_counter_cache_to_sortitions.decidim_sortitions.rb b/db/migrate/20240418105570_add_commentable_counter_cache_to_sortitions.decidim_sortitions.rb new file mode 100644 index 0000000..5a5b44f --- /dev/null +++ b/db/migrate/20240418105570_add_commentable_counter_cache_to_sortitions.decidim_sortitions.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_sortitions (originally 20200827154036) + +class AddCommentableCounterCacheToSortitions < ActiveRecord::Migration[5.2] + def change + add_column :decidim_sortitions_sortitions, :comments_count, :integer, null: false, default: 0, index: true + Decidim::Sortitions::Sortition.reset_column_information + Decidim::Sortitions::Sortition.find_each(&:update_comments_count) + end +end diff --git a/db/migrate/20240418105571_create_decidim_blogs_posts.decidim_blogs.rb b/db/migrate/20240418105571_create_decidim_blogs_posts.decidim_blogs.rb new file mode 100644 index 0000000..7fe6e36 --- /dev/null +++ b/db/migrate/20240418105571_create_decidim_blogs_posts.decidim_blogs.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_blogs (originally 20171129131353) + +class CreateDecidimBlogsPosts < ActiveRecord::Migration[5.0] + def change + create_table :decidim_blogs_posts do |t| + t.jsonb :title + t.jsonb :body + t.references :decidim_component, index: true + t.timestamps + end + end +end diff --git a/db/migrate/20240418105572_add_author_to_decidim_blogs_posts.decidim_blogs.rb b/db/migrate/20240418105572_add_author_to_decidim_blogs_posts.decidim_blogs.rb new file mode 100644 index 0000000..3c6b44d --- /dev/null +++ b/db/migrate/20240418105572_add_author_to_decidim_blogs_posts.decidim_blogs.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_blogs (originally 20171211084630) + +class AddAuthorToDecidimBlogsPosts < ActiveRecord::Migration[5.1] + def change + add_column :decidim_blogs_posts, :decidim_author_id, :integer, index: true + end +end diff --git a/db/migrate/20240418105573_make_blogposts_authors_polymorphics.decidim_blogs.rb b/db/migrate/20240418105573_make_blogposts_authors_polymorphics.decidim_blogs.rb new file mode 100644 index 0000000..c678a9e --- /dev/null +++ b/db/migrate/20240418105573_make_blogposts_authors_polymorphics.decidim_blogs.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true +# This migration comes from decidim_blogs (originally 20181017084519) + +class MakeBlogpostsAuthorsPolymorphics < ActiveRecord::Migration[5.2] + class Post < ApplicationRecord + self.table_name = :decidim_blogs_posts + + include Decidim::HasComponent + end + + def change + add_column :decidim_blogs_posts, :decidim_author_type, :string + + Post.reset_column_information + Post.find_each do |post| + if post.decidim_author_id.present? + post.decidim_author_type = "Decidim::UserBaseEntity" + else + post.decidim_author_id = post.organization.id + post.decidim_author_type = "Decidim::Organization" + end + post.save! + end + + add_index :decidim_blogs_posts, + [:decidim_author_id, :decidim_author_type], + name: "index_decidim_blogs_posts_on_decidim_author" + change_column_null :decidim_blogs_posts, :decidim_author_id, false + change_column_null :decidim_blogs_posts, :decidim_author_type, false + + Post.reset_column_information + end +end diff --git a/db/migrate/20240418105574_add_user_group_author_to_blogs.decidim_blogs.rb b/db/migrate/20240418105574_add_user_group_author_to_blogs.decidim_blogs.rb new file mode 100644 index 0000000..512a540 --- /dev/null +++ b/db/migrate/20240418105574_add_user_group_author_to_blogs.decidim_blogs.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_blogs (originally 20191212162606) + +class AddUserGroupAuthorToBlogs < ActiveRecord::Migration[5.2] + def change + add_column :decidim_blogs_posts, :decidim_user_group_id, :integer + end +end diff --git a/db/migrate/20240418105575_add_endorsements_counter_cache_to_blogs.decidim_blogs.rb b/db/migrate/20240418105575_add_endorsements_counter_cache_to_blogs.decidim_blogs.rb new file mode 100644 index 0000000..c457d7d --- /dev/null +++ b/db/migrate/20240418105575_add_endorsements_counter_cache_to_blogs.decidim_blogs.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_blogs (originally 20200128094730) + +class AddEndorsementsCounterCacheToBlogs < ActiveRecord::Migration[5.2] + def change + add_column :decidim_blogs_posts, :endorsements_count, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20240418105576_index_foreign_keys_in_decidim_blogs_posts.decidim_blogs.rb b/db/migrate/20240418105576_index_foreign_keys_in_decidim_blogs_posts.decidim_blogs.rb new file mode 100644 index 0000000..fc72c4b --- /dev/null +++ b/db/migrate/20240418105576_index_foreign_keys_in_decidim_blogs_posts.decidim_blogs.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# This migration comes from decidim_blogs (originally 20200320105910) + +class IndexForeignKeysInDecidimBlogsPosts < ActiveRecord::Migration[5.2] + def change + add_index :decidim_blogs_posts, :decidim_user_group_id + end +end diff --git a/db/migrate/20240418105577_add_commentable_counter_cache_to_posts.decidim_blogs.rb b/db/migrate/20240418105577_add_commentable_counter_cache_to_posts.decidim_blogs.rb new file mode 100644 index 0000000..5100ffc --- /dev/null +++ b/db/migrate/20240418105577_add_commentable_counter_cache_to_posts.decidim_blogs.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_blogs (originally 20200827153709) + +class AddCommentableCounterCacheToPosts < ActiveRecord::Migration[5.2] + def change + add_column :decidim_blogs_posts, :comments_count, :integer, null: false, default: 0, index: true + Decidim::Blogs::Post.reset_column_information + Decidim::Blogs::Post.find_each(&:update_comments_count) + end +end diff --git a/db/migrate/20240418105578_add_followable_counter_cache_to_blogs.decidim_blogs.rb b/db/migrate/20240418105578_add_followable_counter_cache_to_blogs.decidim_blogs.rb new file mode 100644 index 0000000..6542c75 --- /dev/null +++ b/db/migrate/20240418105578_add_followable_counter_cache_to_blogs.decidim_blogs.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_blogs (originally 20210310120514) + +class AddFollowableCounterCacheToBlogs < ActiveRecord::Migration[5.2] + def change + add_column :decidim_blogs_posts, :follows_count, :integer, null: false, default: 0, index: true + + reversible do |dir| + dir.up do + Decidim::Blogs::Post.reset_column_information + Decidim::Blogs::Post.find_each do |record| + record.class.reset_counters(record.id, :follows) + end + end + end + end +end diff --git a/db/migrate/20240418105579_add_published_at_to_decidim_blogs_posts.decidim_blogs.rb b/db/migrate/20240418105579_add_published_at_to_decidim_blogs_posts.decidim_blogs.rb new file mode 100644 index 0000000..09d06f1 --- /dev/null +++ b/db/migrate/20240418105579_add_published_at_to_decidim_blogs_posts.decidim_blogs.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_blogs (originally 20220812122940) + +class AddPublishedAtToDecidimBlogsPosts < ActiveRecord::Migration[6.1] + class Post < ApplicationRecord + self.table_name = :decidim_blogs_posts + end + + def change + add_column :decidim_blogs_posts, :published_at, :datetime + + reversible do |direction| + direction.up do + Post.update_all("published_at = created_at") # rubocop:disable Rails/SkipsModelValidations + end + end + end +end diff --git a/db/migrate/20240418115505_create_decidim_term_customizer_translation_sets.decidim_term_customizer.rb b/db/migrate/20240418115505_create_decidim_term_customizer_translation_sets.decidim_term_customizer.rb new file mode 100644 index 0000000..c0fc109 --- /dev/null +++ b/db/migrate/20240418115505_create_decidim_term_customizer_translation_sets.decidim_term_customizer.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_term_customizer (originally 20190217132503) + +class CreateDecidimTermCustomizerTranslationSets < ActiveRecord::Migration[5.2] + def change + create_table :decidim_term_customizer_translation_sets do |t| + t.jsonb :name + end + end +end diff --git a/db/migrate/20240418115506_create_decidim_term_customizer_translations.decidim_term_customizer.rb b/db/migrate/20240418115506_create_decidim_term_customizer_translations.decidim_term_customizer.rb new file mode 100644 index 0000000..90bced4 --- /dev/null +++ b/db/migrate/20240418115506_create_decidim_term_customizer_translations.decidim_term_customizer.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim_term_customizer (originally 20190217132654) + +class CreateDecidimTermCustomizerTranslations < ActiveRecord::Migration[5.2] + def change + create_table :decidim_term_customizer_translations do |t| + t.string :locale + t.string :key + t.text :value + + t.references( + :translation_set, + null: false, + foreign_key: { to_table: :decidim_term_customizer_translation_sets }, + index: { name: "decidim_term_customizer_translation_translation_set" } + ) + end + end +end diff --git a/db/migrate/20240418115507_create_decidim_term_customizer_constraints.decidim_term_customizer.rb b/db/migrate/20240418115507_create_decidim_term_customizer_constraints.decidim_term_customizer.rb new file mode 100644 index 0000000..c027259 --- /dev/null +++ b/db/migrate/20240418115507_create_decidim_term_customizer_constraints.decidim_term_customizer.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_term_customizer (originally 20190217132726) + +class CreateDecidimTermCustomizerConstraints < ActiveRecord::Migration[5.2] + def change + create_table :decidim_term_customizer_constraints do |t| + t.references :decidim_organization, null: false, foreign_key: true, index: { name: "decidim_term_customizer_constraint_organization" } + t.references :subject, polymorphic: true, index: { name: "decidim_term_customizer_constraint_subject" } + + t.references( + :translation_set, + null: false, + foreign_key: { to_table: :decidim_term_customizer_translation_sets }, + index: { name: "decidim_term_customizer_constraint_translation_set" } + ) + end + end +end diff --git a/db/migrate/20240418120143_create_decidim_awesome_config.decidim_decidim_awesome.rb b/db/migrate/20240418120143_create_decidim_awesome_config.decidim_decidim_awesome.rb new file mode 100644 index 0000000..fccf913 --- /dev/null +++ b/db/migrate/20240418120143_create_decidim_awesome_config.decidim_decidim_awesome.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20200324170000) + +class CreateDecidimAwesomeConfig < ActiveRecord::Migration[5.2] + def change + create_table :decidim_awesome_config do |t| + t.jsonb :var + t.jsonb :value + t.integer :decidim_organization_id, + foreign_key: true, + index: { name: "index_decidim_awesome_on_decidim_organization_id" } + + t.timestamps + t.index [:var, :decidim_organization_id], name: "index_decidim_awesome_organization_var", unique: true + end + end +end diff --git a/db/migrate/20240418120144_create_awesome_editor_images.decidim_decidim_awesome.rb b/db/migrate/20240418120144_create_awesome_editor_images.decidim_decidim_awesome.rb new file mode 100644 index 0000000..5a39901 --- /dev/null +++ b/db/migrate/20240418120144_create_awesome_editor_images.decidim_decidim_awesome.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20200324230936) + +class CreateAwesomeEditorImages < ActiveRecord::Migration[5.2] + def change + create_table :decidim_awesome_editor_images do |t| + t.string :image + t.string :path + t.references :decidim_author, null: false, foreign_key: { to_table: :decidim_users }, index: { name: "decidim_awesome_editor_images_author" } + t.references :decidim_organization, null: false, foreign_key: true, index: { name: "decidim_awesome_editor_images_constraint_organization" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240418120145_create_decidim_awesome_config_constraints.decidim_decidim_awesome.rb b/db/migrate/20240418120145_create_decidim_awesome_config_constraints.decidim_decidim_awesome.rb new file mode 100644 index 0000000..8ef6bc0 --- /dev/null +++ b/db/migrate/20240418120145_create_decidim_awesome_config_constraints.decidim_decidim_awesome.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20200403142257) + +class CreateDecidimAwesomeConfigConstraints < ActiveRecord::Migration[5.2] + def change + create_table :decidim_awesome_config_constraints do |t| + t.jsonb :settings + + t.references :decidim_awesome_config, null: false, foreign_key: { to_table: :decidim_awesome_config }, index: { name: "decidim_awesome_config_constraints_config" } + t.timestamps + t.index [:settings, :decidim_awesome_config_id], name: "index_decidim_awesome_settings_awesome_config", unique: true + end + end +end diff --git a/db/migrate/20240418120146_change_awesome_config_var_type.decidim_decidim_awesome.rb b/db/migrate/20240418120146_change_awesome_config_var_type.decidim_decidim_awesome.rb new file mode 100644 index 0000000..d1ef8db --- /dev/null +++ b/db/migrate/20240418120146_change_awesome_config_var_type.decidim_decidim_awesome.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20210628150825) + +class ChangeAwesomeConfigVarType < ActiveRecord::Migration[5.2] + def change + change_column :decidim_awesome_config, :var, :string + + Decidim::DecidimAwesome::AwesomeConfig.find_each do |config| + config.var.gsub!('"', "") + config.save! + end + end +end diff --git a/db/migrate/20240418120147_create_decidim_awesome_vote_weights.decidim_decidim_awesome.rb b/db/migrate/20240418120147_create_decidim_awesome_vote_weights.decidim_decidim_awesome.rb new file mode 100644 index 0000000..64482b4 --- /dev/null +++ b/db/migrate/20240418120147_create_decidim_awesome_vote_weights.decidim_decidim_awesome.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20231006113837) + +class CreateDecidimAwesomeVoteWeights < ActiveRecord::Migration[6.0] + def change + create_table :decidim_awesome_vote_weights do |t| + # this might be polymorphic in the future (if other types of votes are supported) + t.references :proposal_vote, null: false, index: { name: "decidim_awesome_proposals_weights_vote" } + + t.integer :weight, null: false, default: 1 + t.timestamps + end + end +end diff --git a/db/migrate/20240418120148_create_decidim_awesome_proposal_extra_fields.decidim_decidim_awesome.rb b/db/migrate/20240418120148_create_decidim_awesome_proposal_extra_fields.decidim_decidim_awesome.rb new file mode 100644 index 0000000..781fd3f --- /dev/null +++ b/db/migrate/20240418120148_create_decidim_awesome_proposal_extra_fields.decidim_decidim_awesome.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20231006113841) + +class CreateDecidimAwesomeProposalExtraFields < ActiveRecord::Migration[6.0] + def change + create_table :decidim_awesome_proposal_extra_fields do |t| + # this might be polymorphic in the future (if other types of votes are supported) + t.references :decidim_proposal, null: false, index: { name: "decidim_awesome_extra_fields_on_proposal" } + + t.jsonb :vote_weight_totals + t.integer :weight_total, default: 0 + t.timestamps + end + end +end diff --git a/db/migrate/20240418120149_rename_editor_images_awesome_config.decidim_decidim_awesome.rb b/db/migrate/20240418120149_rename_editor_images_awesome_config.decidim_decidim_awesome.rb new file mode 100644 index 0000000..a556be3 --- /dev/null +++ b/db/migrate/20240418120149_rename_editor_images_awesome_config.decidim_decidim_awesome.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20240306175331) + +class RenameEditorImagesAwesomeConfig < ActiveRecord::Migration[6.1] + class AwesomeConfig < ApplicationRecord + self.table_name = :decidim_awesome_config + end + + # rubocop:disable Rails/SkipsModelValidations + def up + AwesomeConfig.where(var: :allow_images_in_full_editor).update_all(var: :allow_images_in_editors) + AwesomeConfig.where(var: :allow_images_in_small_editor).destroy_all + end + + def down + AwesomeConfig.where(var: :allow_images_in_editors).update_all(var: :allow_images_in_full_editor) + end + # rubocop:enable Rails/SkipsModelValidations +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 0000000..e5180a8 --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,1806 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# This file is the source Rails uses to define your schema when running `bin/rails +# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to +# be faster and is potentially less error prone than running all of your +# migrations from scratch. Old migrations may fail to apply correctly if those +# migrations use external dependencies or application code. +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 2024_04_18_120149) do + + # These are extensions that must be enabled in order to support this database + enable_extension "ltree" + enable_extension "pg_trgm" + enable_extension "plpgsql" + + create_table "active_storage_attachments", force: :cascade do |t| + t.string "name", null: false + t.string "record_type", null: false + t.bigint "record_id", null: false + t.bigint "blob_id", null: false + t.datetime "created_at", null: false + t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id" + t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true + end + + create_table "active_storage_blobs", force: :cascade do |t| + t.string "key", null: false + t.string "filename", null: false + t.string "content_type" + t.text "metadata" + t.bigint "byte_size", null: false + t.string "checksum", null: false + t.datetime "created_at", null: false + t.string "service_name", null: false + t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true + end + + create_table "active_storage_variant_records", force: :cascade do |t| + t.bigint "blob_id", null: false + t.string "variation_digest", null: false + t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true + end + + create_table "decidim_accountability_results", id: :serial, force: :cascade do |t| + t.jsonb "title" + t.jsonb "description" + t.string "reference" + t.date "start_date" + t.date "end_date" + t.decimal "progress", precision: 5, scale: 2 + t.integer "parent_id" + t.integer "decidim_accountability_status_id" + t.integer "decidim_component_id" + t.integer "decidim_scope_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "children_count", default: 0 + t.float "weight", default: 1.0 + t.string "external_id" + t.integer "comments_count", default: 0, null: false + t.index ["decidim_accountability_status_id"], name: "decidim_accountability_results_on_status_id" + t.index ["decidim_component_id"], name: "index_decidim_accountability_results_on_decidim_component_id" + t.index ["decidim_scope_id"], name: "index_decidim_accountability_results_on_decidim_scope_id" + t.index ["external_id"], name: "index_decidim_accountability_results_on_external_id" + t.index ["parent_id"], name: "decidim_accountability_results_on_parent_id" + end + + create_table "decidim_accountability_statuses", id: :serial, force: :cascade do |t| + t.string "key" + t.jsonb "name" + t.integer "decidim_component_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.jsonb "description" + t.integer "progress" + t.index ["decidim_component_id"], name: "index_decidim_accountability_statuses_on_decidim_component_id" + end + + create_table "decidim_accountability_timeline_entries", id: :serial, force: :cascade do |t| + t.date "entry_date" + t.jsonb "description" + t.integer "decidim_accountability_result_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.jsonb "title" + t.index ["decidim_accountability_result_id"], name: "index_decidim_accountability_timeline_entries_on_results_id" + t.index ["entry_date"], name: "index_decidim_accountability_timeline_entries_on_entry_date" + end + + create_table "decidim_action_logs", force: :cascade do |t| + t.bigint "decidim_organization_id", null: false + t.bigint "decidim_user_id", null: false + t.bigint "decidim_component_id" + t.string "resource_type", null: false + t.bigint "resource_id", null: false + t.string "participatory_space_type" + t.bigint "participatory_space_id" + t.string "action", null: false + t.jsonb "extra" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "version_id" + t.string "visibility", default: "admin-only" + t.integer "decidim_scope_id" + t.integer "decidim_area_id" + t.index ["created_at"], name: "index_decidim_action_logs_on_created_at" + t.index ["decidim_area_id"], name: "index_decidim_action_logs_on_decidim_area_id" + t.index ["decidim_component_id"], name: "index_action_logs_on_component_id" + t.index ["decidim_organization_id"], name: "index_action_logs_on_organization_id" + t.index ["decidim_scope_id"], name: "index_decidim_action_logs_on_decidim_scope_id" + t.index ["decidim_user_id"], name: "index_action_logs_on_user_id" + t.index ["participatory_space_type", "participatory_space_id"], name: "index_action_logs_on_space_type_and_id" + t.index ["resource_type", "resource_id"], name: "index_action_logs_on_resource_type_and_id" + t.index ["version_id"], name: "index_decidim_action_logs_on_version_id" + t.index ["visibility"], name: "index_decidim_action_logs_on_visibility" + end + + create_table "decidim_amendments", force: :cascade do |t| + t.bigint "decidim_user_id", null: false + t.string "decidim_amendable_type" + t.bigint "decidim_amendable_id" + t.string "decidim_emendation_type" + t.bigint "decidim_emendation_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "state", default: 0, null: false + t.index ["decidim_amendable_id", "decidim_amendable_type"], name: "index_on_amendable" + t.index ["decidim_emendation_id"], name: "index_decidim_amendments_on_decidim_emendation_id" + t.index ["decidim_user_id", "decidim_amendable_id", "decidim_amendable_type"], name: "index_on_amender_and_amendable" + t.index ["decidim_user_id"], name: "index_decidim_amendments_on_decidim_user_id" + end + + create_table "decidim_area_types", force: :cascade do |t| + t.bigint "decidim_organization_id" + t.jsonb "name", null: false + t.jsonb "plural", null: false + t.index ["decidim_organization_id"], name: "index_decidim_area_types_on_decidim_organization_id" + end + + create_table "decidim_areas", force: :cascade do |t| + t.jsonb "name" + t.bigint "area_type_id" + t.bigint "decidim_organization_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["area_type_id"], name: "index_decidim_areas_on_area_type_id" + t.index ["decidim_organization_id"], name: "index_decidim_areas_on_decidim_organization_id" + end + + create_table "decidim_assemblies", id: :serial, force: :cascade do |t| + t.string "slug", null: false + t.string "hashtag" + t.integer "decidim_organization_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.jsonb "title", null: false + t.jsonb "subtitle", null: false + t.jsonb "short_description", null: false + t.jsonb "description", null: false + t.string "hero_image" + t.string "banner_image" + t.boolean "promoted", default: false + t.datetime "published_at" + t.jsonb "developer_group" + t.jsonb "meta_scope" + t.jsonb "local_area" + t.jsonb "target" + t.jsonb "participatory_scope" + t.jsonb "participatory_structure" + t.boolean "show_statistics", default: false + t.integer "decidim_scope_id" + t.boolean "scopes_enabled", default: true, null: false + t.boolean "private_space", default: false + t.string "reference" + t.bigint "decidim_area_id" + t.bigint "parent_id" + t.ltree "parents_path" + t.integer "children_count", default: 0 + t.jsonb "purpose_of_action" + t.jsonb "composition" + t.date "creation_date" + t.string "created_by" + t.jsonb "created_by_other" + t.date "duration" + t.date "included_at" + t.date "closing_date" + t.jsonb "closing_date_reason" + t.jsonb "internal_organisation" + t.boolean "is_transparent", default: true + t.jsonb "special_features" + t.string "twitter_handler" + t.string "instagram_handler" + t.string "facebook_handler" + t.string "youtube_handler" + t.string "github_handler" + t.bigint "decidim_assemblies_type_id" + t.integer "weight", default: 1, null: false + t.integer "follows_count", default: 0, null: false + t.jsonb "announcement" + t.index ["decidim_area_id"], name: "index_decidim_assemblies_on_decidim_area_id" + t.index ["decidim_assemblies_type_id"], name: "index_decidim_assemblies_on_decidim_assemblies_type_id" + t.index ["decidim_organization_id", "slug"], name: "index_unique_assembly_slug_and_organization", unique: true + t.index ["decidim_organization_id"], name: "index_decidim_assemblies_on_decidim_organization_id" + t.index ["decidim_scope_id"], name: "index_decidim_assemblies_on_decidim_scope_id" + t.index ["parent_id"], name: "decidim_assemblies_assemblies_on_parent_id" + end + + create_table "decidim_assemblies_settings", force: :cascade do |t| + t.boolean "enable_organization_chart", default: true + t.bigint "decidim_organization_id" + t.index ["decidim_organization_id"], name: "index_decidim_assemblies_settings_on_decidim_organization_id" + end + + create_table "decidim_assemblies_types", force: :cascade do |t| + t.jsonb "title", null: false + t.integer "decidim_organization_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_organization_id"], name: "index_decidim_assemblies_types_on_decidim_organization_id" + end + + create_table "decidim_assembly_members", force: :cascade do |t| + t.bigint "decidim_assembly_id" + t.integer "weight", default: 0, null: false + t.string "full_name" + t.string "gender" + t.date "birthday" + t.string "birthplace" + t.date "designation_date" + t.string "position" + t.string "position_other" + t.date "ceased_date" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.bigint "decidim_user_id" + t.index ["decidim_assembly_id"], name: "index_decidim_assembly_members_on_decidim_assembly_id" + t.index ["decidim_user_id"], name: "index_decidim_assembly_members_on_decidim_user_id" + t.index ["weight", "created_at"], name: "index_decidim_assembly_members_on_weight_and_created_at" + end + + create_table "decidim_assembly_user_roles", force: :cascade do |t| + t.integer "decidim_user_id" + t.integer "decidim_assembly_id" + t.string "role" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_assembly_id", "decidim_user_id", "role"], name: "index_unique_user_and_assembly_role", unique: true + t.index ["decidim_user_id"], name: "index_decidim_assembly_user_roles_on_decidim_user_id" + end + + create_table "decidim_attachment_collections", force: :cascade do |t| + t.jsonb "name", null: false + t.jsonb "description", null: false + t.integer "weight", default: 0, null: false + t.string "collection_for_type", null: false + t.bigint "collection_for_id", null: false + t.index ["collection_for_type", "collection_for_id"], name: "decidim_attachment_collections_collection_for_id_and_type" + end + + create_table "decidim_attachments", id: :serial, force: :cascade do |t| + t.jsonb "title", null: false + t.jsonb "description" + t.string "file" + t.string "content_type", null: false + t.string "file_size", null: false + t.integer "attached_to_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "attached_to_type", null: false + t.integer "weight", default: 0, null: false + t.integer "attachment_collection_id" + t.index ["attached_to_id", "attached_to_type"], name: "index_decidim_attachments_on_attached_to" + t.index ["attachment_collection_id"], name: "index_decidim_attachments_on_attachment_collection_id" + end + + create_table "decidim_authorization_transfer_records", force: :cascade do |t| + t.bigint "transfer_id", null: false + t.string "resource_type", null: false + t.bigint "resource_id", null: false + t.datetime "created_at", null: false + t.index ["resource_type", "resource_id"], name: "index_decidim_authorization_transfer_records_on_resource" + t.index ["transfer_id"], name: "index_decidim_authorization_transfer_records_on_transfer_id" + end + + create_table "decidim_authorization_transfers", force: :cascade do |t| + t.bigint "user_id", null: false + t.bigint "source_user_id", null: false + t.bigint "authorization_id", null: false + t.datetime "created_at", null: false + t.index ["authorization_id"], name: "index_decidim_authorization_transfers_on_authorization_id" + t.index ["source_user_id"], name: "index_decidim_authorization_transfers_on_source_user_id" + t.index ["user_id"], name: "index_decidim_authorization_transfers_on_user_id" + end + + create_table "decidim_authorizations", id: :serial, force: :cascade do |t| + t.string "name", null: false + t.jsonb "metadata" + t.integer "decidim_user_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "unique_id" + t.datetime "granted_at" + t.jsonb "verification_metadata", default: {} + t.string "verification_attachment" + t.index ["decidim_user_id", "name"], name: "index_decidim_authorizations_on_decidim_user_id_and_name", unique: true + t.index ["decidim_user_id"], name: "index_decidim_authorizations_on_decidim_user_id" + t.index ["unique_id"], name: "index_decidim_authorizations_on_unique_id" + end + + create_table "decidim_awesome_config", force: :cascade do |t| + t.string "var" + t.jsonb "value" + t.integer "decidim_organization_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_organization_id"], name: "index_decidim_awesome_on_decidim_organization_id" + t.index ["var", "decidim_organization_id"], name: "index_decidim_awesome_organization_var", unique: true + end + + create_table "decidim_awesome_config_constraints", force: :cascade do |t| + t.jsonb "settings" + t.bigint "decidim_awesome_config_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_awesome_config_id"], name: "decidim_awesome_config_constraints_config" + t.index ["settings", "decidim_awesome_config_id"], name: "index_decidim_awesome_settings_awesome_config", unique: true + end + + create_table "decidim_awesome_editor_images", force: :cascade do |t| + t.string "image" + t.string "path" + t.bigint "decidim_author_id", null: false + t.bigint "decidim_organization_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_author_id"], name: "decidim_awesome_editor_images_author" + t.index ["decidim_organization_id"], name: "decidim_awesome_editor_images_constraint_organization" + end + + create_table "decidim_awesome_proposal_extra_fields", force: :cascade do |t| + t.bigint "decidim_proposal_id", null: false + t.jsonb "vote_weight_totals" + t.integer "weight_total", default: 0 + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["decidim_proposal_id"], name: "decidim_awesome_extra_fields_on_proposal" + end + + create_table "decidim_awesome_vote_weights", force: :cascade do |t| + t.bigint "proposal_vote_id", null: false + t.integer "weight", default: 1, null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["proposal_vote_id"], name: "decidim_awesome_proposals_weights_vote" + end + + create_table "decidim_blogs_posts", id: :serial, force: :cascade do |t| + t.jsonb "title" + t.jsonb "body" + t.integer "decidim_component_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "decidim_author_id", null: false + t.string "decidim_author_type", null: false + t.integer "decidim_user_group_id" + t.integer "endorsements_count", default: 0, null: false + t.integer "comments_count", default: 0, null: false + t.integer "follows_count", default: 0, null: false + t.datetime "published_at" + t.index ["decidim_author_id", "decidim_author_type"], name: "index_decidim_blogs_posts_on_decidim_author" + t.index ["decidim_component_id"], name: "index_decidim_blogs_posts_on_decidim_component_id" + t.index ["decidim_user_group_id"], name: "index_decidim_blogs_posts_on_decidim_user_group_id" + end + + create_table "decidim_budgets_budgets", id: :serial, force: :cascade do |t| + t.jsonb "title" + t.integer "weight", default: 0, null: false + t.jsonb "description" + t.integer "total_budget", default: 0 + t.integer "decidim_component_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.bigint "decidim_scope_id" + t.index ["decidim_component_id"], name: "index_decidim_budgets_budgets_on_decidim_component_id" + t.index ["decidim_scope_id"], name: "index_decidim_budgets_budgets_on_decidim_scope_id" + end + + create_table "decidim_budgets_line_items", id: :serial, force: :cascade do |t| + t.integer "decidim_order_id" + t.integer "decidim_project_id" + t.index ["decidim_order_id", "decidim_project_id"], name: "decidim_budgets_line_items_order_project_unique", unique: true + t.index ["decidim_order_id"], name: "index_decidim_budgets_line_items_on_decidim_order_id" + t.index ["decidim_project_id"], name: "index_decidim_budgets_line_items_on_decidim_project_id" + end + + create_table "decidim_budgets_orders", id: :serial, force: :cascade do |t| + t.integer "decidim_user_id" + t.datetime "checked_out_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.bigint "decidim_budgets_budget_id" + t.index ["decidim_budgets_budget_id"], name: "index_decidim_budgets_orders_on_decidim_budgets_budget_id" + t.index ["decidim_user_id"], name: "index_decidim_budgets_orders_on_decidim_user_id" + end + + create_table "decidim_budgets_projects", id: :serial, force: :cascade do |t| + t.jsonb "title" + t.jsonb "description" + t.bigint "budget_amount", null: false + t.integer "decidim_scope_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "reference" + t.bigint "decidim_budgets_budget_id" + t.date "selected_at" + t.integer "comments_count", default: 0, null: false + t.integer "follows_count", default: 0, null: false + t.text "address" + t.float "latitude" + t.float "longitude" + t.index ["decidim_budgets_budget_id"], name: "index_decidim_budgets_projects_on_decidim_budgets_budget_id" + t.index ["decidim_scope_id"], name: "index_decidim_budgets_projects_on_decidim_scope_id" + end + + create_table "decidim_categories", id: :serial, force: :cascade do |t| + t.jsonb "name", null: false + t.jsonb "description" + t.integer "parent_id" + t.integer "decidim_participatory_space_id" + t.string "decidim_participatory_space_type" + t.integer "weight", default: 0, null: false + t.index ["decidim_participatory_space_id", "decidim_participatory_space_type"], name: "index_decidim_categories_on_decidim_participatory_space" + t.index ["parent_id"], name: "index_decidim_categories_on_parent_id" + end + + create_table "decidim_categorizations", force: :cascade do |t| + t.bigint "decidim_category_id", null: false + t.string "categorizable_type", null: false + t.bigint "categorizable_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["categorizable_type", "categorizable_id"], name: "decidim_categorizations_categorizable_id_and_type" + t.index ["decidim_category_id"], name: "index_decidim_categorizations_on_decidim_category_id" + end + + create_table "decidim_coauthorships", force: :cascade do |t| + t.bigint "decidim_author_id", null: false + t.bigint "decidim_user_group_id" + t.string "coauthorable_type" + t.bigint "coauthorable_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "decidim_author_type", null: false + t.index ["coauthorable_type", "coauthorable_id"], name: "index_coauthorable_on_coauthorship" + t.index ["decidim_author_id", "decidim_author_type"], name: "index_decidim_coauthorships_on_decidim_author" + t.index ["decidim_user_group_id"], name: "index_user_group_on_coauthorsihp" + end + + create_table "decidim_comments_comment_votes", id: :serial, force: :cascade do |t| + t.integer "weight", null: false + t.integer "decidim_comment_id", null: false + t.integer "decidim_author_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "decidim_author_type", null: false + t.index ["decidim_author_id", "decidim_author_type"], name: "index_decidim_comments_comment_votes_on_decidim_author" + t.index ["decidim_author_id"], name: "decidim_comments_comment_vote_author" + t.index ["decidim_comment_id", "decidim_author_id"], name: "decidim_comments_comment_vote_comment_author_unique", unique: true + t.index ["decidim_comment_id"], name: "decidim_comments_comment_vote_comment" + end + + create_table "decidim_comments_comments", id: :serial, force: :cascade do |t| + t.string "decidim_commentable_type", null: false + t.integer "decidim_commentable_id", null: false + t.integer "decidim_author_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "depth", default: 0, null: false + t.integer "alignment", default: 0, null: false + t.integer "decidim_user_group_id" + t.string "decidim_root_commentable_type", null: false + t.integer "decidim_root_commentable_id", null: false + t.string "decidim_author_type", null: false + t.jsonb "body" + t.integer "comments_count", default: 0, null: false + t.string "decidim_participatory_space_type" + t.integer "decidim_participatory_space_id" + t.datetime "deleted_at" + t.index ["created_at"], name: "index_decidim_comments_comments_on_created_at" + t.index ["decidim_author_id", "decidim_author_type"], name: "index_decidim_comments_comments_on_decidim_author" + t.index ["decidim_author_id"], name: "decidim_comments_comment_author" + t.index ["decidim_commentable_type", "decidim_commentable_id"], name: "decidim_comments_comment_commentable" + t.index ["decidim_participatory_space_id", "decidim_participatory_space_type"], name: "index_decidim_comments_on_decidim_participatory_space" + t.index ["decidim_root_commentable_type", "decidim_root_commentable_id"], name: "decidim_comments_comment_root_commentable" + t.index ["decidim_user_group_id"], name: "index_decidim_comments_comments_on_decidim_user_group_id" + end + + create_table "decidim_components", id: :serial, force: :cascade do |t| + t.string "manifest_name" + t.jsonb "name" + t.integer "participatory_space_id", null: false + t.jsonb "settings", default: {} + t.integer "weight", default: 0 + t.jsonb "permissions" + t.datetime "published_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "participatory_space_type", null: false + t.index ["participatory_space_id", "participatory_space_type"], name: "index_decidim_components_on_decidim_participatory_space" + end + + create_table "decidim_content_block_attachments", force: :cascade do |t| + t.string "name" + t.bigint "decidim_content_block_id", null: false + t.index ["decidim_content_block_id"], name: "decidim_content_block_attachments_on_content_block" + end + + create_table "decidim_content_blocks", force: :cascade do |t| + t.integer "decidim_organization_id", null: false + t.string "manifest_name", null: false + t.string "scope_name", null: false + t.jsonb "settings" + t.datetime "published_at" + t.integer "weight" + t.jsonb "images", default: {} + t.integer "scoped_resource_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["decidim_organization_id", "scope_name", "scoped_resource_id", "manifest_name"], name: "idx_decidim_content_blocks_org_id_scope_scope_id_manifest" + t.index ["decidim_organization_id"], name: "index_decidim_content_blocks_on_decidim_organization_id" + t.index ["manifest_name"], name: "index_decidim_content_blocks_on_manifest_name" + t.index ["published_at"], name: "index_decidim_content_blocks_on_published_at" + t.index ["scope_name"], name: "index_decidim_content_blocks_on_scope_name" + end + + create_table "decidim_contextual_help_sections", force: :cascade do |t| + t.string "section_id", null: false + t.bigint "organization_id", null: false + t.jsonb "content", null: false + t.index ["organization_id"], name: "index_decidim_contextual_help_sections_on_organization_id" + t.index ["section_id"], name: "index_decidim_contextual_help_sections_on_section_id" + end + + create_table "decidim_debates_debates", id: :serial, force: :cascade do |t| + t.jsonb "title" + t.jsonb "description" + t.jsonb "instructions" + t.datetime "start_time" + t.datetime "end_time" + t.string "image" + t.integer "decidim_component_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.jsonb "information_updates" + t.integer "decidim_author_id", null: false + t.string "reference" + t.integer "decidim_user_group_id" + t.string "decidim_author_type", null: false + t.datetime "closed_at" + t.jsonb "conclusions" + t.integer "endorsements_count", default: 0, null: false + t.integer "comments_count", default: 0, null: false + t.datetime "last_comment_at" + t.integer "last_comment_by_id" + t.string "last_comment_by_type" + t.bigint "decidim_scope_id" + t.integer "follows_count", default: 0, null: false + t.boolean "comments_enabled", default: true + t.index ["closed_at"], name: "index_decidim_debates_debates_on_closed_at" + t.index ["decidim_author_id", "decidim_author_type"], name: "index_decidim_debates_debates_on_decidim_author" + t.index ["decidim_component_id"], name: "index_decidim_debates_debates_on_decidim_component_id" + t.index ["decidim_scope_id"], name: "index_decidim_debates_debates_on_decidim_scope_id" + t.index ["decidim_user_group_id"], name: "index_decidim_debates_debates_on_decidim_user_group_id" + t.index ["endorsements_count"], name: "idx_decidim_debates_debates_on_endorsemnts_count" + end + + create_table "decidim_editor_images", force: :cascade do |t| + t.bigint "decidim_author_id", null: false + t.bigint "decidim_organization_id", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["decidim_author_id"], name: "decidim_editor_images_author" + t.index ["decidim_organization_id"], name: "decidim_editor_images_constraint_organization" + end + + create_table "decidim_endorsements", force: :cascade do |t| + t.string "resource_type" + t.bigint "resource_id" + t.string "decidim_author_type" + t.bigint "decidim_author_id" + t.integer "decidim_user_group_id", default: 0 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_author_type", "decidim_author_id"], name: "idx_endorsements_authors" + t.index ["decidim_user_group_id"], name: "index_decidim_endorsements_on_decidim_user_group_id" + t.index ["resource_type", "resource_id", "decidim_author_type", "decidim_author_id", "decidim_user_group_id"], name: "idx_endorsements_rsrcs_and_authors", unique: true + t.index ["resource_type", "resource_id"], name: "index_decidim_endorsements_on_resource_type_and_resource_id" + end + + create_table "decidim_follows", force: :cascade do |t| + t.bigint "decidim_user_id", null: false + t.string "decidim_followable_type" + t.bigint "decidim_followable_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_followable_id", "decidim_followable_type"], name: "index_follows_followable_id_and_type" + t.index ["decidim_user_id", "decidim_followable_id", "decidim_followable_type"], name: "index_uniq_on_follows_user_and_followable", unique: true + t.index ["decidim_user_id"], name: "index_decidim_follows_on_decidim_user_id" + end + + create_table "decidim_forms_answer_choices", force: :cascade do |t| + t.bigint "decidim_answer_id" + t.bigint "decidim_answer_option_id" + t.integer "position" + t.jsonb "body" + t.text "custom_body" + t.integer "decidim_question_matrix_row_id" + t.index ["decidim_answer_id"], name: "index_decidim_forms_answer_choices_answer_id" + t.index ["decidim_answer_option_id"], name: "index_decidim_forms_answer_choices_answer_option_id" + end + + create_table "decidim_forms_answer_options", force: :cascade do |t| + t.bigint "decidim_question_id" + t.jsonb "body" + t.boolean "free_text" + t.index ["decidim_question_id"], name: "index_decidim_forms_answer_options_question_id" + end + + create_table "decidim_forms_answers", id: :serial, force: :cascade do |t| + t.text "body" + t.integer "decidim_user_id" + t.integer "decidim_questionnaire_id" + t.integer "decidim_question_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "session_token", default: "", null: false + t.string "ip_hash" + t.index ["decidim_question_id"], name: "index_decidim_forms_answers_question_id" + t.index ["decidim_questionnaire_id"], name: "index_decidim_forms_answers_on_decidim_questionnaire_id" + t.index ["decidim_user_id"], name: "index_decidim_forms_answers_on_decidim_user_id" + t.index ["ip_hash"], name: "index_decidim_forms_answers_on_ip_hash" + t.index ["session_token"], name: "index_decidim_forms_answers_on_session_token" + end + + create_table "decidim_forms_display_conditions", force: :cascade do |t| + t.bigint "decidim_question_id", null: false + t.bigint "decidim_condition_question_id", null: false + t.bigint "decidim_answer_option_id" + t.integer "condition_type", default: 0, null: false + t.jsonb "condition_value" + t.boolean "mandatory", default: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_answer_option_id"], name: "decidim_forms_display_condition_answer_option" + t.index ["decidim_condition_question_id"], name: "decidim_forms_display_condition_condition_question" + t.index ["decidim_question_id"], name: "decidim_forms_display_condition_question" + end + + create_table "decidim_forms_question_matrix_rows", force: :cascade do |t| + t.bigint "decidim_question_id" + t.integer "position" + t.jsonb "body" + t.index ["decidim_question_id"], name: "index_decidim_forms_question_matrix_questionnaire_id" + t.index ["position"], name: "index_decidim_forms_question_matrix_rows_on_position" + end + + create_table "decidim_forms_questionnaires", id: :serial, force: :cascade do |t| + t.jsonb "title" + t.jsonb "description" + t.jsonb "tos" + t.string "questionnaire_for_type" + t.integer "questionnaire_for_id" + t.datetime "published_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "salt" + t.index ["questionnaire_for_type", "questionnaire_for_id"], name: "index_decidim_forms_questionnaires_questionnaire_for" + end + + create_table "decidim_forms_questions", id: :serial, force: :cascade do |t| + t.integer "decidim_questionnaire_id" + t.integer "position" + t.string "question_type" + t.boolean "mandatory" + t.jsonb "body" + t.jsonb "description" + t.integer "max_choices" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "max_characters", default: 0 + t.index ["decidim_questionnaire_id"], name: "index_decidim_forms_questions_on_decidim_questionnaire_id" + t.index ["position"], name: "index_decidim_forms_questions_on_position" + end + + create_table "decidim_gamification_badge_scores", force: :cascade do |t| + t.bigint "user_id", null: false + t.string "badge_name", null: false + t.integer "value", default: 0, null: false + t.index ["user_id"], name: "index_decidim_gamification_badge_scores_on_user_id" + end + + create_table "decidim_hashtags", force: :cascade do |t| + t.bigint "decidim_organization_id" + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_organization_id"], name: "index_decidim_hashtags_on_decidim_organization_id" + t.index ["name"], name: "index_decidim_hashtags_on_name" + end + + create_table "decidim_identities", id: :serial, force: :cascade do |t| + t.string "provider", null: false + t.string "uid", null: false + t.integer "decidim_user_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "decidim_organization_id" + t.index ["decidim_organization_id"], name: "index_decidim_identities_on_decidim_organization_id" + t.index ["decidim_user_id"], name: "index_decidim_identities_on_decidim_user_id" + t.index ["provider", "uid", "decidim_organization_id"], name: "decidim_identities_provider_uid_organization_unique", unique: true + end + + create_table "decidim_impersonation_logs", force: :cascade do |t| + t.bigint "decidim_admin_id" + t.bigint "decidim_user_id" + t.datetime "started_at" + t.datetime "ended_at" + t.datetime "expired_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.text "reason" + t.index ["decidim_admin_id"], name: "index_decidim_impersonation_logs_on_decidim_admin_id" + t.index ["decidim_user_id"], name: "index_decidim_impersonation_logs_on_decidim_user_id" + end + + create_table "decidim_meetings_agenda_items", force: :cascade do |t| + t.bigint "decidim_agenda_id" + t.integer "position" + t.bigint "parent_id" + t.integer "duration" + t.jsonb "title" + t.jsonb "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_agenda_id"], name: "index_decidim_meetings_agenda_items_on_decidim_agenda_id" + t.index ["parent_id"], name: "index_decidim_meetings_agenda_items_on_parent_id" + end + + create_table "decidim_meetings_agendas", force: :cascade do |t| + t.jsonb "title" + t.bigint "decidim_meeting_id", null: false + t.boolean "visible" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_meeting_id"], name: "index_decidim_meetings_agendas_on_decidim_meeting_id" + end + + create_table "decidim_meetings_answer_choices", force: :cascade do |t| + t.bigint "decidim_answer_id" + t.bigint "decidim_answer_option_id" + t.integer "position" + t.jsonb "body" + t.text "custom_body" + t.index ["decidim_answer_id"], name: "index_decidim_meetings_answer_choices_answer_id" + t.index ["decidim_answer_option_id"], name: "index_decidim_meetings_answer_choices_answer_option_id" + end + + create_table "decidim_meetings_answer_options", force: :cascade do |t| + t.bigint "decidim_question_id" + t.jsonb "body" + t.index ["decidim_question_id"], name: "index_decidim_meetings_answer_options_question_id" + end + + create_table "decidim_meetings_answers", force: :cascade do |t| + t.bigint "decidim_user_id" + t.bigint "decidim_questionnaire_id" + t.bigint "decidim_question_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["decidim_question_id"], name: "index_decidim_meetings_answers_question_id" + t.index ["decidim_questionnaire_id"], name: "index_decidim_meetings_answers_on_decidim_questionnaire_id" + t.index ["decidim_user_id"], name: "index_decidim_meetings_answers_on_decidim_user_id" + end + + create_table "decidim_meetings_invites", force: :cascade do |t| + t.bigint "decidim_user_id", null: false + t.bigint "decidim_meeting_id", null: false + t.datetime "sent_at" + t.datetime "accepted_at" + t.datetime "rejected_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_meeting_id"], name: "index_decidim_meetings_invites_on_decidim_meeting_id" + t.index ["decidim_user_id"], name: "index_decidim_meetings_invites_on_decidim_user_id" + end + + create_table "decidim_meetings_meetings", id: :serial, force: :cascade do |t| + t.jsonb "title" + t.jsonb "description" + t.datetime "start_time" + t.datetime "end_time" + t.text "address" + t.jsonb "location" + t.jsonb "location_hints" + t.integer "decidim_component_id" + t.integer "decidim_author_id" + t.integer "decidim_scope_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.jsonb "closing_report" + t.integer "attendees_count" + t.integer "contributions_count" + t.text "attending_organizations" + t.time "closed_at" + t.float "latitude" + t.float "longitude" + t.string "reference" + t.boolean "registrations_enabled", default: false, null: false + t.integer "available_slots", default: 0, null: false + t.jsonb "registration_terms" + t.integer "reserved_slots", default: 0, null: false + t.boolean "private_meeting", default: false + t.boolean "transparent", default: true + t.boolean "registration_form_enabled", default: false + t.string "decidim_author_type" + t.integer "decidim_user_group_id" + t.integer "comments_count", default: 0, null: false + t.string "online_meeting_url" + t.string "registration_url" + t.string "salt" + t.boolean "customize_registration_email", default: false + t.jsonb "registration_email_custom_content" + t.integer "follows_count", default: 0, null: false + t.datetime "published_at" + t.string "video_url" + t.string "audio_url" + t.boolean "closing_visible" + t.boolean "comments_enabled", default: true + t.datetime "comments_start_time" + t.datetime "comments_end_time" + t.string "state" + t.integer "iframe_access_level", default: 0 + t.integer "iframe_embed_type", default: 0 + t.integer "type_of_meeting", default: 0, null: false + t.integer "registration_type", default: 0, null: false + t.index ["decidim_author_id", "decidim_author_type"], name: "index_decidim_meetings_meetings_on_author" + t.index ["decidim_author_id"], name: "index_decidim_meetings_meetings_on_decidim_author_id" + t.index ["decidim_component_id"], name: "index_decidim_meetings_meetings_on_decidim_component_id" + t.index ["decidim_scope_id"], name: "index_decidim_meetings_meetings_on_decidim_scope_id" + end + + create_table "decidim_meetings_polls", force: :cascade do |t| + t.bigint "decidim_meeting_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["decidim_meeting_id"], name: "index_decidim_meetings_polls_on_decidim_meeting_id" + end + + create_table "decidim_meetings_questionnaires", force: :cascade do |t| + t.string "questionnaire_for_type" + t.bigint "questionnaire_for_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["questionnaire_for_type", "questionnaire_for_id"], name: "index_decidim_meetings_questionnaires_questionnaire_for" + end + + create_table "decidim_meetings_questions", force: :cascade do |t| + t.bigint "decidim_questionnaire_id" + t.integer "position" + t.string "question_type" + t.jsonb "body" + t.integer "max_choices" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.integer "status", default: 0 + t.index ["decidim_questionnaire_id"], name: "index_decidim_meetings_questions_on_decidim_questionnaire_id" + t.index ["position"], name: "index_decidim_meetings_questions_on_position" + end + + create_table "decidim_meetings_registrations", force: :cascade do |t| + t.bigint "decidim_user_id", null: false + t.bigint "decidim_meeting_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "code" + t.datetime "validated_at" + t.bigint "decidim_user_group_id" + t.boolean "public_participation", default: false + t.index ["decidim_meeting_id"], name: "index_decidim_meetings_registrations_on_decidim_meeting_id" + t.index ["decidim_user_group_id"], name: "index_decidim_meetings_registrations_on_decidim_user_group_id" + t.index ["decidim_user_id", "decidim_meeting_id"], name: "decidim_meetings_registrations_user_meeting_unique", unique: true + t.index ["decidim_user_id"], name: "index_decidim_meetings_registrations_on_decidim_user_id" + end + + create_table "decidim_meetings_services", force: :cascade do |t| + t.jsonb "title" + t.jsonb "description" + t.bigint "decidim_meeting_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_meeting_id"], name: "index_decidim_meetings_services_on_decidim_meeting_id" + end + + create_table "decidim_messaging_conversations", force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "decidim_messaging_messages", force: :cascade do |t| + t.bigint "decidim_conversation_id", null: false + t.bigint "decidim_sender_id", null: false + t.text "body", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_conversation_id"], name: "index_decidim_messaging_messages_on_decidim_conversation_id" + t.index ["decidim_sender_id"], name: "index_decidim_messaging_messages_on_decidim_sender_id" + end + + create_table "decidim_messaging_participations", force: :cascade do |t| + t.bigint "decidim_conversation_id", null: false + t.bigint "decidim_participant_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_conversation_id"], name: "index_conversation_participations_on_conversation_id" + t.index ["decidim_participant_id"], name: "index_conversation_participations_on_participant_id" + end + + create_table "decidim_messaging_receipts", force: :cascade do |t| + t.bigint "decidim_message_id", null: false + t.bigint "decidim_recipient_id", null: false + t.datetime "read_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_message_id"], name: "index_decidim_messaging_receipts_on_decidim_message_id" + t.index ["decidim_recipient_id"], name: "index_decidim_messaging_receipts_on_decidim_recipient_id" + end + + create_table "decidim_metrics", force: :cascade do |t| + t.date "day", null: false + t.string "metric_type", null: false + t.integer "cumulative", null: false + t.integer "quantity", null: false + t.bigint "decidim_organization_id", null: false + t.string "participatory_space_type" + t.bigint "participatory_space_id" + t.string "related_object_type" + t.bigint "related_object_id" + t.bigint "decidim_category_id" + t.index ["day", "metric_type", "decidim_organization_id", "participatory_space_type", "participatory_space_id", "related_object_type", "related_object_id", "decidim_category_id"], name: "idx_metric_by_day_type_org_space_object_category", unique: true + t.index ["day"], name: "index_decidim_metrics_on_day" + t.index ["decidim_category_id"], name: "index_decidim_metrics_on_decidim_category_id" + t.index ["decidim_organization_id"], name: "index_decidim_metrics_on_decidim_organization_id" + t.index ["metric_type"], name: "index_decidim_metrics_on_metric_type" + t.index ["participatory_space_type", "participatory_space_id"], name: "index_metric_on_participatory_space_id_and_type" + t.index ["related_object_type", "related_object_id"], name: "index_metric_on_related_object_id_and_type" + end + + create_table "decidim_moderations", id: :serial, force: :cascade do |t| + t.integer "decidim_participatory_space_id", null: false + t.string "decidim_reportable_type", null: false + t.integer "decidim_reportable_id", null: false + t.integer "report_count", default: 0, null: false + t.datetime "hidden_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "decidim_participatory_space_type", null: false + t.text "reported_content" + t.index ["decidim_participatory_space_id", "decidim_participatory_space_type"], name: "decidim_moderations_participatory_space" + t.index ["decidim_reportable_type", "decidim_reportable_id"], name: "decidim_moderations_reportable", unique: true + t.index ["hidden_at"], name: "decidim_moderations_hidden_at" + t.index ["report_count"], name: "decidim_moderations_report_count" + end + + create_table "decidim_newsletters", id: :serial, force: :cascade do |t| + t.jsonb "subject" + t.integer "organization_id" + t.integer "author_id" + t.integer "total_recipients" + t.integer "total_deliveries" + t.datetime "sent_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.jsonb "extended_data", default: {} + t.index ["author_id"], name: "index_decidim_newsletters_on_author_id" + t.index ["organization_id"], name: "index_decidim_newsletters_on_organization_id" + end + + create_table "decidim_notifications", force: :cascade do |t| + t.bigint "decidim_user_id", null: false + t.string "decidim_resource_type", null: false + t.bigint "decidim_resource_id", null: false + t.string "event_name", null: false + t.string "event_class", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.jsonb "extra" + t.index ["decidim_resource_id"], name: "index_decidim_notifications_on_decidim_resource_id" + t.index ["decidim_user_id"], name: "index_decidim_notifications_on_decidim_user_id" + end + + create_table "decidim_organizations", id: :serial, force: :cascade do |t| + t.string "name", null: false + t.string "host", null: false + t.string "default_locale", null: false + t.string "available_locales", default: [], array: true + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.jsonb "description" + t.string "logo" + t.string "twitter_handler" + t.string "favicon" + t.string "instagram_handler" + t.string "facebook_handler" + t.string "youtube_handler" + t.string "github_handler" + t.string "official_img_footer" + t.string "official_url" + t.string "reference_prefix", null: false + t.string "secondary_hosts", default: [], array: true + t.string "available_authorizations", default: [], array: true + t.text "header_snippets" + t.jsonb "cta_button_text" + t.string "cta_button_path" + t.boolean "enable_omnipresent_banner", default: false, null: false + t.jsonb "omnipresent_banner_title" + t.jsonb "omnipresent_banner_short_description" + t.string "omnipresent_banner_url" + t.boolean "highlighted_content_banner_enabled", default: false, null: false + t.jsonb "highlighted_content_banner_title" + t.jsonb "highlighted_content_banner_short_description" + t.jsonb "highlighted_content_banner_action_title" + t.jsonb "highlighted_content_banner_action_subtitle" + t.string "highlighted_content_banner_action_url" + t.string "highlighted_content_banner_image" + t.datetime "tos_version" + t.boolean "badges_enabled", default: false, null: false + t.boolean "send_welcome_notification", default: false, null: false + t.jsonb "welcome_notification_subject" + t.jsonb "welcome_notification_body" + t.integer "users_registration_mode", default: 0, null: false + t.string "id_documents_methods", default: ["online"], array: true + t.jsonb "id_documents_explanation_text", default: {} + t.boolean "user_groups_enabled", default: false, null: false + t.jsonb "smtp_settings" + t.jsonb "colors", default: {} + t.boolean "force_users_to_authenticate_before_access_organization", default: false + t.jsonb "omniauth_settings" + t.boolean "rich_text_editor_in_public_views", default: false + t.jsonb "admin_terms_of_service_body" + t.string "time_zone", limit: 255, default: "UTC" + t.boolean "enable_machine_translations", default: false + t.integer "comments_max_length", default: 1000 + t.jsonb "file_upload_settings" + t.string "machine_translation_display_priority", default: "original", null: false + t.string "external_domain_whitelist", default: [], array: true + t.boolean "enable_participatory_space_filters", default: true + t.jsonb "content_security_policy", default: {} + t.index ["host"], name: "index_decidim_organizations_on_host", unique: true + t.index ["name"], name: "index_decidim_organizations_on_name", unique: true + end + + create_table "decidim_pages_pages", id: :serial, force: :cascade do |t| + t.jsonb "body" + t.integer "decidim_component_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_component_id"], name: "index_decidim_pages_pages_on_decidim_component_id" + end + + create_table "decidim_participatory_process_groups", id: :serial, force: :cascade do |t| + t.jsonb "title", null: false + t.jsonb "description", null: false + t.string "hero_image" + t.integer "decidim_organization_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "hashtag" + t.string "group_url" + t.jsonb "developer_group" + t.jsonb "local_area" + t.jsonb "meta_scope" + t.jsonb "target" + t.jsonb "participatory_scope" + t.jsonb "participatory_structure" + t.boolean "promoted", default: false + t.index ["decidim_organization_id"], name: "decidim_participatory_process_group_organization" + end + + create_table "decidim_participatory_process_steps", id: :serial, force: :cascade do |t| + t.jsonb "title", null: false + t.jsonb "description" + t.datetime "start_date" + t.datetime "end_date" + t.integer "decidim_participatory_process_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "active", default: false + t.integer "position" + t.jsonb "cta_text", default: {} + t.string "cta_path" + t.index ["decidim_participatory_process_id", "active"], name: "unique_index_to_avoid_duplicate_active_steps", unique: true, where: "(active = true)" + t.index ["decidim_participatory_process_id", "position"], name: "index_unique_position_for_process", unique: true + t.index ["decidim_participatory_process_id"], name: "index_decidim_processes_steps__on_decidim_process_id" + t.index ["position"], name: "index_order_by_position_for_steps" + end + + create_table "decidim_participatory_process_types", force: :cascade do |t| + t.jsonb "title", null: false + t.bigint "decidim_organization_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["decidim_organization_id"], name: "index_decidim_process_types_on_decidim_organization_id" + end + + create_table "decidim_participatory_process_user_roles", id: :serial, force: :cascade do |t| + t.integer "decidim_user_id" + t.integer "decidim_participatory_process_id" + t.string "role" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_participatory_process_id", "decidim_user_id", "role"], name: "index_unique_user_and_process_role", unique: true + t.index ["decidim_user_id"], name: "idx_proces_user_role_on_user_id" + end + + create_table "decidim_participatory_processes", id: :serial, force: :cascade do |t| + t.string "slug", null: false + t.string "hashtag" + t.integer "decidim_organization_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.jsonb "title", null: false + t.jsonb "subtitle", null: false + t.jsonb "short_description", null: false + t.jsonb "description", null: false + t.string "hero_image" + t.string "banner_image" + t.boolean "promoted", default: false + t.datetime "published_at" + t.jsonb "developer_group" + t.date "end_date" + t.jsonb "meta_scope" + t.jsonb "local_area" + t.jsonb "target" + t.jsonb "participatory_scope" + t.jsonb "participatory_structure" + t.integer "decidim_scope_id" + t.integer "decidim_participatory_process_group_id" + t.boolean "show_statistics", default: true + t.jsonb "announcement" + t.boolean "scopes_enabled", default: true, null: false + t.date "start_date" + t.boolean "private_space", default: false + t.string "reference" + t.bigint "decidim_area_id" + t.bigint "decidim_scope_type_id" + t.boolean "show_metrics", default: true + t.integer "weight", default: 1, null: false + t.integer "follows_count", default: 0, null: false + t.bigint "decidim_participatory_process_type_id" + t.index ["decidim_area_id"], name: "index_decidim_participatory_processes_on_decidim_area_id" + t.index ["decidim_organization_id", "slug"], name: "index_unique_process_slug_and_organization", unique: true + t.index ["decidim_organization_id"], name: "index_decidim_processes_on_decidim_organization_id" + t.index ["decidim_participatory_process_group_id"], name: "idx_process_on_process_group_id" + t.index ["decidim_participatory_process_type_id"], name: "index_decidim_processes_on_decidim_process_type_id" + t.index ["decidim_scope_id"], name: "idx_process_on_scope_id" + t.index ["decidim_scope_type_id"], name: "index_decidim_participatory_processes_on_decidim_scope_type_id" + end + + create_table "decidim_participatory_space_links", id: :serial, force: :cascade do |t| + t.string "from_type", null: false + t.integer "from_id", null: false + t.string "to_type", null: false + t.integer "to_id", null: false + t.string "name", null: false + t.jsonb "data" + t.index ["from_type", "from_id"], name: "index_participatory_space_links_on_from" + t.index ["name"], name: "index_participatory_space_links_name" + t.index ["to_type", "to_id"], name: "index_participatory_space_links_on_to" + end + + create_table "decidim_participatory_space_private_users", force: :cascade do |t| + t.bigint "decidim_user_id" + t.integer "privatable_to_id" + t.string "privatable_to_type" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_user_id"], name: "index_decidim_spaces_users_on_private_user_id" + t.index ["privatable_to_type", "privatable_to_id"], name: "space_privatable_to_privatable_id" + end + + create_table "decidim_proposals_collaborative_draft_collaborator_requests", force: :cascade do |t| + t.bigint "decidim_proposals_collaborative_draft_id", null: false + t.bigint "decidim_user_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_proposals_collaborative_draft_id"], name: "index_collab_requests_on_decidim_proposals_collab_draft_id" + t.index ["decidim_user_id"], name: "index_collab_requests_on_decidim_user_id" + end + + create_table "decidim_proposals_collaborative_drafts", force: :cascade do |t| + t.text "title", null: false + t.text "body", null: false + t.integer "decidim_component_id", null: false + t.integer "decidim_scope_id" + t.string "reference" + t.text "address" + t.float "latitude" + t.float "longitude" + t.datetime "published_at" + t.integer "authors_count", default: 0, null: false + t.integer "versions_count", default: 0, null: false + t.integer "contributions_count", default: 0, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "coauthorships_count", default: 0, null: false + t.integer "comments_count", default: 0, null: false + t.integer "follows_count", default: 0, null: false + t.integer "state", default: 0, null: false + t.index ["body"], name: "decidim_proposals_collaborative_draft_body_search" + t.index ["decidim_component_id"], name: "decidim_proposals_collaborative_drafts_on_decidim_component_id" + t.index ["decidim_scope_id"], name: "decidim_proposals_collaborative_drafts_on_decidim_scope_id" + t.index ["title"], name: "decidim_proposals_collaborative_drafts_title_search" + t.index ["updated_at"], name: "decidim_proposals_collaborative_drafts_on_updated_at" + end + + create_table "decidim_proposals_participatory_texts", force: :cascade do |t| + t.jsonb "title" + t.jsonb "description" + t.bigint "decidim_component_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_component_id"], name: "idx_participatory_texts_on_decidim_component_id" + end + + create_table "decidim_proposals_proposal_notes", force: :cascade do |t| + t.bigint "decidim_proposal_id", null: false + t.bigint "decidim_author_id", null: false + t.text "body", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["created_at"], name: "index_decidim_proposals_proposal_notes_on_created_at" + t.index ["decidim_author_id"], name: "decidim_proposals_proposal_note_author" + t.index ["decidim_proposal_id"], name: "decidim_proposals_proposal_note_proposal" + end + + create_table "decidim_proposals_proposal_votes", id: :serial, force: :cascade do |t| + t.integer "decidim_proposal_id", null: false + t.integer "decidim_author_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "temporary", default: false, null: false + t.index ["decidim_author_id"], name: "decidim_proposals_proposal_vote_author" + t.index ["decidim_proposal_id", "decidim_author_id"], name: "decidim_proposals_proposal_vote_proposal_author_unique", unique: true + t.index ["decidim_proposal_id"], name: "decidim_proposals_proposal_vote_proposal" + end + + create_table "decidim_proposals_proposals", id: :serial, force: :cascade do |t| + t.integer "decidim_component_id", null: false + t.integer "decidim_scope_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "proposal_votes_count", default: 0, null: false + t.datetime "answered_at" + t.jsonb "answer" + t.string "reference" + t.text "address" + t.float "latitude" + t.float "longitude" + t.datetime "published_at" + t.integer "proposal_notes_count", default: 0, null: false + t.integer "coauthorships_count", default: 0, null: false + t.string "participatory_text_level" + t.integer "position" + t.boolean "created_in_meeting", default: false + t.integer "endorsements_count", default: 0, null: false + t.decimal "cost" + t.jsonb "cost_report" + t.jsonb "execution_period" + t.datetime "state_published_at" + t.jsonb "title" + t.jsonb "body" + t.integer "comments_count", default: 0, null: false + t.integer "follows_count", default: 0, null: false + t.integer "state", default: 0, null: false + t.index "md5((body)::text)", name: "decidim_proposals_proposal_body_search" + t.index "md5((title)::text)", name: "decidim_proposals_proposal_title_search" + t.index ["created_at"], name: "index_decidim_proposals_proposals_on_created_at" + t.index ["decidim_component_id"], name: "index_decidim_proposals_proposals_on_decidim_component_id" + t.index ["decidim_scope_id"], name: "index_decidim_proposals_proposals_on_decidim_scope_id" + t.index ["proposal_votes_count"], name: "index_decidim_proposals_proposals_on_proposal_votes_count" + end + + create_table "decidim_proposals_valuation_assignments", force: :cascade do |t| + t.bigint "decidim_proposal_id", null: false + t.string "valuator_role_type", null: false + t.bigint "valuator_role_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_proposal_id"], name: "decidim_proposals_valuation_assignment_proposal" + t.index ["valuator_role_type", "valuator_role_id"], name: "decidim_proposals_valuation_assignment_valuator_role" + end + + create_table "decidim_reminder_deliveries", force: :cascade do |t| + t.bigint "decidim_reminder_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["decidim_reminder_id"], name: "index_decidim_reminder_deliveries_on_decidim_reminder_id" + end + + create_table "decidim_reminder_records", force: :cascade do |t| + t.string "string", default: "active" + t.bigint "decidim_reminder_id" + t.string "remindable_type", null: false + t.bigint "remindable_id", null: false + t.integer "state", default: 0, null: false + t.index ["decidim_reminder_id"], name: "index_decidim_reminder_records_on_decidim_reminder_id" + t.index ["remindable_type", "remindable_id"], name: "index_decidim_reminder_records_remindable" + t.index ["string"], name: "index_decidim_reminder_records_on_string" + end + + create_table "decidim_reminders", force: :cascade do |t| + t.bigint "decidim_user_id", null: false + t.bigint "decidim_component_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["decidim_component_id"], name: "index_decidim_reminders_on_decidim_component_id" + t.index ["decidim_user_id"], name: "index_decidim_reminders_on_decidim_user_id" + end + + create_table "decidim_reports", id: :serial, force: :cascade do |t| + t.integer "decidim_moderation_id", null: false + t.integer "decidim_user_id", null: false + t.string "reason", null: false + t.text "details" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "locale" + t.index ["decidim_moderation_id", "decidim_user_id"], name: "decidim_reports_moderation_user_unique", unique: true + t.index ["decidim_moderation_id"], name: "decidim_reports_moderation" + t.index ["decidim_user_id"], name: "decidim_reports_user" + end + + create_table "decidim_resource_links", id: :serial, force: :cascade do |t| + t.string "from_type", null: false + t.integer "from_id", null: false + t.string "to_type", null: false + t.integer "to_id", null: false + t.string "name", null: false + t.jsonb "data" + t.index ["from_type", "from_id"], name: "index_decidim_resource_links_on_from_type_and_from_id" + t.index ["name"], name: "index_decidim_resource_links_on_name" + t.index ["to_type", "to_id"], name: "index_decidim_resource_links_on_to_type_and_to_id" + end + + create_table "decidim_resource_permissions", force: :cascade do |t| + t.string "resource_type" + t.bigint "resource_id" + t.jsonb "permissions", default: {} + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["resource_type", "resource_id"], name: "index_decidim_resource_permissions_on_r_type_and_r_id", unique: true + end + + create_table "decidim_scope_types", id: :serial, force: :cascade do |t| + t.integer "decidim_organization_id" + t.jsonb "name", null: false + t.jsonb "plural", null: false + t.index ["decidim_organization_id"], name: "index_decidim_scope_types_on_decidim_organization_id" + end + + create_table "decidim_scopes", id: :serial, force: :cascade do |t| + t.integer "decidim_organization_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.jsonb "name", null: false + t.integer "scope_type_id" + t.integer "parent_id" + t.string "code", null: false + t.integer "part_of", default: [], null: false, array: true + t.index ["decidim_organization_id", "code"], name: "index_decidim_scopes_on_decidim_organization_id_and_code", unique: true + t.index ["decidim_organization_id"], name: "index_decidim_scopes_on_decidim_organization_id" + t.index ["parent_id"], name: "index_decidim_scopes_on_parent_id" + t.index ["part_of"], name: "index_decidim_scopes_on_part_of", using: :gin + t.index ["scope_type_id"], name: "index_decidim_scopes_on_scope_type_id" + end + + create_table "decidim_searchable_resources", force: :cascade do |t| + t.text "content_a" + t.text "content_b" + t.text "content_c" + t.text "content_d" + t.string "locale", null: false + t.datetime "datetime" + t.bigint "decidim_scope_id" + t.string "decidim_participatory_space_type" + t.bigint "decidim_participatory_space_id" + t.bigint "decidim_organization_id" + t.string "resource_type" + t.bigint "resource_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_organization_id"], name: "index_decidim_searchable_resources_on_decidim_organization_id" + t.index ["decidim_participatory_space_type", "decidim_participatory_space_id"], name: "index_decidim_searchable_resource_on_pspace_type_and_pspace_id" + t.index ["decidim_scope_id"], name: "index_decidim_searchable_resources_on_decidim_scope_id" + t.index ["resource_type", "resource_id"], name: "index_decidim_searchable_rsrcs_on_s_type_and_s_id" + end + + create_table "decidim_share_tokens", force: :cascade do |t| + t.bigint "decidim_organization_id", null: false + t.bigint "decidim_user_id", null: false + t.string "token_for_type", null: false + t.bigint "token_for_id", null: false + t.string "token", null: false + t.integer "times_used", default: 0 + t.datetime "created_at" + t.datetime "last_used_at" + t.datetime "expires_at" + t.index ["decidim_organization_id"], name: "index_decidim_share_tokens_on_decidim_organization_id" + t.index ["decidim_user_id"], name: "index_decidim_share_tokens_on_decidim_user_id" + t.index ["token_for_type", "token_for_id"], name: "decidim_share_tokens_token_for" + end + + create_table "decidim_short_links", force: :cascade do |t| + t.bigint "decidim_organization_id", null: false + t.string "target_type", null: false + t.bigint "target_id", null: false + t.string "identifier", limit: 10, null: false + t.string "mounted_engine_name" + t.string "route_name" + t.jsonb "params" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["decidim_organization_id", "identifier"], name: "idx_decidim_short_links_organization_id_identifier", unique: true + t.index ["decidim_organization_id"], name: "index_decidim_short_links_on_decidim_organization_id" + t.index ["mounted_engine_name"], name: "index_decidim_short_links_on_mounted_engine_name" + t.index ["route_name"], name: "index_decidim_short_links_on_route_name" + t.index ["target_type", "target_id"], name: "index_decidim_short_links_on_target" + end + + create_table "decidim_sortitions_sortitions", force: :cascade do |t| + t.bigint "decidim_component_id" + t.integer "decidim_proposals_component_id" + t.integer "dice", null: false + t.integer "target_items", null: false + t.datetime "request_timestamp", null: false + t.jsonb "selected_proposals" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.jsonb "witnesses" + t.jsonb "additional_info" + t.bigint "decidim_author_id", null: false + t.string "reference" + t.jsonb "title" + t.jsonb "cancel_reason" + t.datetime "cancelled_on" + t.integer "cancelled_by_user_id" + t.jsonb "candidate_proposals" + t.string "decidim_author_type", null: false + t.integer "comments_count", default: 0, null: false + t.index ["cancelled_by_user_id"], name: "index_decidim_sortitions_sortitions_on_cancelled_by_user_id" + t.index ["decidim_author_id", "decidim_author_type"], name: "index_decidim_sortitions_sortitions_on_decidim_author" + t.index ["decidim_author_id"], name: "index_decidim_sortitions_sortitions_on_decidim_author_id" + t.index ["decidim_component_id"], name: "index_sortitions__on_feature" + t.index ["decidim_proposals_component_id"], name: "index_sortitions__on_proposals_feature" + end + + create_table "decidim_static_page_topics", force: :cascade do |t| + t.jsonb "title", null: false + t.jsonb "description", null: false + t.bigint "organization_id", null: false + t.integer "weight" + t.boolean "show_in_footer", default: false, null: false + t.index ["organization_id"], name: "index_decidim_static_page_topics_on_organization_id" + end + + create_table "decidim_static_pages", id: :serial, force: :cascade do |t| + t.jsonb "title", null: false + t.string "slug", null: false + t.jsonb "content", null: false + t.integer "decidim_organization_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "weight" + t.boolean "show_in_footer", default: false, null: false + t.bigint "topic_id" + t.boolean "allow_public_access", default: false, null: false + t.index ["decidim_organization_id"], name: "index_decidim_static_pages_on_decidim_organization_id" + t.index ["topic_id"], name: "index_decidim_static_pages_on_topic_id" + end + + create_table "decidim_surveys_surveys", id: :serial, force: :cascade do |t| + t.integer "decidim_component_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_component_id"], name: "index_decidim_surveys_surveys_on_decidim_component_id" + end + + create_table "decidim_system_admins", id: :serial, force: :cascade do |t| + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.integer "failed_attempts", default: 0, null: false + t.string "unlock_token" + t.datetime "locked_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["email"], name: "index_decidim_system_admins_on_email", unique: true + t.index ["reset_password_token"], name: "index_decidim_system_admins_on_reset_password_token", unique: true + end + + create_table "decidim_templates_templates", force: :cascade do |t| + t.integer "decidim_organization_id", null: false + t.string "templatable_type" + t.bigint "templatable_id" + t.jsonb "name", null: false + t.jsonb "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.json "field_values", default: {} + t.string "target" + t.index ["decidim_organization_id"], name: "index_decidim_templates_organization" + t.index ["templatable_type", "templatable_id"], name: "index_decidim_templates_templatable" + end + + create_table "decidim_term_customizer_constraints", force: :cascade do |t| + t.bigint "decidim_organization_id", null: false + t.string "subject_type" + t.bigint "subject_id" + t.bigint "translation_set_id", null: false + t.index ["decidim_organization_id"], name: "decidim_term_customizer_constraint_organization" + t.index ["subject_type", "subject_id"], name: "decidim_term_customizer_constraint_subject" + t.index ["translation_set_id"], name: "decidim_term_customizer_constraint_translation_set" + end + + create_table "decidim_term_customizer_translation_sets", force: :cascade do |t| + t.jsonb "name" + end + + create_table "decidim_term_customizer_translations", force: :cascade do |t| + t.string "locale" + t.string "key" + t.text "value" + t.bigint "translation_set_id", null: false + t.index ["translation_set_id"], name: "decidim_term_customizer_translation_translation_set" + end + + create_table "decidim_user_blocks", force: :cascade do |t| + t.bigint "decidim_user_id" + t.integer "blocking_user_id" + t.text "justification" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_user_id"], name: "index_decidim_user_blocks_on_decidim_user_id" + end + + create_table "decidim_user_group_memberships", id: :serial, force: :cascade do |t| + t.integer "decidim_user_id", null: false + t.integer "decidim_user_group_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "role", default: "requested", null: false + t.index ["decidim_user_group_id", "decidim_user_id"], name: "index_user_group_memberships_group_id_user_id" + t.index ["decidim_user_group_id"], name: "index_decidim_user_group_memberships_on_decidim_user_group_id" + t.index ["decidim_user_id", "decidim_user_group_id"], name: "decidim_user_group_memberships_unique_user_and_group_ids", unique: true + t.index ["decidim_user_id"], name: "index_decidim_user_group_memberships_on_decidim_user_id" + t.index ["role", "decidim_user_group_id"], name: "decidim_group_membership_one_creator_per_group", unique: true, where: "((role)::text = 'creator'::text)" + end + + create_table "decidim_user_moderations", force: :cascade do |t| + t.bigint "decidim_user_id" + t.integer "report_count", default: 0, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_user_id"], name: "index_decidim_user_moderations_on_decidim_user_id" + end + + create_table "decidim_user_reports", force: :cascade do |t| + t.integer "user_moderation_id" + t.integer "user_id", null: false + t.string "reason" + t.text "details" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "decidim_users", id: :serial, force: :cascade do |t| + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.integer "sign_in_count", default: 0, null: false + t.datetime "current_sign_in_at" + t.datetime "last_sign_in_at" + t.string "current_sign_in_ip" + t.string "last_sign_in_ip" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "invitation_token" + t.datetime "invitation_created_at" + t.datetime "invitation_sent_at" + t.datetime "invitation_accepted_at" + t.integer "invitation_limit" + t.string "invited_by_type" + t.integer "invited_by_id" + t.integer "invitations_count", default: 0 + t.integer "decidim_organization_id" + t.string "confirmation_token" + t.datetime "confirmed_at" + t.datetime "confirmation_sent_at" + t.string "unconfirmed_email" + t.string "name", null: false + t.string "locale" + t.string "avatar" + t.text "delete_reason" + t.datetime "deleted_at" + t.boolean "admin", default: false, null: false + t.boolean "managed", default: false, null: false + t.string "roles", default: [], array: true + t.string "nickname", limit: 20, default: "", null: false + t.string "personal_url" + t.text "about" + t.datetime "accepted_tos_version" + t.string "newsletter_token", default: "" + t.datetime "newsletter_notifications_at" + t.string "type", null: false + t.jsonb "extended_data", default: {} + t.integer "following_count", default: 0, null: false + t.integer "followers_count", default: 0, null: false + t.string "notification_types", default: "all", null: false + t.integer "failed_attempts", default: 0, null: false + t.string "unlock_token" + t.datetime "locked_at" + t.string "session_token" + t.string "direct_message_types", default: "all", null: false + t.boolean "blocked", default: false, null: false + t.datetime "blocked_at" + t.integer "block_id" + t.boolean "email_on_moderations", default: true + t.integer "follows_count", default: 0, null: false + t.jsonb "notification_settings", default: {} + t.string "notifications_sending_frequency", default: "daily" + t.datetime "digest_sent_at" + t.datetime "password_updated_at" + t.string "previous_passwords", default: [], array: true + t.datetime "officialized_at" + t.jsonb "officialized_as" + t.datetime "admin_terms_accepted_at" + t.index ["confirmation_token"], name: "index_decidim_users_on_confirmation_token", unique: true + t.index ["decidim_organization_id"], name: "index_decidim_users_on_decidim_organization_id" + t.index ["email", "decidim_organization_id"], name: "index_decidim_users_on_email_and_decidim_organization_id", unique: true, where: "((deleted_at IS NULL) AND (managed = false) AND ((type)::text = 'Decidim::User'::text))" + t.index ["id", "type"], name: "index_decidim_users_on_id_and_type" + t.index ["invitation_token"], name: "index_decidim_users_on_invitation_token", unique: true + t.index ["invitations_count"], name: "index_decidim_users_on_invitations_count" + t.index ["invited_by_id", "invited_by_type"], name: "index_decidim_users_on_invited_by_id_and_invited_by_type" + t.index ["invited_by_id"], name: "index_decidim_users_on_invited_by_id" + t.index ["nickname", "decidim_organization_id"], name: "index_decidim_users_on_nickame_and_decidim_organization_id", unique: true, where: "((deleted_at IS NULL) AND (managed = false))" + t.index ["notifications_sending_frequency"], name: "index_decidim_users_on_notifications_sending_frequency" + t.index ["officialized_at"], name: "index_decidim_users_on_officialized_at" + t.index ["reset_password_token"], name: "index_decidim_users_on_reset_password_token", unique: true + t.index ["unlock_token"], name: "index_decidim_users_on_unlock_token", unique: true + end + + create_table "decidim_verifications_conflicts", force: :cascade do |t| + t.bigint "current_user_id" + t.bigint "managed_user_id" + t.integer "times", default: 0 + t.string "unique_id" + t.boolean "solved", default: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["current_user_id"], name: "authorization_current_user" + t.index ["managed_user_id"], name: "authorization_managed_user" + end + + create_table "decidim_verifications_csv_data", force: :cascade do |t| + t.string "email" + t.bigint "decidim_organization_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_organization_id"], name: "index_verifications_csv_census_to_organization" + end + + create_table "oauth_access_grants", force: :cascade do |t| + t.integer "resource_owner_id", null: false + t.bigint "application_id", null: false + t.string "token", null: false + t.integer "expires_in", null: false + t.text "redirect_uri", null: false + t.datetime "created_at", null: false + t.datetime "revoked_at" + t.string "scopes" + t.index ["application_id"], name: "index_oauth_access_grants_on_application_id" + t.index ["resource_owner_id"], name: "index_oauth_access_grants_on_resource_owner_id" + t.index ["token"], name: "index_oauth_access_grants_on_token", unique: true + end + + create_table "oauth_access_tokens", force: :cascade do |t| + t.integer "resource_owner_id" + t.bigint "application_id" + t.string "token", null: false + t.string "refresh_token" + t.integer "expires_in" + t.datetime "revoked_at" + t.datetime "created_at", null: false + t.string "scopes" + t.string "previous_refresh_token", default: "", null: false + t.index ["application_id"], name: "index_oauth_access_tokens_on_application_id" + t.index ["refresh_token"], name: "index_oauth_access_tokens_on_refresh_token", unique: true + t.index ["resource_owner_id"], name: "index_oauth_access_tokens_on_resource_owner_id" + t.index ["token"], name: "index_oauth_access_tokens_on_token", unique: true + end + + create_table "oauth_applications", force: :cascade do |t| + t.string "name", null: false + t.string "organization_name", null: false + t.string "organization_url", null: false + t.string "organization_logo" + t.string "uid", null: false + t.string "secret", null: false + t.text "redirect_uri", null: false + t.string "scopes", default: "", null: false + t.bigint "decidim_organization_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "type" + t.boolean "confidential", default: true, null: false + t.index ["decidim_organization_id"], name: "index_oauth_applications_on_decidim_organization_id" + t.index ["uid"], name: "index_oauth_applications_on_uid", unique: true + end + + create_table "versions", force: :cascade do |t| + t.string "item_type", null: false + t.integer "item_id", null: false + t.string "event", null: false + t.string "whodunnit" + t.jsonb "object" + t.datetime "created_at" + t.text "object_changes" + t.index ["item_id", "item_type"], name: "index_versions_on_item_id_and_item_type" + t.index ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id" + end + + add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" + add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id" + add_foreign_key "decidim_area_types", "decidim_organizations" + add_foreign_key "decidim_areas", "decidim_area_types", column: "area_type_id" + add_foreign_key "decidim_areas", "decidim_organizations" + add_foreign_key "decidim_assemblies", "decidim_assemblies_types" + add_foreign_key "decidim_assemblies_settings", "decidim_organizations" + add_foreign_key "decidim_attachments", "decidim_attachment_collections", column: "attachment_collection_id", name: "fk_decidim_attachments_attachment_collection_id", on_delete: :nullify + add_foreign_key "decidim_authorization_transfer_records", "decidim_authorization_transfers", column: "transfer_id" + add_foreign_key "decidim_authorization_transfers", "decidim_authorizations", column: "authorization_id" + add_foreign_key "decidim_authorization_transfers", "decidim_users", column: "source_user_id" + add_foreign_key "decidim_authorization_transfers", "decidim_users", column: "user_id" + add_foreign_key "decidim_authorizations", "decidim_users" + add_foreign_key "decidim_awesome_config_constraints", "decidim_awesome_config" + add_foreign_key "decidim_awesome_editor_images", "decidim_organizations" + add_foreign_key "decidim_awesome_editor_images", "decidim_users", column: "decidim_author_id" + add_foreign_key "decidim_budgets_budgets", "decidim_scopes" + add_foreign_key "decidim_budgets_orders", "decidim_budgets_budgets" + add_foreign_key "decidim_budgets_projects", "decidim_budgets_budgets" + add_foreign_key "decidim_categorizations", "decidim_categories" + add_foreign_key "decidim_debates_debates", "decidim_scopes" + add_foreign_key "decidim_editor_images", "decidim_organizations" + add_foreign_key "decidim_editor_images", "decidim_users", column: "decidim_author_id" + add_foreign_key "decidim_identities", "decidim_organizations" + add_foreign_key "decidim_newsletters", "decidim_users", column: "author_id" + add_foreign_key "decidim_participatory_process_steps", "decidim_participatory_processes" + add_foreign_key "decidim_participatory_process_types", "decidim_organizations" + add_foreign_key "decidim_participatory_processes", "decidim_organizations" + add_foreign_key "decidim_participatory_processes", "decidim_participatory_process_types" + add_foreign_key "decidim_participatory_processes", "decidim_scope_types" + add_foreign_key "decidim_reminder_deliveries", "decidim_reminders" + add_foreign_key "decidim_reminder_records", "decidim_reminders" + add_foreign_key "decidim_reminders", "decidim_components" + add_foreign_key "decidim_reminders", "decidim_users" + add_foreign_key "decidim_scope_types", "decidim_organizations" + add_foreign_key "decidim_scopes", "decidim_organizations" + add_foreign_key "decidim_scopes", "decidim_scope_types", column: "scope_type_id" + add_foreign_key "decidim_scopes", "decidim_scopes", column: "parent_id" + add_foreign_key "decidim_static_pages", "decidim_organizations" + add_foreign_key "decidim_term_customizer_constraints", "decidim_organizations" + add_foreign_key "decidim_term_customizer_constraints", "decidim_term_customizer_translation_sets", column: "translation_set_id" + add_foreign_key "decidim_term_customizer_translations", "decidim_term_customizer_translation_sets", column: "translation_set_id" + add_foreign_key "decidim_user_blocks", "decidim_users" + add_foreign_key "decidim_user_blocks", "decidim_users", column: "blocking_user_id" + add_foreign_key "decidim_user_moderations", "decidim_users" + add_foreign_key "decidim_user_reports", "decidim_user_moderations", column: "user_moderation_id" + add_foreign_key "decidim_user_reports", "decidim_users", column: "user_id" + add_foreign_key "decidim_users", "decidim_organizations" + add_foreign_key "decidim_verifications_conflicts", "decidim_users", column: "current_user_id" + add_foreign_key "decidim_verifications_conflicts", "decidim_users", column: "managed_user_id" + add_foreign_key "decidim_verifications_csv_data", "decidim_organizations" + add_foreign_key "oauth_access_grants", "decidim_users", column: "resource_owner_id" + add_foreign_key "oauth_access_grants", "oauth_applications", column: "application_id" + add_foreign_key "oauth_access_tokens", "decidim_users", column: "resource_owner_id" + add_foreign_key "oauth_access_tokens", "oauth_applications", column: "application_id" + add_foreign_key "oauth_applications", "decidim_organizations" +end diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 0000000..d821068 --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the bin/rails db:seed command (or created alongside the database with db:setup). +# +# Examples: +# +# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) +# Character.create(name: 'Luke', movie: movies.first) +# You can remove the 'faker' gem if you do not want Decidim seeds. +Decidim.seed! diff --git a/docker-compose-etherpad.yml b/docker-compose-etherpad.yml new file mode 100644 index 0000000..59c2c8c --- /dev/null +++ b/docker-compose-etherpad.yml @@ -0,0 +1,80 @@ +# Please replace all the values that start with CHANGE_ME. +version: '3' +services: + app: + environment: + # Title of the Etherpad Lite instance. Defaults to "Etherpad". + - ETHERPAD_TITLE=Decidim pads + # Port of the Etherpad Lite instance. Defaults to 9001. + - ETHERPAD_PORT=9001 + # If set, an admin account is enabled for Etherpad, and the /admin/ interface is accessible via it. + - ETHERPAD_ADMIN_PASSWORD=CHANGE_ME_ADMIN_PASSWORD + # If the admin password is set, this defaults to "admin". Otherwise the user can set it to another username. + - ETHERPAD_ADMIN_USER=CHANGE_ME_ADMIN_USER + # Type of databse to use. Defaults to mysql. + - ETHERPAD_DB_TYPE=mysql + # Hostname of the database to use. Defaults to mysql. + - ETHERPAD_DB_HOST=mysql + # By default Etherpad Lite will attempt to connect as root to the database container. + - ETHERPAD_DB_USER=root + # Password to use, mandatory. If legacy links are used and ETHERPAD_DB_USER is root, then MYSQL_ENV_MYSQL_ROOT_PASSWORD is automatically used. + - ETHERPAD_DB_PASSWORD=CHANGE_ME_PASSWORD + # The database to use. Defaults to etherpad. If the database is not available, it will be created when the container is launched (only if the database type is either mysql or postgres, and the user need to have the right to create the database). + - ETHERPAD_DB_NAME=etherpad + # The charset to use. Defaults to utf8mb4. + - ETHERPAD_DB_CHARSET=utf8mb4 + # if file APIKEY.txt is missing, the variable value is used to provision it + - ETHERPAD_API_KEY=CHANGE_ME_API_KEY + # You can skip this if you are not using any proxy to handle SSL certificates. + - "TRUST_PROXY=true" + # Ensure this etherpad allows cookies while embeded in an Iframe + - "COOKIE_SAME_SITE=None" + # Official image is etherpad/etherpad but the latest version does not allow yet setting cookies to SameSite=None + image: 'platoniq/etherpad:1.8.7' + deploy: + replicas: 1 + update_config: + parallelism: 1 + restart_policy: + condition: on-failure + labels: + - com.df.notify=true + - com.df.port=9001 + - com.df.serviceDomain=CHANGE_ME_PADS_SERVER_HOST_NAME + proxy: + image: dockerflow/docker-flow-proxy + ports: + - 80:80 + - 443:443 + environment: + - LISTENER_ADDRESS=swarm-listener + - MODE=swarm + deploy: + replicas: 1 + restart_policy: + condition: on-failure + swarm-listener: + image: dockerflow/docker-flow-swarm-listener + volumes: + - /var/run/docker.sock:/var/run/docker.sock + environment: + - DF_NOTIFY_CREATE_SERVICE_URL=http://proxy:8080/v1/docker-flow-proxy/reconfigure + - DF_NOTIFY_REMOVE_SERVICE_URL=http://proxy:8080/v1/docker-flow-proxy/remove + deploy: + replicas: 1 + restart_policy: + condition: on-failure + mysql: + environment: + - MYSQL_ROOT_PASSWORD=CHANGE_ME_PASSWORD + image: 'mysql:5.7' + volumes: + - mysql:/var/lib/mysql + deploy: + replicas: 1 + update_config: + parallelism: 1 + restart_policy: + condition: on-failure +volumes: + mysql: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d00fe73 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,26 @@ +version: '3' +services: + app: + image: decidim/decidim:0.28.0 + volumes: + - .:/app + - bundle:/usr/local/bundle + - node_modules:/app/node_modules + environment: + - PORT=3000 + - DATABASE_HOST=pg + - DATABASE_USERNAME=postgres + - RAILS_ENV=development + ports: + - 3000:3000 + links: + - pg + command: bundle exec puma + pg: + image: postgres + volumes: + - pg-data:/var/lib/postgresql/data +volumes: + node_modules: {} + bundle: {} + pg-data: {} diff --git a/lib/assets/.keep b/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/lib/tasks/.keep b/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/log/.keep b/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3263f26 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,18274 @@ +{ + "name": "decidim-inspire", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "decidim-inspire", + "version": "0.1.0", + "dependencies": { + "@decidim/browserslist-config": "^0.28.0", + "@decidim/core": "^0.28.0", + "@decidim/elections": "^0.28.0", + "@decidim/webpacker": "^0.28.0", + "@rails/actioncable": "^6.1.7", + "codemirror": "^5.65.16", + "form-storage": "^1.3.5", + "formBuilder": "^3.19.7", + "highlight.js": "^11.9.0", + "inline-attacher": "^0.0.7", + "jsrender": "^1.0.14", + "leaflet.featuregroup.subgroup": "^1.0.2", + "tom-select": "^2.2.2" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.24.1", + "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-runtime": "^7.24.3", + "@babel/preset-env": "^7.24.4", + "@babel/preset-react": "^7.24.1", + "@decidim/dev": "^0.28.0", + "@decidim/eslint-config": "^0.28.0", + "@decidim/prettier-config": "^0.28.0", + "@decidim/stylelint-config": "^0.28.0", + "postcss-scss": "^4.0.9", + "sass-embedded": "~1.57.1" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@apollo/client": { + "version": "3.9.11", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.9.11.tgz", + "integrity": "sha512-H7e9m7cRcFO93tokwzqrsbnfKorkpV24xU30hFH5u2g6B+c1DMo/ouyF/YrBPdrTzqxQCjTUmds/FLmJ7626GA==", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@wry/caches": "^1.0.0", + "@wry/equality": "^0.5.6", + "@wry/trie": "^0.5.0", + "graphql-tag": "^2.12.6", + "hoist-non-react-statics": "^3.3.2", + "optimism": "^0.18.0", + "prop-types": "^15.7.2", + "rehackt": "0.0.6", + "response-iterator": "^0.2.6", + "symbol-observable": "^4.0.0", + "ts-invariant": "^0.10.3", + "tslib": "^2.3.0", + "zen-observable-ts": "^1.2.5" + }, + "peerDependencies": { + "graphql": "^15.0.0 || ^16.0.0", + "graphql-ws": "^5.5.5", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" + }, + "peerDependenciesMeta": { + "graphql-ws": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "subscriptions-transport-ws": { + "optional": true + } + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", + "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.4", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz", + "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", + "dependencies": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "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==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@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.24.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", + "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "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==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz", + "integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "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", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", + "dependencies": { + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz", + "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "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==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "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==", + "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.24.0", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@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-transform-property-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz", + "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz", + "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", + "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/polyfill": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", + "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/polyfill/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/@babel/preset-env": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz", + "integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==", + "dependencies": { + "@babel/compat-data": "^7.24.4", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.4", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.1", + "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz", + "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-transform-react-display-name": "^7.24.1", + "@babel/plugin-transform-react-jsx": "^7.23.4", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, + "node_modules/@babel/runtime": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.8.0.tgz", + "integrity": "sha512-qR9FwI8QKIveDnUYutvfzbC21UZJJryYrLuZGjeZ/VGz+vXelUkK+xgkOHsvPEdYEdxtgUUq4313N8QtOehJ1Q==" + }, + "node_modules/@codemirror/language": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-0.20.2.tgz", + "integrity": "sha512-WB3Bnuusw0xhVvhBocieYKwJm04SOk5bPoOEYksVHKHcGHFOaYaw+eZVxR4gIqMMcGzOIUil0FsCmFk8yrhHpw==", + "peer": true, + "dependencies": { + "@codemirror/state": "^0.20.0", + "@codemirror/view": "^0.20.0", + "@lezer/common": "^0.16.0", + "@lezer/highlight": "^0.16.0", + "@lezer/lr": "^0.16.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/state": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-0.20.1.tgz", + "integrity": "sha512-ms0tlV5A02OK0pFvTtSUGMLkoarzh1F8mr6jy1cD7ucSC2X/VLHtQCxfhdSEGqTYlQF2hoZtmLv+amqhdgbwjQ==", + "peer": true + }, + "node_modules/@codemirror/view": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-0.20.7.tgz", + "integrity": "sha512-pqEPCb9QFTOtHgAH5XU/oVy9UR/Anj6r+tG5CRmkNVcqSKEPmBU05WtN/jxJCFZBXf6HumzWC9ydE4qstO3TxQ==", + "peer": true, + "dependencies": { + "@codemirror/state": "^0.20.0", + "style-mod": "^4.0.0", + "w3c-keyname": "^2.2.4" + } + }, + "node_modules/@csstools/cascade-layer-name-parser": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.9.tgz", + "integrity": "sha512-RRqNjxTZDUhx7pxYOBG/AkCVmPS3zYzfE47GEhIGkFuWFTQGJBgWOUUkKNo5MfxIfjDz5/1L3F3rF1oIsYaIpw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.1.0.tgz", + "integrity": "sha512-pWRKF6cDwget8HowIIf2MqEmqIca/cf8/jO4b3PRtUF5EfQXYMtBIKycXB4yXTCUmwLKOoRZAzh/hjnc7ywOIg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.0.tgz", + "integrity": "sha512-iQqIW5vDPqQdLx07/atCuNKDprhIWjB0b8XRhUyXZWBZYUG+9mNyFwyu30rypX84WLevVo25NYW2ipxR8WyseQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.6.3.tgz", + "integrity": "sha512-pQPUPo32HW3/NuZxrwr3VJHE+vGqSTVI5gK4jGbuJ7eOFUrsTmZikXcVdInCVWOvuxK5xbCzwDWoTlZUCAKN+A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/color-helpers": "^4.1.0", + "@csstools/css-calc": "^1.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz", + "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz", + "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz", + "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4" + } + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.4.tgz", + "integrity": "sha512-MKErv8lpEwVmAcAwidY1Kfd3oWrh2Q14kxHs9xn26XzjP/PrcdngWq63lJsZeMlBY7o+WlEOeE+FP6zPzeY2uw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/selector-specificity": "^3.0.3", + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", + "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.13.tgz", + "integrity": "sha512-gM24cIPU45HSPJ2zllz7VKjS1OKQS1sKOMI7Wsw8gFyXSGAGrxhYo++McylOqOXd8ecMaKxKQMUJqJVibvJYig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.6.3", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-function": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.13.tgz", + "integrity": "sha512-mD8IIfGVeWkN1H1wfCqYePOg4cDnVrOXm4P0OlYcvKriq6sImGCGShv/2D88q6s3iUlLXfUBES+DUjLVjDMhnw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.6.3", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-exponential-functions": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.5.tgz", + "integrity": "sha512-7S7I7KgwHWQYzJJAoIjRtUf7DQs1dxipeg1A6ikZr0PYapNJX7UHz0evlpE67SQqYj1xBs70gpG7xUv3uLp4PA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-calc": "^1.2.0", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.2.tgz", + "integrity": "sha512-E0xz2sjm4AMCkXLCFvI/lyl4XO6aN1NCSMMVEOngFDJ+k2rDwfr6NDjWljk1li42jiLNChVX+YFnmfGCigZKXw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.6.tgz", + "integrity": "sha512-qGFpHU9cRf9qqkbHh9cWMTlBtGi/ujPgP/znQdwkbB4TgDR1ddI5wRRrksBsx64sfoUSlIEd70bxXzD9FtfdLg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.6.3", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.14.tgz", + "integrity": "sha512-VMWC3xtpchHJoRBb/fs1gJR/5nHopX+0GwwmgdCI1DjROtfWUKIW0nv8occ922Gv0/Lk93XBtYBv8JttVBMZUQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.6.3", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.12.tgz", + "integrity": "sha512-90kIs+FsM6isAXLVoFHTTl4h0J6g1J1M6ahpIjAs6/k7a2A9FB/q+l0MHpLre0ZiPlBf2y3e1j4L+79vml7kJw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.6.3", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.6.tgz", + "integrity": "sha512-fHaU9C/sZPauXMrzPitZ/xbACbvxbkPpHoUgB9Kw5evtsBWdVkVrajOyiT9qX7/c+G1yjApoQjP1fQatldsy9w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-1.0.1.tgz", + "integrity": "sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.6.tgz", + "integrity": "sha512-HilOhAsMpFheMYkuaREZx+CGa4hsG6kQdzwXSsuqKDFzYz2eIMP213+3dH/vUbPXaWrzqLKr8m3i0dgYPoh7vg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/selector-specificity": "^3.0.3", + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", + "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-light-dark-function": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.3.tgz", + "integrity": "sha512-izW8hvhOqJlarLcGXO5PSylW9pQS3fytmhRdx2/e1oZFi15vs7ZShOHcREHJ3FfGdYqDA10cP9uhH0A3hmm1Rw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-float-and-clear": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.1.tgz", + "integrity": "sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overflow": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-1.0.1.tgz", + "integrity": "sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overscroll-behavior": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-1.0.1.tgz", + "integrity": "sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-resize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.1.tgz", + "integrity": "sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-viewport-units": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.7.tgz", + "integrity": "sha512-L4G3zsp/bnU0+WXUyysihCUH14LkfMgUJsS9vKz3vCYbVobOTqQRoNXnEPpyNp8WYyolLqAWbGGJhVu8J6u2OQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-minmax": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.4.tgz", + "integrity": "sha512-xl/PIO3TUbXO1ZA4SA6HCw+Q9UGe2cgeRKx3lHCzoNig2D4bT5vfVCOrwhxjUb09oHihc9eI3I0iIfVPiXaN1A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-calc": "^1.2.0", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/media-query-list-parser": "^2.1.9" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.7.tgz", + "integrity": "sha512-HBDAQw1K0NilcHGMUHv8jzf2mpOtcWTVKtuY3AeZ5TS1uyWWNVi5/yuA/tREPLU9WifNdqHQ+rfbsV/8zTIkTg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/media-query-list-parser": "^2.1.9" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.2.tgz", + "integrity": "sha512-ySUmPyawiHSmBW/VI44+IObcKH0v88LqFe0d09Sb3w4B1qjkaROc6d5IA3ll9kjD46IIX/dbO5bwFN/swyoyZA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.2.tgz", + "integrity": "sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.13.tgz", + "integrity": "sha512-xbzMmukDFAwCt2+279io7ZiamZj87s6cnU3UgKB3G+NMpRX9A6uvN8xlnTLCe384hqg6hix5vlOmwkxqACb5pg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.6.3", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.2.0.tgz", + "integrity": "sha512-BZlirVxCRgKlE7yVme+Xvif72eTn1MYXj8oZ4Knb+jwaH4u3AN1DjbhM7j86RP5vvuAOexJ4JwfifYYKWMN/QQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-relative-color-syntax": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.13.tgz", + "integrity": "sha512-mENWPNcHdiEYtjHFfZP9U1jNukQgFpSQ7wvTvwiadK3qgNBiSl0vMSinM9kKsGsJLTHQ0LEAqWLHurU52I4Jeg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.6.3", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.1.tgz", + "integrity": "sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.6.tgz", + "integrity": "sha512-rnyp8tWRuBXERTHVdB5hjUlif5dQgPcyN+BX55wUnYpZ3LN9QPfK2Z3/HUZymwyou8Gg6vhd6X2W+g1pLq1jYg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-calc": "^1.2.0", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.5.tgz", + "integrity": "sha512-qKxXpD0TYINkUtWDN1RHdeWKtZCzEv5j3UMT/ZGqyY27icwCFw7iKO0bUeLSHjYFBqhurCWvoOsa9REqLdrNDw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/color-helpers": "^4.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.6.tgz", + "integrity": "sha512-i5Zd0bMJooZAn+ZcDmPij2WCkcOJJJ6opzK+QeDjxbMrYmoGQl0CY8FDHdeQyBF1Nly+Q0Fq3S7QfdNLKBBaCg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-calc": "^1.2.0", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.1.tgz", + "integrity": "sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/utilities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-1.0.0.tgz", + "integrity": "sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@decidim/browserslist-config": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@decidim/browserslist-config/-/browserslist-config-0.28.0.tgz", + "integrity": "sha512-3yaARDbrjg7I9BaLXX1BQ3k47kN7GcUxPr39yfGJwcqKl1AYdapa5bvlCdq2Np8ij9tInaSEHIHBfFGmS81/ww==" + }, + "node_modules/@decidim/core": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@decidim/core/-/core-0.28.0.tgz", + "integrity": "sha512-0mmJkpNMNzcNdQavx+svuhaA40kUNBheU6cdVd0FYPNEkQvFDUbS6yMWhrbhrU31ccqZMNahX/8huLdPMApj3Q==", + "dependencies": { + "@picmo/popup-picker": "^5.8.4", + "@rails/activestorage": "^6.0.4", + "@tarekraafat/autocomplete.js": "^10.2.6", + "@tiptap/core": "~2.1.12", + "@tiptap/extension-blockquote": "~2.1.12", + "@tiptap/extension-bold": "~2.1.12", + "@tiptap/extension-bullet-list": "~2.1.12", + "@tiptap/extension-character-count": "~2.1.12", + "@tiptap/extension-code": "~2.1.12", + "@tiptap/extension-code-block": "~2.1.12", + "@tiptap/extension-document": "~2.1.12", + "@tiptap/extension-dropcursor": "~2.1.12", + "@tiptap/extension-gapcursor": "~2.1.12", + "@tiptap/extension-hard-break": "~2.1.12", + "@tiptap/extension-heading": "~2.1.12", + "@tiptap/extension-history": "~2.1.12", + "@tiptap/extension-horizontal-rule": "~2.1.12", + "@tiptap/extension-image": "~2.1.12", + "@tiptap/extension-italic": "~2.1.12", + "@tiptap/extension-link": "~2.1.12", + "@tiptap/extension-list-item": "~2.1.12", + "@tiptap/extension-mention": "~2.1.12", + "@tiptap/extension-ordered-list": "~2.1.12", + "@tiptap/extension-paragraph": "~2.1.12", + "@tiptap/extension-strike": "~2.1.12", + "@tiptap/extension-text": "~2.1.12", + "@tiptap/extension-underline": "~2.1.12", + "@tiptap/pm": "~2.1.12", + "@tiptap/starter-kit": "~2.1.12", + "@tiptap/suggestion": "~2.1.12", + "@zeitiger/appendaround": "^1.0.0", + "a11y-accordion-component": "^1.2.6", + "a11y-dialog-component": "^5.5.1", + "a11y-dropdown-component": "^1.2.0", + "axios": "^1.4.0", + "classnames": "^2.2.5", + "d3": "^7.8.5", + "dayjs": "^1.11.0", + "diff": "^5.0.0", + "drag-on-drop": "^3.6.1", + "foundation-sites": "^6.7.0", + "graphiql": "^1.4.7", + "html5sortable": "0.10.0", + "identity-obj-proxy": "^3.0.0", + "jquery": "^3.2.1", + "jquery-serializejson": "2.9.0", + "js-cookie": "^3.0.5", + "leaflet": "1.3.1", + "leaflet-tilelayer-here": "1.0.2", + "leaflet.markercluster": "1.4.1", + "morphdom": "2.6.1", + "prop-types": "^15.7.2", + "raf": "^3.4.1", + "react": "^16.3.0", + "react-dom": "^16.3.0", + "react-i18nify": "^1.8.8", + "select": "^1.1.2", + "svg4everybody": "2.1.9", + "tom-select": "2.2.2", + "tributejs": "5.1.3", + "unfetch": "^3.0.0", + "uuid": "^9.0.0" + } + }, + "node_modules/@decidim/decidim-bulletin_board": { + "version": "0.24.4", + "resolved": "https://registry.npmjs.org/@decidim/decidim-bulletin_board/-/decidim-bulletin_board-0.24.4.tgz", + "integrity": "sha512-FopsEMwK1Pm2wMK4EOP0hSHip33FK65CNhcaXkKM4tMRNqi4kRCw8nHSozLnHo/uSXzHU5fKK7tJE3gTP3kiGg==", + "dependencies": { + "@apollo/client": "^3.2.7", + "core-js": "^3.8.3", + "graphql": "^15.4.0", + "node-jose": "^2.0.0", + "regenerator-runtime": "^0.13.7", + "rxjs": "^6.6.3", + "webpack": "^5.11.0", + "webpack-cli": "^4.2.0" + } + }, + "node_modules/@decidim/decidim-bulletin_board/node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/@decidim/dev": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@decidim/dev/-/dev-0.28.0.tgz", + "integrity": "sha512-F6sMVCYplCfcIcKstXRWetT/3TcpVYux3D0T0E/pFb+oy6va05k0wKRwUEE0qphq72WMXfMZMJKcp5z/U9KWFA==", + "dev": true, + "dependencies": { + "@linthtml/linthtml": "^0.9.5", + "axe-core": "^4.7.2", + "markdownlint-cli": "^0.35.0" + } + }, + "node_modules/@decidim/elections": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@decidim/elections/-/elections-0.28.0.tgz", + "integrity": "sha512-5sLr44KsksJz0eakUnwC2INzvCzq/BQtVu95OS0J22RU/dNvUGadzBOoTufrWbz+7UdkhAS9dbCjtjWT6FOOuQ==", + "dependencies": { + "@decidim/decidim-bulletin_board": "0.24.4", + "@decidim/voting_schemes-dummy": "0.24.4", + "@decidim/voting_schemes-electionguard": "0.24.4" + } + }, + "node_modules/@decidim/eslint-config": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@decidim/eslint-config/-/eslint-config-0.28.0.tgz", + "integrity": "sha512-xmb6XI1I771Q2QgDoBZZunRjnsjWboluXce2XVG+IbmaYBGdxnmpBSQSceTF2TDjG1OPqqIO9vKunNaEWpEVOA==", + "dev": true, + "peerDependencies": { + "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-node": "^11.1.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.32.2" + } + }, + "node_modules/@decidim/prettier-config": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@decidim/prettier-config/-/prettier-config-0.28.0.tgz", + "integrity": "sha512-4GMycHJJEEU2Z8DsYUMLTH2Ub7gm4RWzx9tExGO+VwrAn4GnKii4K3KofZe9DkdyROi1h46d8z5W97ONYsKhgw==", + "dev": true, + "peerDependencies": { + "prettier": "^2.3.2" + } + }, + "node_modules/@decidim/stylelint-config": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@decidim/stylelint-config/-/stylelint-config-0.28.0.tgz", + "integrity": "sha512-vYr6HOqbVI0jEZsNkDZy8rmWiu3TxT5YYdpp4AXoP/FIT3+Y9VxyHYItgQFwlwNbEfUkvFUolwxAlC2vwhHVfg==", + "dev": true, + "peerDependencies": { + "stylelint": "^15.3.0", + "stylelint-prettier": "^3.0.0" + } + }, + "node_modules/@decidim/voting_schemes-dummy": { + "version": "0.24.4", + "resolved": "https://registry.npmjs.org/@decidim/voting_schemes-dummy/-/voting_schemes-dummy-0.24.4.tgz", + "integrity": "sha512-SwyoY5cM7g0A4BISUvpeS569EEIzXwcrXMJmu6R48Iv+cDLkNpEZyeFvKN2gwZzTekLm/mmUebmeN3dXYA9HzQ==" + }, + "node_modules/@decidim/voting_schemes-electionguard": { + "version": "0.24.4", + "resolved": "https://registry.npmjs.org/@decidim/voting_schemes-electionguard/-/voting_schemes-electionguard-0.24.4.tgz", + "integrity": "sha512-EKTdPKaKIykDtcN/pe0s1HmUuLvan9bEakoDJ9wJNVcYbRtffsb6RaG3LBC6dVPAZYwtem3t0zVHUbIVCCnlCw==" + }, + "node_modules/@decidim/webpacker": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@decidim/webpacker/-/webpacker-0.28.0.tgz", + "integrity": "sha512-ltLQSu17jzOeAgDFLrPLudnxcBjkGkO7S9oUk+IriBYV+14mCsb/qUf/gTVA5r7Nz4F1U5t/EWPa+lBLnFZ4Ag==", + "dependencies": { + "@babel/core": "^7.22.9", + "@babel/eslint-parser": "^7.22.9", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-runtime": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@babel/preset-react": "^7.22.5", + "@babel/runtime": "^7.22.6", + "@rails/ujs": "^6.1.7", + "@tailwindcss/typography": "^0.5.2", + "autoprefixer": "^10.4.14", + "babel-loader": "^9.1.3", + "compression-webpack-plugin": "^10.0.0", + "core-js": "~3.33.1", + "css-loader": "^6.8.1", + "expose-loader": "^4.1.0", + "glob": "^10.3.3", + "js-yaml": "^4.1.0", + "mini-css-extract-plugin": "^2.7.6", + "path-complete-extname": "^1.0.0", + "pnp-webpack-plugin": "^1.7.0", + "postcss": ">=8.4.31", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-import": "^15.1.0", + "postcss-loader": "^7.3.3", + "postcss-preset-env": "^9.0.0", + "postcss-scss": "^4.0.6", + "sass-embedded": "^1.63.6", + "shakapacker": "~7.1.0", + "source-map-loader": "^4.0.1", + "style-loader": "^3.3.3", + "tailwindcss": "^3.3.2", + "terser-webpack-plugin": "^5.3.9", + "webpack": "^5.88.1", + "webpack-assets-manifest": "^5.1.0", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^4.15.1", + "webpack-merge": "^5.9.0", + "webpack-sources": "^3.2.3", + "workbox-recipes": "^7.0.0", + "workbox-webpack-plugin": "^7.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@decidim/webpacker/node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@decidim/webpacker/node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@decidim/webpacker/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@decidim/webpacker/node_modules/core-js": { + "version": "3.33.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.3.tgz", + "integrity": "sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/@decidim/webpacker/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@decidim/webpacker/node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.75.0.tgz", + "integrity": "sha512-8ZhQYJSCcjMRClyPpA09ZQ9p0Q9NtYxfMbhifBgUoQZC47Co5QJa0ykhfV/SY6mIqK7aAhMF7NAD5h0MEe2vpg==", + "dependencies": { + "@bufbuild/protobuf": "^1.0.0", + "buffer-builder": "^0.2.0", + "immutable": "^4.0.0", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-android-arm": "1.75.0", + "sass-embedded-android-arm64": "1.75.0", + "sass-embedded-android-ia32": "1.75.0", + "sass-embedded-android-x64": "1.75.0", + "sass-embedded-darwin-arm64": "1.75.0", + "sass-embedded-darwin-x64": "1.75.0", + "sass-embedded-linux-arm": "1.75.0", + "sass-embedded-linux-arm64": "1.75.0", + "sass-embedded-linux-ia32": "1.75.0", + "sass-embedded-linux-musl-arm": "1.75.0", + "sass-embedded-linux-musl-arm64": "1.75.0", + "sass-embedded-linux-musl-ia32": "1.75.0", + "sass-embedded-linux-musl-x64": "1.75.0", + "sass-embedded-linux-x64": "1.75.0", + "sass-embedded-win32-arm64": "1.75.0", + "sass-embedded-win32-ia32": "1.75.0", + "sass-embedded-win32-x64": "1.75.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-darwin-arm64": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.75.0.tgz", + "integrity": "sha512-lb7Wkq69+AfD/tnopRX9RSu3d99Gsu1iIAhs3GyMh2N2AnVooASqKJ6I3IAbKnGh+MkXOISsoeyTP4hSnPyuqw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-darwin-x64": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.75.0.tgz", + "integrity": "sha512-Lw02PAS0bY7Q4v2fWxlFUU/T/1AV49H2+Oirxtij5nF8rTgjNHlr/7cOQp/f8bRdG5SnPhJspy//c6K8X7cF9w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-linux-arm": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.75.0.tgz", + "integrity": "sha512-s4yDbv/MEMVWr6E6uk7T/Fh4iX71NQDBDVQ/tbq4+VgF/SAo2YdnW1p97zwJjqwxNgIo76o21HaZO4rs66Ur8A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-linux-arm64": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.75.0.tgz", + "integrity": "sha512-v1d1Zzje46dXzRFm594RfkwdFnbPz1vlxM5vtLoz2d/r+TijhpVzNyy4dY4Dz0MEIcAU+edzB2P9MIHdX9yP9A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-linux-ia32": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.75.0.tgz", + "integrity": "sha512-fxpWoX9Bc4rSA863aehnPPibiIRisSBktqKY5vkQnTg4L7SDxPwXMvHeL0LZQOG1t6+baSnjhOUZSjfwbl09MQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-linux-x64": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.75.0.tgz", + "integrity": "sha512-L7x3orLODCRds6PpDfrb6bbh6IdqHDzcwyt6VkcbTN+KtbMI4PfNGKHeo7f2K8wMbCiFK3BGJqMSPxNRuVp19A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-win32-ia32": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.75.0.tgz", + "integrity": "sha512-q/uE8q8PLG7Y7mcP1Lsiwg+6FwShj8dLk76Fa2FB68odLn42/aZ2eDHbpy+bbMgAqZqlcDDsqbCDHF9O3d0KrA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "bin": { + "sass": "dart-sass/sass.bat" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-win32-x64": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.75.0.tgz", + "integrity": "sha512-lIT3ziKm2L9XGwP3S1D0Kk9ySJ6lVBLm+GZ2goQi8cAWepHSnmRz+mcd/AEqxDGEvrgNmmmvu3ylwlJ/6Nrm9w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "bin": { + "sass": "dart-sass/sass.bat" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@decidim/webpacker/node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "engines": { + "node": ">=10.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==", + "peer": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "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==", + "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==", + "peer": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "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==", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, + "node_modules/@graphiql/react": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@graphiql/react/-/react-0.10.0.tgz", + "integrity": "sha512-8Xo1O6SQps6R+mOozN7Ht85/07RwyXgJcKNeR2dWPkJz/1Lww8wVHIKM/AUpo0Aaoh6Ps3UK9ep8DDRfBT4XrQ==", + "dependencies": { + "@graphiql/toolkit": "^0.6.1", + "codemirror": "^5.65.3", + "codemirror-graphql": "^1.3.2", + "copy-to-clipboard": "^3.2.0", + "escape-html": "^1.0.3", + "graphql-language-service": "^5.0.6", + "markdown-it": "^12.2.0", + "set-value": "^4.1.0" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@graphiql/toolkit": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@graphiql/toolkit/-/toolkit-0.6.1.tgz", + "integrity": "sha512-rRjbHko6aSg1RWGr3yOJQqEV1tKe8yw9mDSr/18B+eDhVLQ30yyKk2NznFUT9NmIDzWFGR2pH/0lbBhHKmUCqw==", + "dependencies": { + "@n1ru4l/push-pull-async-iterable-iterator": "^3.1.0", + "meros": "^1.1.4" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0", + "graphql-ws": ">= 4.5.0" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "peer": true, + "dependencies": { + "@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==", + "peer": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "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==", + "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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" + }, + "node_modules/@lezer/common": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.16.1.tgz", + "integrity": "sha512-qPmG7YTZ6lATyTOAWf8vXE+iRrt1NJd4cm2nJHK+v7X9TsOF6+HtuU/ctaZy2RCrluxDb89hI6KWQ5LfQGQWuA==", + "peer": true + }, + "node_modules/@lezer/highlight": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-0.16.0.tgz", + "integrity": "sha512-iE5f4flHlJ1g1clOStvXNLbORJoiW4Kytso6ubfYzHnaNo/eo5SKhxs4wv/rtvwZQeZrK3we8S9SyA7OGOoRKQ==", + "peer": true, + "dependencies": { + "@lezer/common": "^0.16.0" + } + }, + "node_modules/@lezer/lr": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.16.3.tgz", + "integrity": "sha512-pau7um4eAw94BEuuShUIeQDTf3k4Wt6oIUOYxMmkZgDHdqtIcxWND4LRxi8nI9KuT4I1bXQv67BCapkxt7Ywqw==", + "peer": true, + "dependencies": { + "@lezer/common": "^0.16.0" + } + }, + "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": { + "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/@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": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@linthtml/cli/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "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/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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/@linthtml/linthtml/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@linthtml/linthtml/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@linthtml/linthtml/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@n1ru4l/push-pull-async-iterable-iterator": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-3.2.0.tgz", + "integrity": "sha512-3fkKj25kEjsfObL6IlKPAlHYPq/oYwUkkQ03zsTTiDjD7vg/RxjdiLeCydqtxHZP0JgsXL3D/X5oAkMGzuUp/Q==", + "engines": { + "node": ">=12" + } + }, + "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==", + "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" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@orchidjs/sifter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@orchidjs/sifter/-/sifter-1.0.3.tgz", + "integrity": "sha512-zCZbwKegHytfsPm8Amcfh7v/4vHqTAaOu6xFswBYcn8nznBOuseu6COB2ON7ez0tFV0mKL0nRNnCiZZA+lU9/g==", + "dependencies": { + "@orchidjs/unicode-variants": "^1.0.4" + } + }, + "node_modules/@orchidjs/unicode-variants": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@orchidjs/unicode-variants/-/unicode-variants-1.0.4.tgz", + "integrity": "sha512-NvVBRnZNE+dugiXERFsET1JlKZfM5lJDEpSMilKW4bToYJ7pxf0Zne78xyXB2ny2c2aHfJ6WLnz1AaTNHAmQeQ==" + }, + "node_modules/@picmo/popup-picker": { + "version": "5.8.5", + "resolved": "https://registry.npmjs.org/@picmo/popup-picker/-/popup-picker-5.8.5.tgz", + "integrity": "sha512-s5BGZps8LnhEeO4EMU+t8Wcc05gtbzJvdD5vovulof18+uxN2tMFpX6RMpKwhh49AQMk2EK1t31PEyjAIK7UVw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/joeattardi" + }, + "peerDependencies": { + "picmo": "^5.8.0" + } + }, + "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==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rails/actioncable": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-6.1.7.tgz", + "integrity": "sha512-F6S74NGpxhbbDRFsQFGYqefRfZPgYvePNtz9hHKYOqLturrsqrDoG+UcrxEGHsvqDUorMYfx4Wl3K8smmk/u2g==" + }, + "node_modules/@rails/activestorage": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@rails/activestorage/-/activestorage-6.1.7.tgz", + "integrity": "sha512-h++k8LBLns4O8AqzdaFp1TsCLP9VSc2hgWI37bjzJ+4D995X7Rd8kdkRmXRaNAUlHDJgy6RpnbhBJ5oiIgWTDw==", + "dependencies": { + "spark-md5": "^3.0.0" + } + }, + "node_modules/@rails/ujs": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@rails/ujs/-/ujs-6.1.7.tgz", + "integrity": "sha512-0e7WQ4LE/+LEfW2zfAw9ppsB6A8RmxbdAUPAF++UT80epY+7emuQDkKXmaK0a9lp6An50RvzezI0cIQjp1A58w==" + }, + "node_modules/@remirror/core-constants": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-2.0.2.tgz", + "integrity": "sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==" + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.12.tgz", + "integrity": "sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==", + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/@tarekraafat/autocomplete.js": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/@tarekraafat/autocomplete.js/-/autocomplete.js-10.2.7.tgz", + "integrity": "sha512-iE+dnXI8/LrTaSORrnNdSyXg/bFCbCpz/R5GUdB3ioW+9PVEhglxNcSDQNeCXtrbRG0kOBFUd4unEiwcmqyn8A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/autocompletejs" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/TarekRaafat" + }, + { + "type": "patreon", + "url": "https://patreon.com/TarekRaafat" + } + ] + }, + "node_modules/@tiptap/core": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.1.16.tgz", + "integrity": "sha512-nKnV603UyzbcrqhCXTWxDN22Ujb4VNfmKkACms1JOMGo7BVARmMCp2nBsLW8fmgCxmf8AS0LXY63tU7ILWYc5g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.1.16.tgz", + "integrity": "sha512-1OMk8cBrL0VnbnzD3XHx7U4oMDCiXRR7Spfl9JqwC9pS4RosOUBySNxpEBwhSegB0pK6sd7m44qLqj00If+cHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.1.16.tgz", + "integrity": "sha512-gz2VrBkRRsGBiOHx1qB++VUfpuRdhJp6jlgNqqHFbIkjKr2NB+u7oiH5SbjlL4eG0wlam1QA4jAkXhZgdvkA4g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.1.16.tgz", + "integrity": "sha512-Cheaep5JShO9TtRslrOObSVKtRQFKozou2ZWDas5sIeef/A/GWPfVTzusfBGE/ItHwZNaDXwJOoVnSUPT8ulfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-character-count": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-character-count/-/extension-character-count-2.1.16.tgz", + "integrity": "sha512-8ccyiZ3YOz1GXbCPOQ6dOlBBRDDyqyJILSriWN8QXpcReD692lm1zOI6qPhIvKYIluV/8eBx59IYpx/u8IoPKQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.1.16.tgz", + "integrity": "sha512-2+fVfh3qQORgMRSZ6hn+yW5/rLzlulCzMhdL07G0lWY8/eWEv3p9DCfgw9AOHrrHFim8/MVWyRkrkBM/yHX9FA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.1.16.tgz", + "integrity": "sha512-IspVmwg17Vx59W8lEIbVRIeMscJtRCdsif45CkzVv1uSHMl7tmrJh3n8vv/vrB+rnLasQrOEbEKNEqUL3eHlKQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.1.16.tgz", + "integrity": "sha512-VSOrzGnpI9dJDffFn3ZjmPKYkH/YtYeDl6nqLu7TafRqyLMSEqxxxq/+Qs/7j8jbzq6osslY0sySckSulroIOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.1.16.tgz", + "integrity": "sha512-voWEIAmxV3f9Q0gc3K89HRq8KFeOVtHJBRHYihZwxMnvq2aMIwdpCx0GbiCd4slQaBLd1ASJHz1uAigVhR2+uA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.1.16.tgz", + "integrity": "sha512-Bgjo0da0W1QOhtnT3NR7GHPmVBZykNRekNGsTA3+nxCjkqh1G32Jt58TBKP3vdLBaww3lhrii0SYVErlFgIJnA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.1.16.tgz", + "integrity": "sha512-H3Bk8Gu5pV7xH8TrzH0WAoXrJVEKsDA6Evyl7H7aCAMAvotQL0ehuuX88bjPMCSAvBXZE39wYnJCJshGbVx0BA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.1.16.tgz", + "integrity": "sha512-vFQuAAnIxDwKjTV+ScSwIaeG4Uhm1cZddnbLTru1EJfIz9VvpHDZKEyL4ZJvWuKMAhCzlw54TQhBCVHqalXyaA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-history": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.1.16.tgz", + "integrity": "sha512-9YHPf8Xqqp5CQy1hJonkBzROj0ZHR1ZaIk9IaLlAPTpdkrUDXV9SC7qp3lozQsMg4vmU3K6H5VQo4ADpnR00OQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.1.16.tgz", + "integrity": "sha512-Q+Zp0lJF7212YIuZnbMmn4KC1MZoZjQIuvSd+DOgCwKSeUcTXBbljDjOiN8yrY134r+A4fFM7KHTXWYqZGZQug==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-image": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-2.1.16.tgz", + "integrity": "sha512-idvmJzdG/u9YDt/GOCvgQMB1p/GZbBqb2Spk8BhXHoBGHR4zFo609ExccXYKR4UWs0iTACDq80VwJvfHa8XYKw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.1.16.tgz", + "integrity": "sha512-6mFGPBGxd2aICJ5Q3zYxuXO8slKoOP/PsSjEQn1bjs3h8Q3mPxHX290ePVp728o5F0myM9sxKSz2V6/VeuS/Yw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-link": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.1.16.tgz", + "integrity": "sha512-QIXYwxHi2kKU2sqDXngTpggO4ZmLm4vMxDlbWT9so1iUPAqQJW2ZRbdygFYy1txirWcoaJKocPwSJemyAeUzmw==", + "dependencies": { + "linkifyjs": "^4.1.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.1.16.tgz", + "integrity": "sha512-RLUodzFispIe1adarCEzf+OfaGZna/WR/k/HqPnbflSiJ6/I2P5MqI+ELjGGvc53eanf3+KpsHlB2Pganp8sMA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-mention": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-mention/-/extension-mention-2.1.16.tgz", + "integrity": "sha512-Egw8ZDyIEazhhI4VUErOVjnNhQMRz2MY0o2WXHKTNiSLkWcHJJDkyUgRu5b5BphjQcXNRAz0rifPaFENY0iLqg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0", + "@tiptap/suggestion": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.1.16.tgz", + "integrity": "sha512-6QLUm90wz2lfzWGV4fX5NOOFA8zKlcDBNrTeOd0V7H4fcafLmANqU/5o4LLNJmK8y8f1YAvmHr9xgciqggGJJA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.1.16.tgz", + "integrity": "sha512-JwCKSFjBLd9xAmxLe7hf1h4AucDvkGTfDb/wA1jId64g+uf0/tm6RDjnk/QD+D2YzoLGFLjQm0GAdPXTmyTPdA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.1.16.tgz", + "integrity": "sha512-Z1hmBK1QWMMGDV2MJ3KBDiMuzcScjyx88cP5ln5G7626Zxeqywf84KF+2WyHBzJWfwMWpAouzwHKe9ld39Vu1w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.1.16.tgz", + "integrity": "sha512-XzSJmAj32uYpaL/9FX3tRSU52DwZ9w+3yEffIcSN9MSwioqLsSolXOz7TuJfW6lSTar1ml9UPlRqX4dpayUTDQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-underline": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.1.16.tgz", + "integrity": "sha512-OXGzIlKz5fA9BRdqC+HOkLFfJULfq2kOXc0ipKLoUq5sNoMGvmxnJbgv+mczKCDoJR/F3NsDCHQXLmaW7AYvcw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/pm": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.1.16.tgz", + "integrity": "sha512-yibLkjtgbBSnWCXbDyKM5kgIGLfMvfbRfFzb8T0uz4PI/L54o0a4fiWSW5Fg10B5+o+NAXW2wMxoId8/Tw91lQ==", + "dependencies": { + "prosemirror-changeset": "^2.2.0", + "prosemirror-collab": "^1.3.0", + "prosemirror-commands": "^1.3.1", + "prosemirror-dropcursor": "^1.5.0", + "prosemirror-gapcursor": "^1.3.1", + "prosemirror-history": "^1.3.0", + "prosemirror-inputrules": "^1.2.0", + "prosemirror-keymap": "^1.2.0", + "prosemirror-markdown": "^1.10.1", + "prosemirror-menu": "^1.2.1", + "prosemirror-model": "^1.18.1", + "prosemirror-schema-basic": "^1.2.0", + "prosemirror-schema-list": "^1.2.2", + "prosemirror-state": "^1.4.1", + "prosemirror-tables": "^1.3.0", + "prosemirror-trailing-node": "^2.0.2", + "prosemirror-transform": "^1.7.0", + "prosemirror-view": "^1.28.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/starter-kit": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.1.16.tgz", + "integrity": "sha512-DudGvkNEB1IwfMAqBKCcT49BY275hKF6SwjTWN89cLvVBd2TBe4R6wWMNKDhwfR8fmXz/aXpGJWWO2AFimY3jg==", + "dependencies": { + "@tiptap/core": "^2.1.16", + "@tiptap/extension-blockquote": "^2.1.16", + "@tiptap/extension-bold": "^2.1.16", + "@tiptap/extension-bullet-list": "^2.1.16", + "@tiptap/extension-code": "^2.1.16", + "@tiptap/extension-code-block": "^2.1.16", + "@tiptap/extension-document": "^2.1.16", + "@tiptap/extension-dropcursor": "^2.1.16", + "@tiptap/extension-gapcursor": "^2.1.16", + "@tiptap/extension-hard-break": "^2.1.16", + "@tiptap/extension-heading": "^2.1.16", + "@tiptap/extension-history": "^2.1.16", + "@tiptap/extension-horizontal-rule": "^2.1.16", + "@tiptap/extension-italic": "^2.1.16", + "@tiptap/extension-list-item": "^2.1.16", + "@tiptap/extension-ordered-list": "^2.1.16", + "@tiptap/extension-paragraph": "^2.1.16", + "@tiptap/extension-strike": "^2.1.16", + "@tiptap/extension-text": "^2.1.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/suggestion": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-2.1.16.tgz", + "integrity": "sha512-3kYgpT1oTSgjLesAU3rV3lkcqVRV9K520/tA1IhXAC+UsofUEkflXftoMnaJjwgEfKM3n87uJlyPFEUBiC7xYg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", + "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "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, + "peer": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "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 + }, + "node_modules/@types/node": { + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/normalize-package-data": { + "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 + }, + "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 + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dependencies": { + "@types/node": "*" + } + }, + "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==", + "peer": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@wry/caches": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.1.tgz", + "integrity": "sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/context": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.4.tgz", + "integrity": "sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/equality": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.7.tgz", + "integrity": "sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/trie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.5.0.tgz", + "integrity": "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/@zeitiger/appendaround": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@zeitiger/appendaround/-/appendaround-1.0.0.tgz", + "integrity": "sha512-QticKHFFC+dnvwriTM3a48VBjN6Ac8olYar9A18bCdzKzf1xm98CHB11jJ7ABXMkhGer7ofs9ZUX/rsXoIjxKg==" + }, + "node_modules/a11y-accordion-component": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/a11y-accordion-component/-/a11y-accordion-component-1.2.6.tgz", + "integrity": "sha512-ZbhzjcyP3E871xx/TDHOz5teX4ClOnwM48BrIfEdTtbQsw9vTsNl3oUJAgSgyc1kC8r3mdQL42F/gwVFv0VHww==" + }, + "node_modules/a11y-dialog-component": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/a11y-dialog-component/-/a11y-dialog-component-5.5.1.tgz", + "integrity": "sha512-gPpHpntEJoMtUDypLvfzl+4HJVJ4vdz9Z/PXMHvDBCnuSmfb21n6V1WEUlVlH2IHHf9jl8sh4rbz9HFIojZ4rA==" + }, + "node_modules/a11y-dropdown-component": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/a11y-dropdown-component/-/a11y-dropdown-component-1.2.0.tgz", + "integrity": "sha512-qOZd1c9GiTyBKRi5rfcGgb8KF1m14/8LHTfxvv1Or2WT1awS9NSckfluKe7Wf4DjaZM65F6sWwjjY/VZEqt8Dg==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peer": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "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==" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "peer": true, + "dependencies": { + "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==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "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", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "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", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "peer": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atoa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atoa/-/atoa-1.0.0.tgz", + "integrity": "sha512-VVE1H6cc4ai+ZXo/CRWoJiHXrA1qfA31DPnx6D20+kSI547hQN5Greh51LQ1baMRMfxO5K5M4ImMtZbZt2DODQ==" + }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "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==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.0.tgz", + "integrity": "sha512-H5orY+M2Fr56DWmMFpMrq5Ge93qjNdPVqzBv5gWK3aD1OvjBEJlEzxf09z93dGVQeI0LiW+aCMIx1QtShC/zUw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "peer": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.1", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz", + "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "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==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "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": ">=10" + } + }, + "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/bulk-require/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, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "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==", + "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==", + "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-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "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", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001611", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz", + "integrity": "sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "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/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/codemirror": { + "version": "5.65.16", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.16.tgz", + "integrity": "sha512-br21LjYmSlVL0vFCPWPfhzUCT34FM/pAdK7rRIZwa0rrtrIdotvP4Oh4GUHsu2E3IrQMCfRkL/fN3ytMNxVQvg==" + }, + "node_modules/codemirror-graphql": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/codemirror-graphql/-/codemirror-graphql-1.3.2.tgz", + "integrity": "sha512-glwFsEVlH5TvxjSKGymZ1sNy37f3Mes58CB4fXOd0zy9+JzDL08Wti1b5ycy4vFZYghMDK1/Or/zRSjMAGtC2w==", + "dependencies": { + "graphql-language-service": "^5.0.6" + }, + "peerDependencies": { + "@codemirror/language": "^0.20.0", + "codemirror": "^5.65.3", + "graphql": "^15.5.0 || ^16.0.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/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/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression-webpack-plugin": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-10.0.0.tgz", + "integrity": "sha512-wLXLIBwpul/ALcm7Aj+69X0pYT3BYt6DdPn3qrgBIh9YejV9Bju9ShhlAsjujLyWMo6SAweFIWaUoFmXZNuNrg==", + "dependencies": { + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "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/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/contra": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/contra/-/contra-1.9.4.tgz", + "integrity": "sha512-N9ArHAqwR/lhPq4OdIAwH4e1btn6EIZMAz4TazjnzCiVECcWUPTma+dRAM38ERImEJBh8NiCCpjoQruSZ+agYg==", + "dependencies": { + "atoa": "1.0.0", + "ticky": "1.0.1" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-js": { + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", + "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "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==", + "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/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossvent": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/crossvent/-/crossvent-1.5.5.tgz", + "integrity": "sha512-MY4xhBYEnVi+pmTpHCOCsCLYczc0PVtGdPBz6NXNXxikLaUZo4HdAeUb1UqAo3t3yXAloSelTmfxJ+/oUqkW5w==", + "dependencies": { + "custom-event": "^1.0.0" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.1.tgz", + "integrity": "sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "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-has-pseudo": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.3.tgz", + "integrity": "sha512-qIsDxK/z0byH/mpNsv5hzQ5NOl8m1FRmOLgZpx4bG5uYHnOlO2XafeMI4mFIgNSViHwoUWcxSJZyyijaAmbs+A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/selector-specificity": "^3.0.3", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", + "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/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==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/css-prefers-color-scheme": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.1.tgz", + "integrity": "sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "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/cssdb": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.0.0.tgz", + "integrity": "sha512-hfpm8VXc7/dhcEWpLvKDLwImOSk1sa2DxL36OEiY/4h2MGfKjPYIMZo4hnEEl+TCJr2GwcX46jF5TafRASDe9w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ] + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==" + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "peer": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, + "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==", + "peer": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "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, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "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==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-matches": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-matches/-/dom-matches-2.0.0.tgz", + "integrity": "sha512-2VI856xEDCLXi19W+4BechR5/oIS6bKCKqcf16GR8Pg7dGLJ/eBOWVbCmQx2ISvYH6wTNx5Ef7JTOw1dRGRx6A==" + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": 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/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" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/drag-on-drop": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/drag-on-drop/-/drag-on-drop-3.6.1.tgz", + "integrity": "sha512-LjauwOQD00gFLQ39pg3sh6oOD2w1jZK8Ubh1RynbAt6muIdkCNzpMqQBztdmmD+h+VLhAIMRYRtEZH5P+bCBPA==", + "dependencies": { + "@babel/polyfill": "^7.0.0", + "component-emitter": "^1.2.1", + "dom-matches": "^2.0.0", + "dragula": "^3.7.2", + "element-qsa-scope": "^1.0.1", + "live-region": "^1.0.2", + "optimal-select": "^4.0.1" + } + }, + "node_modules/dragula": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/dragula/-/dragula-3.7.3.tgz", + "integrity": "sha512-/rRg4zRhcpf81TyDhaHLtXt6sEywdfpv1cRUMeFFy7DuypH2U0WUL0GTdyAQvXegviT4PJK4KuMmOaIDpICseQ==", + "dependencies": { + "contra": "1.9.4", + "crossvent": "1.5.5" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.740", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.740.tgz", + "integrity": "sha512-Yvg5i+iyv7Xm18BRdVPVm8lc7kgxM3r6iwqCH2zB7QZy1kZRNmd0Zqm0zcD9XoFREE5/5rwIuIAOT+/mzGcnZg==" + }, + "node_modules/element-matches-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/element-matches-polyfill/-/element-matches-polyfill-1.0.0.tgz", + "integrity": "sha512-6xnaB9NpWYmSgWP1/njuCanX1nopjVZRvSivd9cX7cfURGdldeT46g+3ph1pfNNiiPvHLjfhUk/8HXQkbcu7ng==" + }, + "node_modules/element-qsa-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/element-qsa-scope/-/element-qsa-scope-1.1.0.tgz", + "integrity": "sha512-oBBTdmleT5eJ0r5/3/tVg0NcWv95ut4Oxj5Oh/IkZ3kc0UACF8psJU8Rocd4aXDgtoE5WD5/rqYOXvjOE1DxIg==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/emojibase": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/emojibase/-/emojibase-6.1.0.tgz", + "integrity": "sha512-1GkKJPXP6tVkYJHOBSJHoGOr/6uaDxZ9xJ6H7m6PfdGXTmQgbALHLWaVRY4Gi/qf5x/gT/NUXLPuSHYLqtLtrQ==", + "peer": true, + "funding": { + "type": "ko-fi", + "url": "https://ko-fi.com/milesjohnson" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", + "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "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.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==" + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "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==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "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" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "peer": true, + "dependencies": { + "@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.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.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", + "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", + "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.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz", + "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-compat-utils/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-compat-utils/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/eslint-compat-utils/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-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" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-standard": { + "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": "^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": { + "version": "0.3.9", + "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", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.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" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.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" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz", + "integrity": "sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0", + "eslint-compat-utils": "^0.5.0" + }, + "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", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.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" + } + }, + "node_modules/eslint-plugin-import/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-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "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-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": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "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": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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": { + "lru-cache": "^6.0.0" + }, + "bin": { + "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/sindresorhus" + } + }, + "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-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.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "dev": true, + "peer": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.17", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.10" + }, + "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.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/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.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": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/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==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "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==", + "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==", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "peer": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "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": "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==", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "peer": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/expose-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-4.1.0.tgz", + "integrity": "sha512-oLAesnzerwDGGADzBMnu0LPqqnlVz6e2V9lTa+/4X6VeW9W93x/nJpw05WBrcIdbqXm/EdnEQpiVDFFiQXuNfg==", + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/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, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "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==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "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", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "peer": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.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", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "peer": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "peer": true + }, + "node_modules/follow-redirects": { + "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", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "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", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-serialize": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/form-serialize/-/form-serialize-0.7.2.tgz", + "integrity": "sha512-ohEA4Crzd/+hSREjGf4kSsy73WhAtQ7H+blGEz2DVd+JCi0TV5nZBSn9PaPlvrl9m29fa6xclAfpRkqZ57b1bw==" + }, + "node_modules/form-storage": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/form-storage/-/form-storage-1.3.5.tgz", + "integrity": "sha512-Pp9OE43Yy8DkBmk12Yf6i5HmWsNwDJ25IiON5JqaOrvfUE2fZQFYkGXbG9lIkum8h+JSURNulc/w6d56W9X3dA==", + "dependencies": { + "element-matches-polyfill": "^1.0.0", + "form-serialize": "^0.7.2", + "query-string": "^5.0.1", + "query-string-es5": "^6.1.4" + } + }, + "node_modules/formBuilder": { + "version": "3.19.7", + "resolved": "https://registry.npmjs.org/formBuilder/-/formBuilder-3.19.7.tgz", + "integrity": "sha512-3wR/etf9eqUyTNRKOAh8ZD/vKDU3vjIUbqifkQxF2gxsugv7SsMBmk1imnJDDffwZRLkMB9kgzuwtKfyGI8CwA==", + "dependencies": { + "jquery": ">=3.4.1", + "jquery-ui-sortable": "*" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/foundation-sites": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/foundation-sites/-/foundation-sites-6.8.1.tgz", + "integrity": "sha512-9JAuLqVgzf7EIRUqVKeYN68dU/SGe0aNJPgnejdfJKSWnBFdQLF3Zvy9WEQ1gE/gnyvwG3Ia3LkkEd9774n0bQ==", + "engines": { + "node": ">=16.0" + }, + "peerDependencies": { + "jquery": ">=3.6.0", + "motion-ui": "latest", + "what-input": ">=5.2.10" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "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" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-stdin": { + "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, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "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==", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", + "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": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/glob/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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, + "peer": true + }, + "node_modules/google-protobuf": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", + "integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "peer": true + }, + "node_modules/graphiql": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/graphiql/-/graphiql-1.11.5.tgz", + "integrity": "sha512-NI92XdSVwXTsqzJc6ykaAkKVMeC8IRRp3XzkxVQwtqDsZlVKtR2ZnssXNYt05TMGbi1ehoipn9tFywVohOlHjg==", + "dependencies": { + "@graphiql/react": "^0.10.0", + "@graphiql/toolkit": "^0.6.1", + "entities": "^2.0.0", + "graphql-language-service": "^5.0.6", + "markdown-it": "^12.2.0" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-language-service": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/graphql-language-service/-/graphql-language-service-5.2.0.tgz", + "integrity": "sha512-o/ZgTS0pBxWm3hSF4+6GwiV1//DxzoLWEbS38+jqpzzy1d/QXBidwQuVYTOksclbtOJZ3KR/tZ8fi/tI6VpVMg==", + "dependencies": { + "nullthrows": "^1.0.0", + "vscode-languageserver-types": "^3.17.1" + }, + "bin": { + "graphql": "dist/temp-bin.js" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-ws": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.16.0.tgz", + "integrity": "sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A==", + "peer": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": ">=0.11 <=16" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.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, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html5sortable": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/html5sortable/-/html5sortable-0.10.0.tgz", + "integrity": "sha512-/F2sUHnSlqXY8Pg1AxLjR5i/ijngpkl2u1x6a6JfwSsoVRZ5b/ZO9MDZopSSzjo7bTZinQbXACTrZI6mpGugMw==" + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local/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==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/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==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/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==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local/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==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inline-attacher": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/inline-attacher/-/inline-attacher-0.0.7.tgz", + "integrity": "sha512-TAOhFcPSVFizI/cdUtu/riEU6n4+aAFnRDCmKtz2T5RYqOm1016+i8G01T7C9fyve5F689k882Jp2SmFFVe26w==", + "dependencies": { + "@codemirror/view": "^6.16.0" + }, + "engines": { + "node": ">=16.0.0", + "pnpm": ">=7.0.0" + }, + "peerDependencies": { + "@codemirror/view": ">=6.0.0" + } + }, + "node_modules/inline-attacher/node_modules/@codemirror/state": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==" + }, + "node_modules/inline-attacher/node_modules/@codemirror/view": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.26.3.tgz", + "integrity": "sha512-gmqxkPALZjkgSxIeeweY/wGQXBfwTUaLs8h7OKtSwfbj9Ct3L11lD+u1sS7XHppxFQoMDiMDp07P9f3I2jWOHw==", + "dependencies": { + "@codemirror/state": "^6.4.0", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, + "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, + "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/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": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "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/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/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/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/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "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/inquirer/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/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==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/intl": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz", + "integrity": "sha512-rK0KcPHeBFBcqsErKSpvZnrOmWOj+EmDkyJ57e90YWaQNqbcivcqmKDlHEeNprDWOsKzPsh1BfSpPQdDvclHVw==" + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "peer": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-primitive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", + "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "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==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "peer": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "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==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/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/jake/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" + }, + "node_modules/jquery-serializejson": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/jquery-serializejson/-/jquery-serializejson-2.9.0.tgz", + "integrity": "sha512-xR7rjl0tRKIVioV5lOkOSv7K8BHMvGzYzC7Ech1iAYuZiYf0ksEpLC8OqjA5VApXf/qn/49O9hTmW70+/EA0vA==" + }, + "node_modules/jquery-ui-sortable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jquery-ui-sortable/-/jquery-ui-sortable-1.0.0.tgz", + "integrity": "sha512-7xAUWoEJ/jHoj48ei8CCUtiad2uM3ie3IR2b3KB0Mpmb54IbBxzVb5vtrj0zqtd0GNQDImx+BPZml9QmK2EL3w==" + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "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==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "peer": true + }, + "node_modules/json-parse-even-better-errors": { + "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==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "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/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsrender": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/jsrender/-/jsrender-1.0.14.tgz", + "integrity": "sha512-gtpx42lvbZcnG+hLHzYxMaxu0gBM5sNHwkOAgVYoJRgzsVChurFCLfTO1KjgUYEBMp84hDq46WQW8rtSAMjmFw==", + "dependencies": { + "through2": "^3.0.1" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "peer": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "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", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "peer": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "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 + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true, + "peer": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "peer": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leaflet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.3.1.tgz", + "integrity": "sha512-adQOIzh+bfdridLM1xIgJ9VnJbAUY3wqs/ueF+ITla+PLQ1z47USdBKUf+iD9FuUA8RtlT6j6hZBfZoA6mW+XQ==" + }, + "node_modules/leaflet-tilelayer-here": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/leaflet-tilelayer-here/-/leaflet-tilelayer-here-1.0.2.tgz", + "integrity": "sha512-PQytY0goCZLANGabPCPQJDhCrXrwdVP6F5NEgw/zjunrfFhQ1XwnBUNCWi0irUWQsETNntcwfkomikhlQ7uCRQ==" + }, + "node_modules/leaflet.featuregroup.subgroup": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/leaflet.featuregroup.subgroup/-/leaflet.featuregroup.subgroup-1.0.2.tgz", + "integrity": "sha512-9nCVg8nUe686+BtPbUT7ALOe/IA+8Mum+rkA8pfPpCkH0WvKevRrH+JMcMTjAoNQKVI0uxrWrLV5w298SS3ESA==" + }, + "node_modules/leaflet.markercluster": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.4.1.tgz", + "integrity": "sha512-ZSEpE/EFApR0bJ1w/dUGwTSUvWlpalKqIzkaYdYB7jaftQA/Y2Jav+eT4CMtEYFj+ZK4mswP13Q2acnPBnhGOw==", + "peerDependencies": { + "leaflet": "~1.3.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/linkifyjs": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.1.3.tgz", + "integrity": "sha512-auMesunaJ8yfkHvK4gfg1K0SaKX/6Wn9g2Aac/NwX+l5VdmFZzo/hdPGxEOETj+ryRa4/fiOPjeeKURSAJx1sg==" + }, + "node_modules/live-region": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/live-region/-/live-region-1.1.3.tgz", + "integrity": "sha512-oqJHTDW1c4t2iXOvZAOlHlVoJQWsc4rMKepKGBEKF9Km7WdTNY844oGdxS+CN2I6s6bleQcos+i983mfGfTOhg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lockfile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", + "dependencies": { + "signal-exit": "^3.0.2" + } + }, + "node_modules/lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "node_modules/lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "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", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "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.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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/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/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/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, + "dependencies": { + "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": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/markdownlint-cli/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/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/markdownlint/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/markdownlint/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, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/markdownlint/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, + "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/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": "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==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "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, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "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/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/meros": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.0.tgz", + "integrity": "sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==", + "engines": { + "node": ">=13" + }, + "peerDependencies": { + "@types/node": ">=13" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "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==", + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/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/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/morphdom": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.6.1.tgz", + "integrity": "sha512-Y8YRbAEP3eKykroIBWrjcfMw7mmwJfjhqdpSvoqinu8Y702nAwikpXcNFDiIkyvfCLxLM9Wu95RZqo4a9jFBaA==" + }, + "node_modules/motion-ui": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/motion-ui/-/motion-ui-2.0.5.tgz", + "integrity": "sha512-MJs4dS7/bSnJ92X5IB4bTIif6SwqwEDbX1F/eiUGSzIVhVTl4UqD8xr8ygg01dXZrpPrDjjUNoVkB8vT+PaY/g==", + "peer": true, + "peerDependencies": { + "jquery": ">=3.6.0" + } + }, + "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==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "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/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "peer": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-jose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-jose/-/node-jose-2.2.0.tgz", + "integrity": "sha512-XPCvJRr94SjLrSIm4pbYHKLEaOsDvJCpyFw/6V/KK/IXmyZ6SFBzAUDO9HQf4DB/nTEFcRGH87mNciOP23kFjw==", + "dependencies": { + "base64url": "^3.0.1", + "buffer": "^6.0.3", + "es6-promise": "^4.2.8", + "lodash": "^4.17.21", + "long": "^5.2.0", + "node-forge": "^1.2.1", + "pako": "^2.0.4", + "process": "^0.11.10", + "uuid": "^9.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/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, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dev": true, + "peer": true, + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "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==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optimal-select": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/optimal-select/-/optimal-select-4.0.1.tgz", + "integrity": "sha512-WLLt4DicXXeI2zLU2OF85TNbtbk8zAyLLqqKTsSVBICeoo2dzdI0YKXfkmxlCz+fVqSAR7fQ5zrHsCdeoOBzAA==" + }, + "node_modules/optimism": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.0.tgz", + "integrity": "sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ==", + "dependencies": { + "@wry/caches": "^1.0.0", + "@wry/context": "^0.7.0", + "@wry/trie": "^0.4.3", + "tslib": "^2.3.0" + } + }, + "node_modules/optimism/node_modules/@wry/trie": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.4.3.tgz", + "integrity": "sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "peer": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "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/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==" + }, + "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": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "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==", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-complete-extname": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-complete-extname/-/path-complete-extname-1.0.0.tgz", + "integrity": "sha512-CVjiWcMRdGU8ubs08YQVzhutOR5DEfO97ipRIlOGMK5Bek5nQySknBpuxVAVJ36hseTNs+vdIcv57ZrWxH7zvg==" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dependencies": { + "lru-cache": "^10.2.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==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picmo": { + "version": "5.8.5", + "resolved": "https://registry.npmjs.org/picmo/-/picmo-5.8.5.tgz", + "integrity": "sha512-7I8jfuHALF9lkt3d+XCZGP+IwH7g91vYZv6XtRnJ99IDjnm92zel0L5DEo2FX0oaHUwRMBD/kn2knTZqwItudQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "peer": true, + "dependencies": { + "emojibase": "^6.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/joeattardi" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.3.tgz", + "integrity": "sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.8.tgz", + "integrity": "sha512-BilFPTHcfWEnuQeqL83nbSPVK3tcU57S60aOrqgditarNDzOojyF0Gdc2Ur5L+zox366QjrCe0rOBLDO2pNvRQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.6.3", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.4.tgz", + "integrity": "sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.3.tgz", + "integrity": "sha512-ruBqzEFDYHrcVq3FnW3XHgwRqVMrtEPLBtD7K2YmsLKVc2jbkxzzNEctJKsPCpDZ+LeMHLKRDoSShVefGc+CkQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-media": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.4.tgz", + "integrity": "sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/cascade-layer-name-parser": "^1.0.9", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/media-query-list-parser": "^2.1.9" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-properties": { + "version": "13.3.7", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.7.tgz", + "integrity": "sha512-0N9F/GUCr/D0IazjzHahyYW2bQVDT6qDtEudiGHAhMd3XqhfM3VmfYVlkc/40DOhsPtngSNb54/Ctu8msvFOvQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/cascade-layer-name-parser": "^1.0.9", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.8.tgz", + "integrity": "sha512-fqDkGSEsO7+oQaqdRdR8nwwqH+N2uk6LE/2g4myVJJYz/Ly418lHKEleKTdV/GzjBjFcG4n0dbfuH/Pd2BE8YA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/cascade-layer-name-parser": "^1.0.9", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.1.tgz", + "integrity": "sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.6.tgz", + "integrity": "sha512-QJ+089FKMaqDxOhhIHsJrh4IP7h4PIHNC5jZP5PMmnfUScNu8Hji2lskqpFWCvu+5sj+2EJFyzKd13sLEWOZmQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-9.0.1.tgz", + "integrity": "sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-focus-within": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-8.0.1.tgz", + "integrity": "sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-5.0.1.tgz", + "integrity": "sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-6.0.3.tgz", + "integrity": "sha512-i2bXrBYzfbRzFnm+pVuxVePSTCRiNmlfssGI4H0tJQvDue+yywXwUxe68VyzXs7cGtMaH6MCLY6IbCShrSroCw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.13.tgz", + "integrity": "sha512-tzEThi3prSyomnVqaAU+k/YJib4rxeeTKVfMt+mPcEugFgp0t6xRjoc7fzaWCoEwYLC6GxGLD8/Ugx8COCqabw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.6.3", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", + "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", + "dependencies": { + "cosmiconfig": "^8.3.5", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/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==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/postcss-logical": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-7.0.1.tgz", + "integrity": "sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-nesting": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.1.tgz", + "integrity": "sha512-qc74KvIAQNa5ujZKG1UV286dhaDW6basbUy2i9AzNU/T8C9hpvGu9NZzm1SfePe2yP7sPYgpA8d4sPVopn2Hhw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/selector-resolve-nested": "^1.1.0", + "@csstools/selector-specificity": "^3.0.3", + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz", + "integrity": "sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", + "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz", + "integrity": "sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.1.tgz", + "integrity": "sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-9.0.1.tgz", + "integrity": "sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-preset-env": { + "version": "9.5.5", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.5.tgz", + "integrity": "sha512-tg71KfEgTHMM+C4LpWtKfHFWEunfWj1JThq/Odsw60MOowcffBrMAcSBDE+imftW5/BD3mpOiiTL6c+KcnGaLQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/postcss-cascade-layers": "^4.0.4", + "@csstools/postcss-color-function": "^3.0.13", + "@csstools/postcss-color-mix-function": "^2.0.13", + "@csstools/postcss-exponential-functions": "^1.0.5", + "@csstools/postcss-font-format-keywords": "^3.0.2", + "@csstools/postcss-gamut-mapping": "^1.0.6", + "@csstools/postcss-gradients-interpolation-method": "^4.0.14", + "@csstools/postcss-hwb-function": "^3.0.12", + "@csstools/postcss-ic-unit": "^3.0.6", + "@csstools/postcss-initial": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^4.0.6", + "@csstools/postcss-light-dark-function": "^1.0.3", + "@csstools/postcss-logical-float-and-clear": "^2.0.1", + "@csstools/postcss-logical-overflow": "^1.0.1", + "@csstools/postcss-logical-overscroll-behavior": "^1.0.1", + "@csstools/postcss-logical-resize": "^2.0.1", + "@csstools/postcss-logical-viewport-units": "^2.0.7", + "@csstools/postcss-media-minmax": "^1.1.4", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.7", + "@csstools/postcss-nested-calc": "^3.0.2", + "@csstools/postcss-normalize-display-values": "^3.0.2", + "@csstools/postcss-oklab-function": "^3.0.13", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/postcss-relative-color-syntax": "^2.0.13", + "@csstools/postcss-scope-pseudo-class": "^3.0.1", + "@csstools/postcss-stepped-value-functions": "^3.0.6", + "@csstools/postcss-text-decoration-shorthand": "^3.0.5", + "@csstools/postcss-trigonometric-functions": "^3.0.6", + "@csstools/postcss-unset-value": "^3.0.1", + "autoprefixer": "^10.4.19", + "browserslist": "^4.22.3", + "css-blank-pseudo": "^6.0.1", + "css-has-pseudo": "^6.0.3", + "css-prefers-color-scheme": "^9.0.1", + "cssdb": "^8.0.0", + "postcss-attribute-case-insensitive": "^6.0.3", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^6.0.8", + "postcss-color-hex-alpha": "^9.0.4", + "postcss-color-rebeccapurple": "^9.0.3", + "postcss-custom-media": "^10.0.4", + "postcss-custom-properties": "^13.3.7", + "postcss-custom-selectors": "^7.1.8", + "postcss-dir-pseudo-class": "^8.0.1", + "postcss-double-position-gradients": "^5.0.6", + "postcss-focus-visible": "^9.0.1", + "postcss-focus-within": "^8.0.1", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^5.0.1", + "postcss-image-set-function": "^6.0.3", + "postcss-lab-function": "^6.0.13", + "postcss-logical": "^7.0.1", + "postcss-nesting": "^12.1.1", + "postcss-opacity-percentage": "^2.0.0", + "postcss-overflow-shorthand": "^5.0.1", + "postcss-page-break": "^3.0.4", + "postcss-place": "^9.0.1", + "postcss-pseudo-class-any-link": "^9.0.1", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^7.0.2" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.1.tgz", + "integrity": "sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "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", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "dev": true, + "peer": true + }, + "node_modules/postcss-safe-parser": { + "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, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "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-not": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.2.tgz", + "integrity": "sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "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": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "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": ">=6.0.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prosemirror-changeset": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz", + "integrity": "sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==", + "dependencies": { + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-collab": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", + "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", + "dependencies": { + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-commands": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.5.2.tgz", + "integrity": "sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz", + "integrity": "sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz", + "integrity": "sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.0.tgz", + "integrity": "sha512-UUiGzDVcqo1lovOPdi9YxxUps3oBFWAIYkXLu3Ot+JPv1qzVogRbcizxK3LhHmtaUxclohgiOVesRw5QSlMnbQ==", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-inputrules": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz", + "integrity": "sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", + "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-markdown": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.12.0.tgz", + "integrity": "sha512-6F5HS8Z0HDYiS2VQDZzfZP6A0s/I0gbkJy8NCzzDMtcsz3qrfqyroMMeoSjAmOhDITyon11NbXSzztfKi+frSQ==", + "dependencies": { + "markdown-it": "^14.0.0", + "prosemirror-model": "^1.0.0" + } + }, + "node_modules/prosemirror-markdown/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/prosemirror-markdown/node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/prosemirror-markdown/node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/prosemirror-markdown/node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, + "node_modules/prosemirror-markdown/node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, + "node_modules/prosemirror-menu": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.4.tgz", + "integrity": "sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==", + "dependencies": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.20.0.tgz", + "integrity": "sha512-q7AY7vMjKYqDCeoedgUiAgrLabliXxndJuuFmcmc2+YU1SblvnOiG2WEACF2lwAZsMlfLpiAilA3L+TWlDqIsQ==", + "dependencies": { + "orderedmap": "^2.0.0" + } + }, + "node_modules/prosemirror-schema-basic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.2.tgz", + "integrity": "sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==", + "dependencies": { + "prosemirror-model": "^1.19.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.3.0.tgz", + "integrity": "sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.7.3" + } + }, + "node_modules/prosemirror-state": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", + "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.3.7.tgz", + "integrity": "sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==", + "dependencies": { + "prosemirror-keymap": "^1.1.2", + "prosemirror-model": "^1.8.1", + "prosemirror-state": "^1.3.1", + "prosemirror-transform": "^1.2.1", + "prosemirror-view": "^1.13.3" + } + }, + "node_modules/prosemirror-trailing-node": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-2.0.8.tgz", + "integrity": "sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==", + "dependencies": { + "@remirror/core-constants": "^2.0.2", + "escape-string-regexp": "^4.0.0" + }, + "peerDependencies": { + "prosemirror-model": "^1.19.0", + "prosemirror-state": "^1.4.2", + "prosemirror-view": "^1.31.2" + } + }, + "node_modules/prosemirror-trailing-node/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.8.0.tgz", + "integrity": "sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==", + "dependencies": { + "prosemirror-model": "^1.0.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.33.4", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.33.4.tgz", + "integrity": "sha512-xQqAhH8/HGleVpKDhQsrd+oqdyeKMxFtdCWDxWMmP+n0k27fBpyUqa8pA+RB5cFY8rqDDc1hll69aRZQa7UaAw==", + "dependencies": { + "prosemirror-model": "^1.20.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/query-string-es5": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/query-string-es5/-/query-string-es5-6.1.4.tgz", + "integrity": "sha512-pMdQETPqMQO+OUd2t3hUxBV8REa6w+iyD+o87M1qc1Vj3jBkQIIw3aZc+6rxlRTDxZ5ac+w0rGE/p4JIt2Xupg==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/query-string-es5/node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" + } + }, + "node_modules/react-i18nify": { + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/react-i18nify/-/react-i18nify-1.11.18.tgz", + "integrity": "sha512-flSSBzMI2gvJvCC+byP6Cl7vtyUsNH88VxjyER4zj8Fdl5rsLmXoJ9K4kNz8A6JUTmdFMWbTIp6aPXVIEbpE8w==", + "dependencies": { + "intl": "^1.2", + "moment": "^2.22.1", + "prop-types": "^15.6.1" + }, + "peerDependencies": { + "react": "^16.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "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 + }, + "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, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "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.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "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==", + "dependencies": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/rehackt": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.0.6.tgz", + "integrity": "sha512-l3WEzkt4ntlEc/IB3/mF6SRgNHA6zfQR7BlGOgBTOmx7IJJXojDASav+NsgXHFjHn+6RmwqsGPFgZpabWpeOdw==", + "peerDependencies": { + "@types/react": "*", + "react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "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/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/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==", + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "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/response-iterator": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/response-iterator/-/response-iterator-0.2.6.tgz", + "integrity": "sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "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 + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==" + }, + "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", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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==" + }, + "node_modules/sass-embedded": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.57.1.tgz", + "integrity": "sha512-O0s796x76bRSJIdmJ4lrK+zJLtF3XeP+0tbJzR4NAPSDnWqHLk2boUYSdfx4DnF4x9rGmcVlMWFE8UvnLMNCmw==", + "dev": true, + "dependencies": { + "buffer-builder": "^0.2.0", + "google-protobuf": "^3.11.4", + "immutable": "^4.0.0", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "sass-embedded-darwin-arm64": "1.57.1", + "sass-embedded-darwin-x64": "1.57.1", + "sass-embedded-linux-arm": "1.57.1", + "sass-embedded-linux-arm64": "1.57.1", + "sass-embedded-linux-ia32": "1.57.1", + "sass-embedded-linux-x64": "1.57.1", + "sass-embedded-win32-ia32": "1.57.1", + "sass-embedded-win32-x64": "1.57.1" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.75.0.tgz", + "integrity": "sha512-3GNCfVEw2D34aEntYHv1+VFb0fOsU2nJdz/kpHXDlE7m/zIsi9ySn9WhvYlXkNQKBXvHRf8mWrU2/mC0QXTxxQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.75.0.tgz", + "integrity": "sha512-puVKsTovpqntG0b/jjxg6+jWD907UEnc/oJ1ia89KRkvLOPD8kE+EYzxxRYrgaG2tiGSMZNuOmYcAKfQNdLdig==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-ia32": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.75.0.tgz", + "integrity": "sha512-SObSy6USALhGQoX/Lu1Gctwsb6Ob4Hkg1ISHSV8SNHeWIko4ZiHbAb1r9UMJtRznyawvZ6fjKgOY5fLJAfk3xQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "android" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.75.0.tgz", + "integrity": "sha512-CCroBmmwbVZbwOXzFg6GdbOwcczhtjJ/75cfpAoku0InDJzxCP+sVJz8LL16rLWDsVveDoXX7JKFw9Nb9zQyjQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.57.1.tgz", + "integrity": "sha512-YSfrLZkM2HdXETQdSznv2DN2GdkmBNWLAlHfDWe0toSEIB2C2YGuoqHYZtl6PBYqu8k8FH4TDyct8VzoIa+rMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.57.1.tgz", + "integrity": "sha512-xq2Au8CRLHQ+MqH2p8gQn9rYGtfQ8voCWMRz7klYmmh5kXHFjefG3opPPB8mJeSc3SIqE35SQxQEIhUbsxozpg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.57.1.tgz", + "integrity": "sha512-s+roBIgiQSg8124JmYmiSw4THWRvkF2BOclBZCb+OFLa8ZTak2WZdGs0PhqkMmZypxQ7cewh9ts+sOWN24yIrw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.57.1.tgz", + "integrity": "sha512-R0GqVqf0xEhQ5nDbj7vqmKw+/1kqiURNBl0pD4uv4inBed2YKg+7agn7Y5XE5GUWbgOz7ubjL2kt4Glr7K7xeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-ia32": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.57.1.tgz", + "integrity": "sha512-gKqMpfcjrW4S1m+cuRn88oUkr/HMv48CqyCHnfGCsrkTpIft33a1ZKW2jWm09rwmR0g/G6yGstoQO0iHWJWxuQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.75.0.tgz", + "integrity": "sha512-mVczW2hkGxXAs8I7H+m4bfZZIHd9tFR+UA2mHI+XkLE+cjyPC2FuWokc+WXyaWpqbE/KDSwqgSqY08zND7gcbA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.75.0.tgz", + "integrity": "sha512-5ZlghwIG82spTNvutXbyXRC2cOMx7TZdWoiEqZ5QXuhChB35AHk43Ex1CdItPOLX0JjRv5eSuSelCY4nBGDe8A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-ia32": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.75.0.tgz", + "integrity": "sha512-8RjKtvc1F9xP1hr+ht72CawkSr7/fZMSAhE/TORFncsPKpwN2WGqkoTBXdL22WGwi95ZAz5Zr2ZnGy8OXMDprQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.75.0.tgz", + "integrity": "sha512-bsuOEy6rjIwfc7qihDSrEnmaePUn8bR5NAAzeljlfQkRFRxivB1gysQfRPjLPbheJfChFDLiiFX2z2CQkcdKuQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "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==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.75.0.tgz", + "integrity": "sha512-wdVHtJBVykRWA2YEYsJ1bLf9sjcwa9BhHRzf03nSwS88Vc7GmflY6HyuY2Ynz+dWoth7MelgJL/XlonOs5y6/Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "bin": { + "sass": "dart-sass/sass.bat" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-ia32": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.57.1.tgz", + "integrity": "sha512-s7EhJLG9AnJNBga3I+W0rk6y/1n/i0XD34rvqR3yJgBhNKkI5rVCxFN7FAcGR50vQQbCO1MrUCmuVvld+2qvyQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.57.1.tgz", + "integrity": "sha512-b/Kgz7ADPTlPITk8e47Zf3eiuXlTGhi/eWsAoesUmkjR7jayvFNLHPhThgiRAxkzT6UlWI3Dzr+E3OBqUjegEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass-embedded/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sass-embedded/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "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==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-value": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", + "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", + "funding": [ + "https://github.com/sponsors/jonschlinkert", + "https://paypal.me/jonathanschlinkert", + "https://jonschlinkert.dev/sponsor" + ], + "dependencies": { + "is-plain-object": "^2.0.4", + "is-primitive": "^3.0.1" + }, + "engines": { + "node": ">=11.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shakapacker": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/shakapacker/-/shakapacker-7.1.0.tgz", + "integrity": "sha512-xKfF4LKrFQdMLYeIi/uBV6pfkPTO4lgCAIMx3W5+MHW61ENOXu4WeQ50qVR9u5hV6XXzi7AiS7C6dWO2GFnYAg==", + "dependencies": { + "glob": "^7.2.0", + "js-yaml": "^4.1.0", + "path-complete-extname": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14 || >=16", + "yarn": ">=1 <4" + }, + "peerDependencies": { + "@babel/core": "^7.17.9", + "@babel/plugin-transform-runtime": "^7.17.0", + "@babel/preset-env": "^7.16.11", + "@babel/runtime": "^7.17.9", + "@types/babel__core": "^7.0.0", + "@types/webpack": "^5.0.0", + "babel-loader": "^8.2.4 || ^9.0.0", + "compression-webpack-plugin": "^9.0.0 || ^10.0.0", + "terser-webpack-plugin": "^5.3.1", + "webpack": "^5.72.0", + "webpack-assets-manifest": "^5.0.6", + "webpack-cli": "^4.9.2 || ^5.0.0", + "webpack-dev-server": "^4.9.0", + "webpack-merge": "^5.8.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "@types/webpack": { + "optional": true + } + } + }, + "node_modules/shakapacker/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.2.tgz", + "integrity": "sha512-oYwAqCuL0OZhBoSgmdrLa7mv9MjommVMiQIWgcztf+eS4+8BfcUee6nenFnDhKOhzAVnk5gpZdfnz1iiBv+5sg==", + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" + }, + "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.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, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "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/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "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/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "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==", + "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/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==", + "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==" + }, + "node_modules/string-width/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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/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==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "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" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/style-mod": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==" + }, + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true, + "peer": true + }, + "node_modules/stylelint": { + "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.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.29.0", + "mathml-tag-names": "^2.1.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": "^6.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^3.0.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "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": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "prettier": ">=2.0.0", + "stylelint": ">=14.0.0" + } + }, + "node_modules/stylelint/node_modules/@csstools/selector-specificity": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", + "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", + "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/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/sponsors/sindresorhus" + } + }, + "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": { + "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/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/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/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 + }, + "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": { + "flat-cache": "^3.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "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, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/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" + } + }, + "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": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dev": true, + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "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": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": { + "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/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true, + "peer": true + }, + "node_modules/svg4everybody": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/svg4everybody/-/svg4everybody-2.1.9.tgz", + "integrity": "sha512-AS9WORVV/vk520ZHxGTlQzyDBizp/h6WyAYUbKhze/kwvQr43DwJpkIIPBomsUyKqN7N+h1deF92N9PmW+o+9A==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/table": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "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", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/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 + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz", + "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "peer": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "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/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/ticky": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ticky/-/ticky-1.0.1.tgz", + "integrity": "sha512-RX35iq/D+lrsqhcPWIazM9ELkjOe30MSeoBHQHSsRwd1YuhJO5ui1K1/R0r7N3mFvbLBs33idw+eR6j+w6i/DA==" + }, + "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", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tom-select": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tom-select/-/tom-select-2.2.2.tgz", + "integrity": "sha512-igGah1yY6yhrnN2h/Ky8I5muw/nE/YQxIsEZoYu5qaA4bsRibvKto3s8QZZosKpOd0uO8fNYhRfAwgHB4IAYew==", + "dependencies": { + "@orchidjs/sifter": "^1.0.3", + "@orchidjs/unicode-variants": "^1.0.4" + }, + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tom-select" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tributejs": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/tributejs/-/tributejs-5.1.3.tgz", + "integrity": "sha512-B5CXihaVzXw+1UHhNFyAwUTMDk1EfoLP5Tj1VhD9yybZ1I8DZJEv8tZ1l0RJo0t0tk9ZhR8eG5tEsaCvRigmdQ==" + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/ts-invariant": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", + "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": 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", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "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" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "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.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "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==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "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/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, + "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==" + }, + "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==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unfetch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-3.1.2.tgz", + "integrity": "sha512-L0qrK7ZeAudGiKYw6nzFjnJ2D5WHblUBwmHIqtPS6oKUd+Hcpk7/hKsSmcHsTlpd1TbTNsiRBUKRq3bHLNIqIw==" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "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==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "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, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "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/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/webpack": { + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.16.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-assets-manifest": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/webpack-assets-manifest/-/webpack-assets-manifest-5.2.1.tgz", + "integrity": "sha512-MsEcXVio1GY6R+b4dVfTHIDMB0RB90KajQG8neRbH92vE2S1ClGw9mNa9NPlratYBvZOhExmN0qqMNFTaCTuIg==", + "dependencies": { + "chalk": "^4.1.2", + "deepmerge": "^4.3.1", + "lockfile": "^1.0.4", + "lodash.get": "^4.4.2", + "lodash.has": "^4.5.2", + "schema-utils": "^3.3.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "^5.2.0" + } + }, + "node_modules/webpack-assets-manifest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/webpack-assets-manifest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/webpack-assets-manifest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/webpack-assets-manifest/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/webpack-assets-manifest/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-assets-manifest/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-assets-manifest/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/what-input": { + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/what-input/-/what-input-5.2.12.tgz", + "integrity": "sha512-3yrSa7nGSXGJS6wZeSkO6VNm95pB1mZ9i3wFzC1hhY7mn4/afue/MvXz04OXNdBC8bfo4AB4RRd3Dem9jXM58Q==", + "peer": true + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "peer": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "peer": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" + }, + "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/workbox-background-sync": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz", + "integrity": "sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.0.0.tgz", + "integrity": "sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==", + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-build": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.0.0.tgz", + "integrity": "sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.0.0", + "workbox-broadcast-update": "7.0.0", + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-google-analytics": "7.0.0", + "workbox-navigation-preload": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-range-requests": "7.0.0", + "workbox-recipes": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0", + "workbox-streams": "7.0.0", + "workbox-sw": "7.0.0", + "workbox-window": "7.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz", + "integrity": "sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==", + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-core": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.0.0.tgz", + "integrity": "sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==" + }, + "node_modules/workbox-expiration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.0.0.tgz", + "integrity": "sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.0.0.tgz", + "integrity": "sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "dependencies": { + "workbox-background-sync": "7.0.0", + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz", + "integrity": "sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==", + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-precaching": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.0.0.tgz", + "integrity": "sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==", + "dependencies": { + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.0.0.tgz", + "integrity": "sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==", + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-recipes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.0.0.tgz", + "integrity": "sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==", + "dependencies": { + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "node_modules/workbox-routing": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.0.0.tgz", + "integrity": "sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==", + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-strategies": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.0.0.tgz", + "integrity": "sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==", + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-streams": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.0.0.tgz", + "integrity": "sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==", + "dependencies": { + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0" + } + }, + "node_modules/workbox-sw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.0.0.tgz", + "integrity": "sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==" + }, + "node_modules/workbox-webpack-plugin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-7.0.0.tgz", + "integrity": "sha512-R1ZzCHPfzeJjLK2/TpKUhxSQ3fFDCxlWxgRhhSjMQLz3G2MlBnyw/XeYb34e7SGgSv0qG22zEhMIzjMNqNeKbw==", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "7.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.0.0.tgz", + "integrity": "sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.0.0" + } + }, + "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==", + "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/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==", + "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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi-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==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/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==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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==" + }, + "node_modules/write-file-atomic": { + "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", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "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==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zen-observable": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", + "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" + }, + "node_modules/zen-observable-ts": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", + "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", + "dependencies": { + "zen-observable": "0.8.15" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..7fd65e9 --- /dev/null +++ b/package.json @@ -0,0 +1,49 @@ +{ + "name": "decidim-inspire", + "private": true, + "dependencies": { + "@decidim/browserslist-config": "^0.28.0", + "@decidim/core": "^0.28.0", + "@decidim/elections": "^0.28.0", + "@decidim/webpacker": "^0.28.0", + "@rails/actioncable": "^6.1.7", + "codemirror": "^5.65.16", + "form-storage": "^1.3.5", + "formBuilder": "^3.19.7", + "highlight.js": "^11.9.0", + "inline-attacher": "^0.0.7", + "jsrender": "^1.0.14", + "leaflet.featuregroup.subgroup": "^1.0.2", + "tom-select": "^2.2.2" + }, + "version": "0.1.0", + "devDependencies": { + "@babel/eslint-parser": "^7.24.1", + "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-runtime": "^7.24.3", + "@babel/preset-env": "^7.24.4", + "@babel/preset-react": "^7.24.1", + "@decidim/dev": "^0.28.0", + "@decidim/eslint-config": "^0.28.0", + "@decidim/prettier-config": "^0.28.0", + "@decidim/stylelint-config": "^0.28.0", + "postcss-scss": "^4.0.9", + "sass-embedded": "~1.57.1" + }, + "browserslist": [ + "extends @decidim/browserslist-config" + ], + "scripts": { + "lint": "eslint -c .eslintrc.json --ext .js app/packs/src", + "lint-fix": "eslint -c .eslintrc.json --ext .js app/packs/src --fix", + "stylelint": "stylelint app/packs/stylesheets/**/*.scss", + "stylelint-fix": "stylelint app/packs/stylesheets/**/*.scss --fix" + }, + "stylelint": { + "extends": "@decidim/stylelint-config", + "rules": { + "block-opening-brace-space-before": "always" + } + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..1df37bf --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,18 @@ +/* eslint-disable */ + +module.exports = { + syntax: 'postcss-scss', + plugins: [ + // postcss-import must be the very first plugin https://tailwindcss.com/docs/using-with-preprocessors#build-time-imports + require('postcss-import'), + require('tailwindcss'), + require('postcss-flexbugs-fixes'), + require('postcss-preset-env')({ + autoprefixer: { + flexbox: 'no-2009' + }, + stage: 3 + }), + require('autoprefixer') + ] +} diff --git a/public/422.html b/public/422.html new file mode 100644 index 0000000..c08eac0 --- /dev/null +++ b/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/public/apple-touch-icon-precomposed.png b/public/apple-touch-icon-precomposed.png new file mode 100644 index 0000000..e69de29 diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..e69de29 diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..067c13e --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,4 @@ +# the following adds a rule for all bots to not index any page that contains a profile or search +User-agent: * +Disallow: /profiles/ +Disallow: /search diff --git a/spec/factories.rb b/spec/factories.rb new file mode 100644 index 0000000..88e9db2 --- /dev/null +++ b/spec/factories.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +require "decidim/core/test/factories" +require "decidim/decidim_awesome/test/factories" diff --git a/spec/i18n_spec.rb b/spec/i18n_spec.rb new file mode 100644 index 0000000..4a05e6d --- /dev/null +++ b/spec/i18n_spec.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require "i18n/tasks" + +describe "I18n sanity" do + let(:locales) do + ENV["ENFORCED_LOCALES"].presence || "en" + end + + let(:i18n) { I18n::Tasks::BaseTask.new(locales: locales.split(",")) } + let(:missing_keys) { i18n.missing_keys } + let(:unused_keys) { i18n.unused_keys } + let(:non_normalized_paths) { i18n.non_normalized_paths } + + it "does not have missing keys" do + expect(missing_keys).to be_empty, "#{missing_keys.inspect} are missing" + end + + it "does not have unused keys" do + expect(unused_keys).to be_empty, "#{unused_keys.inspect} are unused" + end + + unless ENV["SKIP_NORMALIZATION"] + it "is normalized" do + error_message = "The following files need to be normalized:\n" \ + "#{non_normalized_paths.map { |path| " #{path}" }.join("\n")}\n" \ + "Please run `bundle exec i18n-tasks normalize --locales #{locales}` to fix them" + + expect(non_normalized_paths).to be_empty, error_message + end + end +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb new file mode 100644 index 0000000..37d41dc --- /dev/null +++ b/spec/rails_helper.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +ENV["RAILS_ENV"] ||= "test" +require File.expand_path("../config/environment", __dir__) + +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? + +require "spec_helper" +require "rspec/rails" + +require "decidim/dev" + +Decidim::Dev.dummy_app_path = File.expand_path(File.join(__dir__, "..")) + +require "decidim/dev/test/base_spec_helper" + +# Add additional requires below this line. Rails is not loaded until this point! + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end + +RSpec.configure do |config| + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..97af286 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,102 @@ +# frozen_string_literal: true + +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + + # The settings below are suggested to provide a good initial experience + # with RSpec, but feel free to customize to your heart's content. + # # This allows you to limit a spec run to individual examples or groups + # # you care about by tagging them with `:focus` metadata. When nothing + # # is tagged with `:focus`, all examples get run. RSpec also provides + # # aliases for `it`, `describe`, and `context` that include `:focus` + # # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + # config.filter_run_when_matching :focus + # # Allows RSpec to persist some state between runs in order to support + # # the `--only-failures` and `--next-failure` CLI options. We recommend + # # you configure your source control system to ignore this file. + # config.example_status_persistence_file_path = "spec/examples.txt" + # # Limits the available syntax to the non-monkey patched syntax that is + # # recommended. For more details, see: + # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + # config.disable_monkey_patching! + # # Many RSpec users commonly either run the entire suite or an individual + # # file, and it's useful to allow more verbose output when running an + # # individual spec file. + # if config.files_to_run.one? + # # Use the documentation formatter for detailed output, + # # unless a formatter has already been configured + # # (e.g. via a command-line flag). + # config.default_formatter = "doc" + # end + # # Print the 10 slowest examples and example groups at the + # # end of the spec run, to help surface which specs are running + # # particularly slow. + # config.profile_examples = 10 + # # Run specs in random order to surface order dependencies. If you find an + # # order dependency and want to debug it, you can fix the order by providing + # # the seed, which is printed after each run. + # # --seed 1234 + # config.order = :random + # # Seed global randomization in this process using the `--seed` CLI option. + # # Setting this allows you to use `--seed` to deterministically reproduce + # # test failures related to randomization by passing the same `--seed` value + # # as the one that triggered the failure. + # Kernel.srand config.seed + config.order = :random + + config.before do + I18n.available_locales = [:en, :ca, :es] + I18n.default_locale = :en + # rubocop:disable Rails/I18nLocaleAssignment + I18n.locale = :en + # rubocop:enable Rails/I18nLocaleAssignment + Decidim.available_locales = [:en, :ca, :es] + Decidim.default_locale = :en + Capybara.server = :puma + end +end diff --git a/spec/system/decidim_awesome/custom_styles_spec.rb b/spec/system/decidim_awesome/custom_styles_spec.rb new file mode 100644 index 0000000..00a5f27 --- /dev/null +++ b/spec/system/decidim_awesome/custom_styles_spec.rb @@ -0,0 +1,119 @@ +# frozen_string_literal: true + +require "rails_helper" + +describe "Custom styles" do + let(:organization) { create(:organization) } + let!(:participatory_process) { create(:participatory_process, organization:) } + let!(:config) { create(:awesome_config, organization:, var: :scoped_styles, value: styles) } + let(:config_helper) { create(:awesome_config, organization:, var: :scoped_style_bar) } + let(:styles) do + { + "bar" => "body {background: red;}" + } + end + + before do + switch_to_host(organization.host) + visit decidim.root_path + end + + shared_examples "extra css is added" do + it "css is present" do + expect(page.body).to have_content("body {background: red;}") + end + + it "css is applied" do + expect(page.execute_script("return window.getComputedStyle($('body')[0]).backgroundColor")).to eq("rgb(255, 0, 0)") + end + end + + shared_examples "no extra css is added" do + it "css is no present" do + expect(page.body).not_to have_content("body {background: red;}") + end + + it "css is not applyied" do + expect(page.execute_script("return window.getComputedStyle($('body')[0]).backgroundColor")).to eq("rgba(0, 0, 0, 0)") + end + end + + context "when there are custom styles" do + it_behaves_like "extra css is added" + end + + context "when there are empty css boxes" do + let(:styles) do + {} + end + + it_behaves_like "no extra css is added" + end + + context "when constraints are present" do + let!(:constraint) { create(:config_constraint, awesome_config: config_helper, settings:) } + let!(:other_constraint) { create(:config_constraint, awesome_config: config_helper, settings: other_settings) } + let(:settings) do + {} + end + + let(:other_settings) do + { "participatory_space_manifest" => "other" } + end + + before do + visit decidim.root_path + end + + context "when there are custom styles" do + it_behaves_like "extra css is added" + end + + context "and there are no custom styles" do + let(:styles) do + {} + end + + it_behaves_like "no extra css is added" + end + + context "and custom styles are scoped" do + let(:settings) do + { "participatory_space_manifest" => "participatory_processes" } + end + + context "and page do not match the scope" do + it_behaves_like "no extra css is added" + end + + context "and page matches the scope" do + before do + click_link_or_button "Processes" + end + + it_behaves_like "extra css is added" + + context "and none constraint is present" do + let(:other_settings) do + { "participatory_space_manifest" => "none" } + end + + it_behaves_like "no extra css is added" + end + end + end + end + + context "when there are custom styles with special characters" do + let(:css) { %(body > a[href="hey"] { color: blue; }) } + let(:styles) do + { + "special" => css + } + end + + it "decodes them correctly" do + expect(page.body).to have_content(css) + end + end +end diff --git a/spec/system/homepage_spec.rb b/spec/system/homepage_spec.rb new file mode 100644 index 0000000..80a86f7 --- /dev/null +++ b/spec/system/homepage_spec.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require "rails_helper" + +describe "Visit the home page", perform_enqueued: true do + let(:organization) { create(:organization) } + + before do + switch_to_host(organization.host) + visit decidim.root_path + end + + it "renders the home page" do + expect(page).to have_content("Home") + end +end diff --git a/storage/.keep b/storage/.keep new file mode 100644 index 0000000..e69de29 diff --git a/tmp/.keep b/tmp/.keep new file mode 100644 index 0000000..e69de29 diff --git a/tmp/pids/.keep b/tmp/pids/.keep new file mode 100644 index 0000000..e69de29 diff --git a/vendor/.keep b/vendor/.keep new file mode 100644 index 0000000..e69de29