diff --git a/.erb-lint.yml b/.erb-lint.yml index 55b6b7c26..ac5e6e316 100644 --- a/.erb-lint.yml +++ b/.erb-lint.yml @@ -14,7 +14,7 @@ linters: Enabled: false Style/FrozenStringLiteralComment: Enabled: false - Metrics/LineLength: + Layout/LineLength: Enabled: false Lint/UselessAssignment: Enabled: false diff --git a/.gitallowed b/.gitallowed index d7ea6edab..e0c36b9ff 100644 --- a/.gitallowed +++ b/.gitallowed @@ -2,8 +2,10 @@ \byarn\.lock \bGemfile\.lock ^app/lib/nokul/database_url\.rb -^README.md:[6-7]: +^README.md:[6-8]: ^lib/templates/ldap/.* +^test/controllers/accounts/settings/emails_controller_test.rb:23: +^test/controllers/accounts/settings/passwords_controller_test.rb:25: ^test/fixtures/users.yml:(1|6|11|16): ^test/system/account_settings_page_flow_test.rb:20: ^test/system/login_page_flow_test.rb:15: diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 741b99403..000000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -*.tar.gz filter=lfs diff=lfs merge=lfs -text -*.gz filter=lfs diff=lfs merge=lfs -text diff --git a/.rubocop.yml b/.rubocop.yml index cc6ba965d..f47a455e3 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -11,7 +11,7 @@ Rails/UnknownEnv: - development - production - test -Metrics/LineLength: +Layout/LineLength: Exclude: - app/validators/employee_validator.rb # Won't fix Metrics/BlockLength: diff --git a/.rubocop_common.yml b/.rubocop_common.yml index f79509356..e06768be5 100644 --- a/.rubocop_common.yml +++ b/.rubocop_common.yml @@ -7,7 +7,7 @@ Layout/HashAlignment: EnforcedHashRocketStyle: table EnforcedColonStyle: table -Metrics/LineLength: +Layout/LineLength: Max: 120 Naming/MemoizedInstanceVariableName: diff --git a/.ruby-version b/.ruby-version index 2714f5313..24ba9a38d 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.6.4 +2.7.0 diff --git a/Dockerfile b/Dockerfile index 4ecec547c..571052a99 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ondokuz/ruby:buster-19.1 +FROM ondokuz/ruby:buster-20.1 ENV PATH=/app/bin:$PATH diff --git a/Gemfile b/Gemfile index 8183c51eb..f52da73fa 100644 --- a/Gemfile +++ b/Gemfile @@ -23,12 +23,13 @@ gem 'ancestry' # active-storage gem 'aws-sdk-s3', require: false -gem 'image_processing', '~> 1.2' -gem 'ruby-vips', '~> 2.0.16' +gem 'image_processing', '~> 1.10.3' +gem 'ruby-vips', '~> 2.0.17' # authentication gem 'authy' gem 'devise' +gem 'omniauth_openid_connect' # authorization gem 'pundit' @@ -99,7 +100,7 @@ group :test do gem 'capybara' gem 'codacy-coverage', require: false gem 'minitest-focus' - gem 'webdrivers', '~> 4.1' + gem 'webdrivers', '~> 4.2' gem 'webmock' end @@ -125,3 +126,5 @@ Dir['plugins/tenant/**/*.gemspec'].each do |gemspec| gem name, path: File.dirname(gemspec), require: false end + +gem 'active_flag' diff --git a/Gemfile.lock b/Gemfile.lock index aef4681f6..5c721b492 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -27,56 +27,58 @@ PATH GEM remote: https://rubygems.org/ specs: - actioncable (6.0.1) - actionpack (= 6.0.1) + actioncable (6.0.2.1) + actionpack (= 6.0.2.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.0.1) - actionpack (= 6.0.1) - activejob (= 6.0.1) - activerecord (= 6.0.1) - activestorage (= 6.0.1) - activesupport (= 6.0.1) + actionmailbox (6.0.2.1) + actionpack (= 6.0.2.1) + activejob (= 6.0.2.1) + activerecord (= 6.0.2.1) + activestorage (= 6.0.2.1) + activesupport (= 6.0.2.1) mail (>= 2.7.1) - actionmailer (6.0.1) - actionpack (= 6.0.1) - actionview (= 6.0.1) - activejob (= 6.0.1) + actionmailer (6.0.2.1) + actionpack (= 6.0.2.1) + actionview (= 6.0.2.1) + activejob (= 6.0.2.1) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.0.1) - actionview (= 6.0.1) - activesupport (= 6.0.1) - rack (~> 2.0) + actionpack (6.0.2.1) + actionview (= 6.0.2.1) + activesupport (= 6.0.2.1) + rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (6.0.1) - actionpack (= 6.0.1) - activerecord (= 6.0.1) - activestorage (= 6.0.1) - activesupport (= 6.0.1) + actiontext (6.0.2.1) + actionpack (= 6.0.2.1) + activerecord (= 6.0.2.1) + activestorage (= 6.0.2.1) + activesupport (= 6.0.2.1) nokogiri (>= 1.8.5) - actionview (6.0.1) - activesupport (= 6.0.1) + actionview (6.0.2.1) + activesupport (= 6.0.2.1) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (6.0.1) - activesupport (= 6.0.1) + active_flag (1.5.0) + activerecord (>= 5) + activejob (6.0.2.1) + activesupport (= 6.0.2.1) globalid (>= 0.3.6) - activemodel (6.0.1) - activesupport (= 6.0.1) - activerecord (6.0.1) - activemodel (= 6.0.1) - activesupport (= 6.0.1) - activestorage (6.0.1) - actionpack (= 6.0.1) - activejob (= 6.0.1) - activerecord (= 6.0.1) + activemodel (6.0.2.1) + activesupport (= 6.0.2.1) + activerecord (6.0.2.1) + activemodel (= 6.0.2.1) + activesupport (= 6.0.2.1) + activestorage (6.0.2.1) + actionpack (= 6.0.2.1) + activejob (= 6.0.2.1) + activerecord (= 6.0.2.1) marcel (~> 0.3.1) - activesupport (6.0.1) + activesupport (6.0.2.1) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -84,23 +86,25 @@ GEM zeitwerk (~> 2.2) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) + aes_key_wrap (1.0.1) ancestry (3.0.7) activerecord (>= 3.2.0) ast (2.4.0) + attr_required (1.0.1) authy (2.7.5) httpclient (>= 2.5.3.3) aws-eventstream (1.0.3) - aws-partitions (1.246.0) - aws-sdk-core (3.82.0) + aws-partitions (1.266.0) + aws-sdk-core (3.88.0) aws-eventstream (~> 1.0, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-kms (1.26.0) + aws-sdk-kms (1.27.0) aws-sdk-core (~> 3, >= 3.71.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.57.0) - aws-sdk-core (~> 3, >= 3.77.0) + aws-sdk-s3 (1.60.1) + aws-sdk-core (~> 3, >= 3.83.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) aws-sigv4 (1.1.0) @@ -114,19 +118,20 @@ GEM html_tokenizer (~> 0.0.6) parser (>= 2.4) smart_properties + bindata (2.4.4) bindex (0.8.1) bootsnap (1.4.5) msgpack (~> 1.0) brakeman (4.7.2) - builder (3.2.3) - bullet (6.0.2) + builder (3.2.4) + bullet (6.1.0) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) bundler-audit (0.6.1) bundler (>= 1.2.0, < 3) thor (~> 0.18) - byebug (11.0.1) - capybara (3.29.0) + byebug (11.1.0) + capybara (3.30.0) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) @@ -134,17 +139,17 @@ GEM rack-test (>= 0.6.3) regexp_parser (~> 1.5) xpath (~> 3.2) - chartkick (3.3.0) + chartkick (3.3.1) childprocess (3.0.0) cocoon (1.2.14) - codacy-coverage (2.1.5) + codacy-coverage (2.2.0) simplecov coderay (1.1.2) concurrent-ruby (1.1.5) connection_pool (2.2.2) crack (0.4.3) safe_yaml (~> 1.0.0) - crass (1.0.5) + crass (1.0.6) devise (4.7.1) bcrypt (~> 3.0) orm_adapter (~> 0.1) @@ -165,9 +170,9 @@ GEM smart_properties erubi (1.9.0) execjs (2.7.0) - faraday (0.17.1) + faraday (1.0.0) multipart-post (>= 1.2, < 3) - ffi (1.11.3) + ffi (1.12.1) fit-commit (3.8.1) swearjar (~> 1.3) font-awesome-rails (4.7.0.5) @@ -176,27 +181,32 @@ GEM activerecord (>= 4.0.0) globalid (0.4.2) activesupport (>= 4.2.0) - groupdate (4.2.0) + groupdate (4.3.0) activesupport (>= 5) hashdiff (1.0.0) + hashie (3.6.0) html_tokenizer (0.0.7) httpclient (2.8.3) - i18n (1.7.0) + i18n (1.8.2) concurrent-ruby (~> 1.0) - image_processing (1.9.3) + image_processing (1.10.3) mini_magick (>= 4.9.5, < 5) - ruby-vips (>= 2.0.13, < 3) + ruby-vips (>= 2.0.17, < 3) jaro_winkler (1.5.4) jbuilder (2.9.1) activesupport (>= 4.2.0) jmespath (1.4.0) - json (2.2.0) + json (2.3.0) + json-jwt (1.11.0) + activesupport (>= 4.2) + aes_key_wrap + bindata jwt (2.2.1) launchy (2.4.3) addressable (~> 2.3) letter_opener (1.7.0) launchy (~> 2.2) - listen (3.2.0) + listen (3.2.1) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) lograge (0.11.2) @@ -217,30 +227,47 @@ GEM mimemagic (~> 0.3.2) method_source (0.9.2) mimemagic (0.3.3) - mini_magick (4.9.5) + mini_magick (4.10.1) mini_mime (1.0.2) mini_portile2 (2.4.0) - minitest (5.13.0) + minitest (5.14.0) minitest-focus (1.1.2) minitest (>= 4, < 6) msgpack (1.3.1) multipart-post (2.1.1) net-ldap (0.16.2) - nexmo (6.1.0) + nexmo (6.2.0) jwt (~> 2) - zeitwerk (~> 2) + zeitwerk (~> 2, >= 2.2) nio4r (2.5.2) - nokogiri (1.10.5) + nokogiri (1.10.7) mini_portile2 (~> 2.4.0) + omniauth (1.9.0) + hashie (>= 3.4.6, < 3.7.0) + rack (>= 1.6.2, < 3) + omniauth_openid_connect (0.3.3) + addressable (~> 2.5) + omniauth (~> 1.9) + openid_connect (~> 1.1) + openid_connect (1.1.8) + activemodel + attr_required (>= 1.0.0) + json-jwt (>= 1.5.0) + rack-oauth2 (>= 1.6.1) + swd (>= 1.0.0) + tzinfo + validate_email + validate_url + webfinger (>= 1.0.1) orm_adapter (0.5.0) - pagy (3.7.0) + pagy (3.7.2) parallel (1.19.1) - parser (2.6.5.0) + parser (2.7.0.2) ast (~> 2.4.0) - pg (1.1.4) - pg_search (2.3.0) - activerecord (>= 4.2) - activesupport (>= 4.2) + pg (1.2.1) + pg_search (2.3.2) + activerecord (>= 5.2) + activesupport (>= 5.2) pghero (2.4.1) activerecord (>= 5) pry (0.12.2) @@ -248,81 +275,87 @@ GEM method_source (~> 0.9.0) pry-rails (0.3.9) pry (>= 0.10.4) - public_suffix (4.0.1) - puma (4.3.0) + public_suffix (4.0.3) + puma (4.3.1) nio4r (~> 2.0) pundit (2.1.0) activesupport (>= 3.0.0) - pwned (2.0.0) - rack (2.0.7) - rack-attack (6.2.1) + pwned (2.0.1) + rack (2.0.8) + rack-attack (6.2.2) rack (>= 1.0, < 3) - rack-mini-profiler (1.1.3) + rack-mini-profiler (1.1.4) rack (>= 1.2.0) - rack-protection (2.0.7) + rack-oauth2 (1.10.1) + activesupport + attr_required + httpclient + json-jwt (>= 1.11.0) + rack + rack-protection (2.0.8.1) rack rack-proxy (0.6.5) rack rack-test (1.1.0) rack (>= 1.0, < 3) - rails (6.0.1) - actioncable (= 6.0.1) - actionmailbox (= 6.0.1) - actionmailer (= 6.0.1) - actionpack (= 6.0.1) - actiontext (= 6.0.1) - actionview (= 6.0.1) - activejob (= 6.0.1) - activemodel (= 6.0.1) - activerecord (= 6.0.1) - activestorage (= 6.0.1) - activesupport (= 6.0.1) + rails (6.0.2.1) + actioncable (= 6.0.2.1) + actionmailbox (= 6.0.2.1) + actionmailer (= 6.0.2.1) + actionpack (= 6.0.2.1) + actiontext (= 6.0.2.1) + actionview (= 6.0.2.1) + activejob (= 6.0.2.1) + activemodel (= 6.0.2.1) + activerecord (= 6.0.2.1) + activestorage (= 6.0.2.1) + activesupport (= 6.0.2.1) bundler (>= 1.3.0) - railties (= 6.0.1) + railties (= 6.0.2.1) sprockets-rails (>= 2.0.0) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) rails-html-sanitizer (1.3.0) loofah (~> 2.3) - railties (6.0.1) - actionpack (= 6.0.1) - activesupport (= 6.0.1) + railties (6.0.2.1) + actionpack (= 6.0.2.1) + activesupport (= 6.0.2.1) method_source rake (>= 0.8.7) thor (>= 0.20.3, < 2.0) rainbow (3.0.0) rake (13.0.1) rb-fsevent (0.10.3) - rb-inotify (0.10.0) + rb-inotify (0.10.1) ffi (~> 1.0) redis (4.1.3) regexp_parser (1.6.0) - rein (5.0.0) + rein (5.1.0) activerecord (>= 4.0.0) activesupport (>= 4.0.0) - request_store (1.4.1) + request_store (1.5.0) rack (>= 1.4) responders (3.0.0) actionpack (>= 5.0) railties (>= 5.0) - rollbar (2.22.1) - rubocop (0.77.0) + rollbar (2.23.1) + rubocop (0.79.0) jaro_winkler (~> 1.5.1) parallel (~> 1.10) - parser (>= 2.6) + parser (>= 2.7.0.1) rainbow (>= 2.2.2, < 4.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 1.7) - rubocop-minitest (0.5.0) + rubocop-minitest (0.5.1) rubocop (>= 0.74) - rubocop-performance (1.5.1) + rubocop-performance (1.5.2) rubocop (>= 0.71.0) - rubocop-rails (2.4.0) + rubocop-rails (2.4.1) rack (>= 1.1) rubocop (>= 0.72.0) ruby-progressbar (1.10.1) - ruby-vips (2.0.16) + ruby-vips (2.0.17) ffi (~> 1.9) rubyzip (2.0.0) safe_yaml (1.0.5) @@ -334,10 +367,10 @@ GEM sprockets (> 3.0) sprockets-rails tilt - selenium-webdriver (3.142.6) + selenium-webdriver (3.142.7) childprocess (>= 0.5, < 4.0) rubyzip (>= 1.2.2) - sidekiq (6.0.3) + sidekiq (6.0.4) connection_pool (>= 2.2.2) rack (>= 2.0.0) rack-protection (>= 2.0.0) @@ -364,24 +397,34 @@ GEM actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) + swd (1.1.2) + activesupport (>= 3) + attr_required (>= 0.0.5) + httpclient (>= 2.4) swearjar (1.3.1) - telephone_number (1.4.3) + telephone_number (1.4.5) thor (0.20.3) thread_safe (0.3.6) tilt (2.0.10) - twilio-ruby (5.29.1) - faraday (~> 0.9) + twilio-ruby (5.31.2) + faraday (~> 1.0.0) jwt (>= 1.5, <= 2.5) nokogiri (>= 1.6, < 2.0) - tzinfo (1.2.5) + tzinfo (1.2.6) thread_safe (~> 0.1) uglifier (4.2.0) execjs (>= 0.3.0, < 3) - unicode-display_width (1.6.0) + unicode-display_width (1.6.1) uniform_notifier (1.13.0) - valid_email2 (3.1.2) + valid_email2 (3.1.3) activemodel (>= 3.2) mail (~> 2.5) + validate_email (0.1.6) + activemodel (>= 3.0) + mail (>= 2.2.5) + validate_url (1.0.8) + activemodel (>= 3.0.0) + public_suffix warden (1.2.8) rack (>= 2.0.6) web-console (4.0.1) @@ -389,15 +432,18 @@ GEM activemodel (>= 6.0.0) bindex (>= 0.4.0) railties (>= 6.0.0) - webdrivers (4.1.3) + webdrivers (4.2.0) nokogiri (~> 1.6) rubyzip (>= 1.3.0) selenium-webdriver (>= 3.0, < 4.0) - webmock (3.7.6) + webfinger (1.1.0) + activesupport + httpclient (>= 2.4) + webmock (3.8.0) addressable (>= 2.3.6) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) - webpacker (4.2.0) + webpacker (4.2.2) activesupport (>= 4.2) rack-proxy (>= 0.6.1) railties (>= 4.2) @@ -414,6 +460,7 @@ PLATFORMS ruby DEPENDENCIES + active_flag ancestry authy aws-sdk-s3 @@ -434,7 +481,7 @@ DEPENDENCIES font-awesome-rails friendly_id (~> 5.3.0) groupdate - image_processing (~> 1.2) + image_processing (~> 1.10.3) jbuilder (~> 2.9) letter_opener listen (>= 3.0.5, < 3.3) @@ -447,6 +494,7 @@ DEPENDENCIES nokul-tenant! nokul-tenant-acme! nokul-tenant-omu! + omniauth_openid_connect pagy pg pg_search @@ -466,7 +514,7 @@ DEPENDENCIES rubocop-performance rubocop-rails ruby-progressbar - ruby-vips (~> 2.0.16) + ruby-vips (~> 2.0.17) sassc (~> 2.2.1) sassc-rails sidekiq @@ -481,13 +529,13 @@ DEPENDENCIES uglifier (>= 1.3.0) valid_email2 web-console - webdrivers (~> 4.1) + webdrivers (~> 4.2) webmock webpacker wicked_pdf RUBY VERSION - ruby 2.6.4p104 + ruby 2.7.0p0 BUNDLED WITH - 2.0.2 + 2.1.2 diff --git a/Vagrantfile b/Vagrantfile index a10e0871e..194e2f4b6 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -21,6 +21,7 @@ Vagrant.configure('2') do |config| dev.vm.provider :lxc do |lxc| lxc.customize 'cgroup.memory.limit_in_bytes', '2048M' + lxc.customize 'net.0.ipv4.address', '10.0.3.15' # other.vagrant.ga end dev.vm.provision 'shell', name: 'environment', env: env, path: 'lib/scripts/environment.sh' @@ -50,6 +51,17 @@ Vagrant.configure('2') do |config| ldap.vm.provision 'shell', path: 'lib/scripts/ldap.sh' end + config.vm.define 'sso', autostart: true do |sso| + sso.vm.box = 'omu/debian-stable-server' + + sso.vm.provider :lxc do |lxc| + lxc.customize 'cgroup.memory.limit_in_bytes', '1024M' + lxc.customize 'net.0.ipv4.address', '10.0.3.19' # auth.sso.vagrant.ga + end + + sso.vm.provision 'shell', name: 'sso-deploy', path: 'lib/scripts/sso.sh' + end + config.vm.define 'paas', autostart: false do |paas| paas.vm.box = 'omu/debian-stable-paas' diff --git a/app.json b/app.json index d74e36a28..fa5d81237 100644 --- a/app.json +++ b/app.json @@ -1,13 +1,13 @@ { "name": "nokul", "slug": "nokul", - "description": "Nokul, nitelikli okul universiteler icin ogrenci ve personel otomasyonudur.", + "description": "Nitelikli okul (Nokul, /nəʊkuːl/), üniversiteler için öğrenci ve personel otomasyonudur.", "keywords": [ "dokku", "rails" ], "repository": "https://github.com/omu/nokul", - "version": "0.7.2", + "version": "0.7.4", "scripts": { "dokku": { "predeploy": "bin/plugdo bundle install -j4 --path /app/vendor/bundle --without development:test && bundle exec rails assets:precompile && bundle exec rails db:migrate" diff --git a/app/controllers/account/omniauth_callbacks_controller.rb b/app/controllers/account/omniauth_callbacks_controller.rb index b6ba88702..278b166c2 100644 --- a/app/controllers/account/omniauth_callbacks_controller.rb +++ b/app/controllers/account/omniauth_callbacks_controller.rb @@ -2,6 +2,15 @@ module Account class OmniauthCallbacksController < Devise::OmniauthCallbacksController + def openid_connect + @user = User.from_omniauth(request.env['omniauth.auth']) + if @user.persisted? + flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: 'OpenID Connect' + sign_in_and_redirect @user, event: :authentication + else + redirect_to root_path, alert: @user.errors.full_messages.join("\n") + end + end # You should configure your model like this: # devise :omniauthable, omniauth_providers: [:twitter] diff --git a/app/controllers/account/sessions_controller.rb b/app/controllers/account/sessions_controller.rb index 2345fce48..0d6751201 100644 --- a/app/controllers/account/sessions_controller.rb +++ b/app/controllers/account/sessions_controller.rb @@ -6,9 +6,11 @@ class SessionsController < Devise::SessionsController # before_action :configure_sign_in_params, only: [:create] # GET /resource/sign_in - # def new - # super - # end + def new + return super if Nokul::SSO.disabled? + + redirect_to(user_openid_connect_omniauth_authorize_path) + end # POST /resource/sign_in # def create diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index f822f87bc..3489bb908 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -4,14 +4,14 @@ class ApplicationController < ActionController::Base include Pundit include Patron::Sudoable - protect_from_forgery with: :exception + protect_from_forgery with: :reset_session before_action :configure_permitted_parameters, if: :devise_controller? before_action :authenticate_user! before_action :set_locale rescue_from ActiveRecord::RecordNotFound, with: :not_found - rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized + rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized def set_locale update_preferred_language if user_signed_in? @@ -54,6 +54,11 @@ def configure_permitted_parameters private + def handle_unverified_request + super + redirect_back(fallback_location: root_path, alert: t('errors.invalid_authenticity_token')) + end + def user_not_authorized(exception) flash[:alert] = t( "#{exception.policy.class.name.underscore}.#{exception.query}", diff --git a/app/controllers/patron/roles_controller.rb b/app/controllers/patron/roles_controller.rb index 54795a7e6..41276c1cf 100644 --- a/app/controllers/patron/roles_controller.rb +++ b/app/controllers/patron/roles_controller.rb @@ -14,7 +14,9 @@ def index def show @permissions = pagy_by_search( - @role.permissions.order(:name), page_param: 'page_permission', pagy_name: :pagy_permissions + @role.role_permissions.includes(:permission).order('permissions.name'), + page_param: 'page_permission', + pagy_name: :pagy_permissions ) @users = pagy_by_search( @role.users, page_param: 'page_user', pagy_name: :pagy_users @@ -55,7 +57,9 @@ def set_role end def role_params - params.require(:patron_role).permit(:name, :identifier, :locked, permission_ids: []) + params.require(:patron_role).permit(:name, :identifier, :locked, role_permissions_attributes: [ + :id, :permission_id, :_destroy, privileges: [] + ]) end end end diff --git a/app/controllers/studentship/course_enrollments_controller.rb b/app/controllers/studentship/course_enrollments_controller.rb index c55453c14..8be1660ba 100644 --- a/app/controllers/studentship/course_enrollments_controller.rb +++ b/app/controllers/studentship/course_enrollments_controller.rb @@ -3,11 +3,10 @@ module Studentship class CourseEnrollmentsController < ApplicationController before_action :set_student - before_action :set_service - before_action :build_catalog, only: :new + before_action :set_service, except: :index before_action :set_course_enrollment, only: :destroy before_action :check_registrability, except: :index - before_action :check_enrollment_status, except: %i[index list] + before_action :check_registration_status, except: %i[index list] def index @students = current_user.students.includes(:unit) @@ -15,27 +14,31 @@ def index def list; end - def new; end + def new + @service.build_catalog + end def create - course_enrollment = @student.course_enrollments.new(course_enrollment_params) - @service.enrollable!(course_enrollment.available_course) - - redirect_with(course_enrollment.save ? t('.success') : t('.error')) + message = @service.enroll(course_enrollment_params) ? t('.success') : t('.error') + redirect_with(message) rescue StudentCourseEnrollmentService::EnrollableError => e redirect_with(e.message) end def destroy - @service.dropable!(@course_enrollment.available_course) - redirect_with(@course_enrollment.destroy ? t('.success') : t('.error')) + message = @service.drop(@course_enrollment) ? t('.success') : t('.error') + redirect_with(message) rescue StudentCourseEnrollmentService::EnrollableError => e redirect_with(e.message) end def save - message = @service.course_enrollments.update(status: :saved) ? t('.success') : t('.error') - redirect_to(list_student_course_enrollments_path(@student), flash: { info: message }) + if @service.course_enrollments.any? + message = @service.save ? t('.success') : t('.error') + redirect_to(list_student_course_enrollments_path(@student), flash: { info: message }) + else + redirect_with(t('.errors.empty_selected_courses_list')) + end end private @@ -53,12 +56,8 @@ def set_service @service = StudentCourseEnrollmentService.new(@student) end - def build_catalog - @service.build_catalog - end - def set_course_enrollment - @course_enrollment = @student.course_enrollments.find(params[:id]) + @course_enrollment = @student.current_registration.course_enrollments.find(params[:id]) end def check_registrability @@ -67,10 +66,10 @@ def check_registrability redirect_to(student_course_enrollments_path(@student), alert: t('.errors.not_proper_register_event_range')) end - def check_enrollment_status - return if @service.enrollment_status != :saved + def check_registration_status + return if @student.current_registration.draft? - redirect_to(student_course_enrollments_path(@student), alert: t('.errors.registration completed')) + redirect_to(student_course_enrollments_path(@student), alert: t('.errors.registration_completed')) end def course_enrollment_params diff --git a/app/decorators/student_decorator.rb b/app/decorators/student_decorator.rb index bd7167ff5..7e32d2670 100644 --- a/app/decorators/student_decorator.rb +++ b/app/decorators/student_decorator.rb @@ -24,6 +24,6 @@ def event_online_course_registrations end def translate(key, params = {}) - I18n.t("studentship.course_enrollments.#{key}", params) + I18n.t("studentship.course_enrollments.#{key}", **params) end end diff --git a/app/lib/nokul/sso.rb b/app/lib/nokul/sso.rb new file mode 100644 index 000000000..326c36295 --- /dev/null +++ b/app/lib/nokul/sso.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module Nokul + module SSO + module_function + + def disabled? + !enabled? + end + + def enabled? + ActiveRecord::Type::Boolean.new.cast( + ENV.fetch('NOKUL_SSO_ENABLE', false) + ) + end + end +end diff --git a/app/lib/patron/permission_builder.rb b/app/lib/patron/permission_builder.rb index dc70c8f60..ea32304ab 100644 --- a/app/lib/patron/permission_builder.rb +++ b/app/lib/patron/permission_builder.rb @@ -2,27 +2,55 @@ module Patron module PermissionBuilder - mattr_accessor :all, default: {} + mattr_accessor :all, default: ActiveSupport::HashWithIndifferentAccess.new + + SUPPORTED_PRIVILEGES = { + read: 0, + write: 1, + destroy: 2, + report: 3 + }.freeze + + def self.supported_privileges + SUPPORTED_PRIVILEGES.sort_by { |_, v| v }.map(&:first) + end def permissions - @permissions ||= {} + @permissions ||= ActiveSupport::HashWithIndifferentAccess.new + end + + def privilege?(identifier, privilege) + return false unless permissions.include?(identifier.to_sym) + + permissions[identifier.to_sym].privileges.include?(privilege) end # Example # permission :foo, name: 'Foo', description: 'Desc' - def permission(identifier, name:, description:) + def permission(identifier, name:, description:, privileges:) generated_permission = Permission.new( name: name, identifier: identifier, - description: description + description: description, + privileges: supported_privileges_check!(privileges) ) permissions[identifier] = generated_permission PermissionBuilder.all[identifier] = generated_permission end - Permission = Struct.new(:name, :identifier, :description, keyword_init: true) + Permission = Struct.new(:name, :identifier, :description, :privileges, keyword_init: true) private_constant :Permission + + private + + def supported_privileges_check!(privileges) + privileges.each do |privilege| + raise "Unsupported privilege: #{privilege}" unless SUPPORTED_PRIVILEGES.key?(privilege) + end + + privileges.inquiry + end end end diff --git a/app/lib/patron/role_builder.rb b/app/lib/patron/role_builder.rb index 5ff960d7a..a1a93c3fa 100644 --- a/app/lib/patron/role_builder.rb +++ b/app/lib/patron/role_builder.rb @@ -24,7 +24,7 @@ class Role def initialize(identifier:, name:, permissions:) @identifier = identifier @name = name - @permissions = Set.new(permissions) + @permissions = permissions check! end @@ -33,7 +33,7 @@ def initialize(identifier:, name:, permissions:) def check! raise ArgumentError, 'Permissions must not be empty' if permissions.blank? - permissions.each do |permission| + permissions.keys.each do |permission| raise ArgumentError, "Permission not found: #{permission}" unless PermissionBuilder.all.key?(permission) end end diff --git a/app/lib/patron/roleable.rb b/app/lib/patron/roleable.rb index 63bf8663a..6f0a9f7c1 100644 --- a/app/lib/patron/roleable.rb +++ b/app/lib/patron/roleable.rb @@ -6,8 +6,9 @@ module Roleable included do has_many :role_assignments, class_name: 'Patron::RoleAssignment', dependent: :destroy - has_many :roles, class_name: 'Patron::Role', through: :role_assignments - has_many :permissions, class_name: 'Patron::Permission', through: :roles + has_many :roles, class_name: 'Patron::Role', through: :role_assignments + has_many :permissions, class_name: 'Patron::Permission', through: :roles + has_many :role_permissions, class_name: 'Patron::RolePermission', through: :roles end def roles?(*identifiers) @@ -26,6 +27,13 @@ def any_permissions?(*identifiers) permissions.exists?(identifier: identifiers) end + def privilege?(permission, *privileges) + role_permissions.includes(:permission) + .where_privileges(*privileges.flatten) + .where(permissions: { identifier: permission }) + .exists? + end + alias role? roles? alias permission? permissions? end diff --git a/app/lib/patron/scope/dsl.rb b/app/lib/patron/scope/dsl.rb index 9c30153dd..f6fff35b4 100644 --- a/app/lib/patron/scope/dsl.rb +++ b/app/lib/patron/scope/dsl.rb @@ -32,7 +32,7 @@ def preview_attributes(*attributes) def filter(attribute, **options) exist!(attribute) - filters[attribute] = Option.new(attribute, options) + filters[attribute] = Option.new(attribute, **options) end def filters @@ -50,7 +50,7 @@ def filter?(name) private def exist!(attribute) - return if model.attribute_names.include?(attribute.to_s) + return if Rails.env.test? || model.attribute_names.include?(attribute.to_s) raise ArgumentError, "Unrecognized attribute: #{attribute} for #{model}" end @@ -64,7 +64,7 @@ class Option :i18n_key def initialize(attribute, **args) - @collection = collection_to_proc(args) + @collection = collection_to_proc(**args) @multiple = args.fetch(:multiple, false) @type = forecast_type(args) @i18n_key = args.fetch(:i18n_key, attribute) @@ -93,7 +93,7 @@ def collection? private - def collection_to_proc(args) + def collection_to_proc(**args) collection = args.fetch(:collection, proc { nil }) case collection diff --git a/app/models/academic_term.rb b/app/models/academic_term.rb index cc05b59c1..83250b240 100644 --- a/app/models/academic_term.rb +++ b/app/models/academic_term.rb @@ -10,6 +10,7 @@ class AcademicTerm < ApplicationRecord has_many :calendars, dependent: :nullify has_many :prospective_students, dependent: :nullify has_many :registration_documents, dependent: :nullify + has_many :semester_registrations, dependent: :nullify # validations validates :active, inclusion: { in: [true, false] } diff --git a/app/models/course_enrollment.rb b/app/models/course_enrollment.rb index 638b5dccc..c5af7552f 100644 --- a/app/models/course_enrollment.rb +++ b/app/models/course_enrollment.rb @@ -1,26 +1,16 @@ # frozen_string_literal: true class CourseEnrollment < ApplicationRecord - # callbacks - before_validation :assign_semester - # enums enum status: { draft: 0, saved: 1 } # relations - belongs_to :student belongs_to :available_course + belongs_to :semester_registration # validations - validates :student, uniqueness: { scope: :available_course } - validates :semester, numericality: { greater_than: 0 } + validates :available_course, uniqueness: { scope: :semester_registration_id } # delegates delegate :ects, to: :available_course - - private - - def assign_semester - self.semester = student&.semester - end end diff --git a/app/models/patron/permission.rb b/app/models/patron/permission.rb index ce0557fca..04f5c100c 100644 --- a/app/models/patron/permission.rb +++ b/app/models/patron/permission.rb @@ -19,5 +19,9 @@ class Permission < ApplicationRecord validates :name, uniqueness: true, presence: true, length: { maximum: 255 } validates :identifier, uniqueness: true, presence: true, length: { maximum: 255 } validates :description, length: { maximum: 65_535 } + + def privileges_for_identifier + Patron::PermissionBuilder.all[identifier]&.privileges || [] + end end end diff --git a/app/models/patron/role.rb b/app/models/patron/role.rb index db2d4f40b..b5554a8b5 100644 --- a/app/models/patron/role.rb +++ b/app/models/patron/role.rb @@ -15,6 +15,7 @@ class Role < ApplicationRecord has_many :users, through: :role_assignments has_many :role_permissions, dependent: :destroy has_many :permissions, through: :role_permissions + accepts_nested_attributes_for :role_permissions, reject_if: :all_blank, allow_destroy: true # validations validates :name, uniqueness: true, presence: true, length: { maximum: 255 } diff --git a/app/models/patron/role_permission.rb b/app/models/patron/role_permission.rb index b3cb5992d..af58e5ebd 100644 --- a/app/models/patron/role_permission.rb +++ b/app/models/patron/role_permission.rb @@ -8,5 +8,20 @@ class RolePermission < ApplicationRecord # validations validates :permission_id, uniqueness: { scope: :role_id } + validates :privileges, presence: true + + before_validation do + privileges.to_a.each do |privilege| + next if privileges_for_identifier.include?(privilege) + + errors.add(:base, I18n.t('patron.errors.invalid_privilege', privilege: privilege)) + end + end + + # delegates + delegate :name, :identifier, :privileges_for_identifier, to: :permission + + # enums + flag :privileges, Patron::PermissionBuilder.supported_privileges end end diff --git a/app/models/prospective_student.rb b/app/models/prospective_student.rb index 9b75daaef..010689d1f 100644 --- a/app/models/prospective_student.rb +++ b/app/models/prospective_student.rb @@ -60,7 +60,7 @@ class ProspectiveStudent < ApplicationRecord validates :placement_rank, allow_nil: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 } validates :placement_score, allow_nil: true, numericality: { greater_than_or_equal_to: 0 } validates :placement_score_type, length: { maximum: 255 } - validates :placement_type, allow_nil: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 } + validates :placement_type, allow_nil: true, inclusion: { in: placement_types.keys } validates :preference_order, allow_nil: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 } validates :registration_city, length: { maximum: 255 } validates :registered, inclusion: { in: [true, false] } @@ -68,6 +68,7 @@ class ProspectiveStudent < ApplicationRecord validates :state_of_education, allow_nil: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 } validates :system_register_type, inclusion: { in: system_register_types.keys } validates :top_student, inclusion: { in: [true, false] } + validates_with ProspectiveStudentValidator, on: :update # scopes scope :registered, -> { where(registered: true) } diff --git a/app/models/semester_registration.rb b/app/models/semester_registration.rb new file mode 100644 index 000000000..0716851c4 --- /dev/null +++ b/app/models/semester_registration.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class SemesterRegistration < ApplicationRecord + # callbacks + before_validation :assign_academic_term_and_semester + + # enums + enum status: { draft: 0, saved: 1 } + + # relations + belongs_to :academic_term + belongs_to :student + has_many :course_enrollments, dependent: :destroy + + # validations + validates :semester, uniqueness: { scope: :student_id }, numericality: { greater_than: 0 } + + private + + def assign_academic_term_and_semester + assign_attributes(academic_term: AcademicTerm.current, semester: student&.semester) + end +end diff --git a/app/models/student.rb b/app/models/student.rb index af7f57bef..803a02f71 100644 --- a/app/models/student.rb +++ b/app/models/student.rb @@ -11,7 +11,8 @@ class Student < ApplicationRecord has_one :identity, dependent: :destroy has_many :calendars, -> { Calendar.active }, through: :unit has_many :curriculums, through: :unit - has_many :course_enrollments, dependent: :destroy + has_many :semester_registrations, dependent: :destroy + has_many :course_enrollments, through: :semester_registrations # scopes # TODO: Query will be organized according to activity status @@ -38,6 +39,11 @@ def gpa student_number.to_s[-2..].to_f / 25 end + def current_registration + @current_registration ||= + semester_registrations.find_by(semester: semester) || semester_registrations.create + end + private def build_identity_information diff --git a/app/models/user.rb b/app/models/user.rb index 92bf42590..dabca7a29 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -29,6 +29,7 @@ class User < ApplicationRecord # authentication devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :lockable, :timeoutable + devise :omniauthable, omniauth_providers: %i[openid_connect] # relations has_one_attached :avatar @@ -106,6 +107,10 @@ class User < ApplicationRecord extend FriendlyId friendly_id :permalink, use: :slugged + def self.from_omniauth(auth) + find_or_initialize_by(id_number: auth.uid) + end + def permalink username, domain = email.split('@') if email username if domain.eql?(Tenant.configuration.email.domain) diff --git a/app/policies/patron/assignment_policy.rb b/app/policies/patron/assignment_policy.rb index e617e5a4d..e0e3f1848 100644 --- a/app/policies/patron/assignment_policy.rb +++ b/app/policies/patron/assignment_policy.rb @@ -3,15 +3,15 @@ module Patron class AssignmentPolicy < ApplicationPolicy def index? - permitted? + permitted? :read end def show? - permitted? + permitted? :read end def update? - permitted? + permitted? :write end def edit? @@ -19,13 +19,13 @@ def edit? end def preview_scope? - permitted? + permitted? :read end private - def permitted? - user.permission? :authorization_management + def permitted?(*privileges) + user.privilege? :authorization_management, privileges end end end diff --git a/app/policies/patron/permission_policy.rb b/app/policies/patron/permission_policy.rb index 0fbf56cf1..e31f5861c 100644 --- a/app/policies/patron/permission_policy.rb +++ b/app/policies/patron/permission_policy.rb @@ -3,17 +3,17 @@ module Patron class PermissionPolicy < ApplicationPolicy def index? - permitted? + permitted? :read end def show? - permitted? + permitted? :read end private - def permitted? - user.permission? :permission_management + def permitted?(*privileges) + user.privilege? :permission_management, privileges end end end diff --git a/app/policies/patron/query_store_policy.rb b/app/policies/patron/query_store_policy.rb index 71d29e9f5..5433532b4 100644 --- a/app/policies/patron/query_store_policy.rb +++ b/app/policies/patron/query_store_policy.rb @@ -3,23 +3,23 @@ module Patron class QueryStorePolicy < ApplicationPolicy def index? - permitted? + permitted? :read end def show? - permitted? - end - - def create? - permitted? + permitted? :read end def new? create? end + def create? + permitted? :write + end + def update? - permitted? + permitted? :write end def edit? @@ -27,17 +27,17 @@ def edit? end def destroy? - permitted? + permitted? :destroy end def preview? - permitted? + permitted? :read end private - def permitted? - user.permission? :scope_query_management + def permitted?(*privileges) + user.privilege? :scope_query_management, privileges end end end diff --git a/app/policies/patron/role_policy.rb b/app/policies/patron/role_policy.rb index 9ee5497a1..b2e92fa82 100644 --- a/app/policies/patron/role_policy.rb +++ b/app/policies/patron/role_policy.rb @@ -3,23 +3,23 @@ module Patron class RolePolicy < ApplicationPolicy def index? - permitted? + permitted? :read end def show? - permitted? + permitted? :read end def create? - permitted? + new? end def new? - create? + permitted? :write end def update? - permitted? && !record.locked? + permitted?(:write) && !record.locked? end def edit? @@ -27,13 +27,13 @@ def edit? end def destroy? - permitted? && !record.locked? + permitted?(:destroy) && !record.locked? end private - def permitted? - user.permission? :role_management + def permitted?(*privileges) + user.privilege? :role_management, privileges end end end diff --git a/app/services/student_course_enrollment_service.rb b/app/services/student_course_enrollment_service.rb index 19c7d7850..bb40b358a 100644 --- a/app/services/student_course_enrollment_service.rb +++ b/app/services/student_course_enrollment_service.rb @@ -35,16 +35,31 @@ def remaining_ects def course_enrollments @course_enrollments ||= - student.course_enrollments - .where(semester: @student.semester) - .includes(available_course: [curriculum_course: %i[course curriculum_semester]]) + @student.current_registration + .course_enrollments + .includes(available_course: [curriculum_course: %i[course curriculum_semester]]) end - def enrollment_status - @enrollment_status ||= - if course_enrollments.any? - course_enrollments.exists?(status: :draft) ? :draft : :saved - end + def enroll(course_enrollment_params) + course_enrollment = @student.current_registration.course_enrollments.new(course_enrollment_params) + available_course = course_enrollment.available_course + + return course_enrollment.save if enrollable(available_course).errors.empty? + + raise EnrollableError, available_course.errors.full_messages.first + end + + def drop(course_enrollment) + available_course = course_enrollment.available_course + + return course_enrollment.destroy if dropable(available_course).errors.empty? + + raise EnrollableError, available_course.errors.full_messages.first + end + + def save + @student.current_registration.course_enrollments.update(status: :saved) + @student.current_registration.update(status: :saved) end def enrollable(available_course) @@ -54,12 +69,6 @@ def enrollable(available_course) available_course end - def enrollable!(available_course) - return true if enrollable(available_course).errors.empty? - - raise EnrollableError, available_course.errors.full_messages.first - end - def dropable(available_course) sequence = available_course.curriculum_course.curriculum_semester.sequence available_course.errors.add(:base, translate('must_drop_first')) if max_sequence > sequence @@ -67,12 +76,6 @@ def dropable(available_course) available_course end - def dropable!(available_course) - return true if dropable(available_course).errors.empty? - - raise EnrollableError, available_course.errors.full_messages.first - end - private def extra_ects @@ -154,6 +157,6 @@ def group_completed?(group) end def translate(key, params = {}) - I18n.t("studentship.course_enrollments.errors.#{key}", params) + I18n.t("studentship.course_enrollments.errors.#{key}", **params) end end diff --git a/app/validators/prospective_student_validator.rb b/app/validators/prospective_student_validator.rb new file mode 100644 index 000000000..b60bf3687 --- /dev/null +++ b/app/validators/prospective_student_validator.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class ProspectiveStudentValidator < ActiveModel::Validator + def validate(record) + return unless record.registered? + return unless record.unit_id_changed? || record.academic_term_id_changed? + + record.errors[:base] << message('unchangeable_variables') + end + + private + + def message(key) + I18n.t(key, scope: %i[validators prospective_student]) + end +end diff --git a/app/views/first_registration/prospective_students/_form.html.erb b/app/views/first_registration/prospective_students/_form.html.erb index f24b37097..163bb935c 100644 --- a/app/views/first_registration/prospective_students/_form.html.erb +++ b/app/views/first_registration/prospective_students/_form.html.erb @@ -11,6 +11,7 @@
<%= f.error_notification %> + <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
diff --git a/app/views/layouts/shared/_header.html.erb b/app/views/layouts/shared/_header.html.erb index 5c930e660..99107a71c 100644 --- a/app/views/layouts/shared/_header.html.erb +++ b/app/views/layouts/shared/_header.html.erb @@ -24,8 +24,14 @@ <%= link_to :settings, class: 'dropdown-item' do %> <%= fa_icon('shield', text: t('.account_settings')) %> <% end %> - <%= link_to :logout, class: 'dropdown-item', method: :delete do %> - <%= fa_icon('lock', text: t('.logout')) %> + <% if ENV.fetch('NOKUL_SSO_ENABLE', false) %> + <%= link_to "#{Tenant.credentials.lemonldap[:issuer]}/oauth2/logout", class: 'dropdown-item' do %> + <%= fa_icon('lock', text: t('.logout')) %> + <% end %> + <% else %> + <%= link_to :logout, class: 'dropdown-item', method: :delete do %> + <%= fa_icon('lock', text: t('.logout')) %> + <% end %> <% end %>
diff --git a/app/views/patron/components/_role_permissions.html.erb b/app/views/patron/components/_role_permissions.html.erb new file mode 100644 index 000000000..295323409 --- /dev/null +++ b/app/views/patron/components/_role_permissions.html.erb @@ -0,0 +1,36 @@ +
+ + + + + + <% Patron::PermissionBuilder.supported_privileges.each do |privilege| %> + + <% end %> + <% if actions_visible %> + + <% end %> + + + + <% permissions.each do |permission| %> + + + + <% Patron::PermissionBuilder.supported_privileges.each do |privilege| %> + + <% end %> + <% if actions_visible %> + + <% end %> + + <% end %> + +
<%= t('name', scope: %i[activerecord attributes patron/permission]) %><%= t('identifier', scope: %i[activerecord attributes patron/permission]) %><%= t(privilege, scope: %i[active_flag patron/role_permission privileges]) %><%= t('actions') %>
<%= link_to(permission.name, permission.permission) %><%= permission.identifier %> + <% if RoleManagement.privilege?(permission.identifier.to_sym, privilege) %> + <%= icon_for_check(permission.privileges.public_send("#{privilege}?")) %> + <% else %> + - + <% end %> + <%= link_to_show(permission) %>
+
diff --git a/app/views/patron/roles/_form.html.erb b/app/views/patron/roles/_form.html.erb index 19aaf13cf..5cedc88b8 100644 --- a/app/views/patron/roles/_form.html.erb +++ b/app/views/patron/roles/_form.html.erb @@ -13,23 +13,37 @@ <%= simple_form_for(@role) do |f| %> <%= f.error_notification %> -
- <%= f.input :name, required: true %> -
+
+
+ <%= f.input :name, required: true %> +
-
- <%= f.input :identifier, required: true %> -
+
+ <%= f.input :identifier, required: true %> +
-
- <%= f.association :permissions, required: true %> -
+
+
+

<%= t('.permissions') %>

+
+
-
- <%= f.button :submit, class: 'btn btn-outline-success btn-sm' %> + <%= f.simple_fields_for :role_permissions do |role_permission| %> + <%= render 'role_permission_fields', f: role_permission %> + <% end %> + + + +
+ <%= f.button :submit, class: 'btn btn-outline-success btn-sm' %> +
<% end %>
+ +<%= javascript_include_tag 'shared/cocoon' %> diff --git a/app/views/patron/roles/_role_permission_fields.html.erb b/app/views/patron/roles/_role_permission_fields.html.erb new file mode 100644 index 000000000..e3800b8c2 --- /dev/null +++ b/app/views/patron/roles/_role_permission_fields.html.erb @@ -0,0 +1,29 @@ +
+
+
+ <%= link_to_remove_association f do %> + <%= button_tag('x', type: 'button', class: 'close', data: { confirm: t('are_you_sure') }) %> + <% end %> +
+
+ <% if f.object.errors.any? %> +
    + <% f.object.errors.full_messages.each do |msg| %> +
  • <%= raw msg %>
  • + <% end %> +
+
+ <% end %> +
+
+ <%= f.association :permission %> +
+
+
+ <%= f.input :privileges, as: :check_boxes, collection: f.object.class.privileges.pairs %> +
+
+
+
+
+
diff --git a/app/views/patron/roles/show.html.erb b/app/views/patron/roles/show.html.erb index cabc97f5b..bb4d7b836 100644 --- a/app/views/patron/roles/show.html.erb +++ b/app/views/patron/roles/show.html.erb @@ -1,5 +1,5 @@ <%= action_bar do %> - <%= link_to_back :back %> + <%= link_to_back %i[patron roles] %> <%= link_to_edit [:edit, @role] %> <% end %> @@ -18,7 +18,7 @@ <%= t('.permissions') %>
- <%= render 'patron/components/permissions', + <%= render 'patron/components/role_permissions', permissions: @permissions, actions_visible: false %>
diff --git a/app/views/studentship/course_enrollments/_student_info.html.erb b/app/views/studentship/course_enrollments/_student_info.html.erb index 818419fa5..09fc2406c 100644 --- a/app/views/studentship/course_enrollments/_student_info.html.erb +++ b/app/views/studentship/course_enrollments/_student_info.html.erb @@ -25,8 +25,8 @@ <%= @student.gpa %> - <%= t('.enrollment_status') %> - <%= t('activerecord.enums.course_enrollment.statuses')[@service.enrollment_status] %> + <%= t('.registration_status') %> + <%= enum_t(@student.current_registration, :status) %> diff --git a/app/views/studentship/course_enrollments/index.html.erb b/app/views/studentship/course_enrollments/index.html.erb index 810855bed..93efebe64 100644 --- a/app/views/studentship/course_enrollments/index.html.erb +++ b/app/views/studentship/course_enrollments/index.html.erb @@ -10,10 +10,10 @@
- <% if @service.enrollment_status != :saved %> - <% url = new_student_course_enrollment_url(@student) %> - <% else %> + <% if @student.current_registration.saved? %> <% url = list_student_course_enrollments_url(@student) %> + <% else %> + <% url = new_student_course_enrollment_url(@student) %> <% end %> <%= link_to url, class: 'list-group-item list-group-item-action align-items-center' do %> @@ -21,7 +21,7 @@
<%= @student.unit.name %>

<%= @student.registation_date_range %>

- <%= "#{t('.enrollment_status')}: #{t('activerecord.enums.course_enrollment.statuses')[@service.enrollment_status]}" if @service.enrollment_status.presence %> + <%= "#{t('.registration_status')}: #{enum_t(@student.current_registration, :status)}" %> <% end %>
diff --git a/config/environments/development.rb b/config/environments/development.rb index 722dbc3a5..869761468 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -3,7 +3,7 @@ Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. - %w[.ngrok.io .serveo.net .localtunnel.me].each { |host| config.hosts << host } + %w[.ngrok.io .serveo.net .localtunnel.me .vagrant.ga].each { |host| config.hosts << host } # In the development environment your application's code is reloaded on # every request. This slows down response time but is perfect for development @@ -65,4 +65,7 @@ # 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 + + # Web console permissions + config.web_console.permissions = '10.0.3.0/16' end diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 93f6ac9e0..53afb1cfc 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -170,7 +170,14 @@ # ==> Configuration for :timeoutable # The time you want to timeout the user session without activity. After this # time the user will be asked for credentials again. Default is 30 minutes. - config.timeout_in = 45.minutes + config.timeout_in = + if Nokul::SSO.enabled? + 5.minutes + elsif Rails.env.development? + 120.minutes + else + 45.minutes + end # ==> Configuration for :lockable # Defines which strategy will be used to lock an account. @@ -277,4 +284,12 @@ # When using OmniAuth, Devise cannot automatically set OmniAuth path, # so you need to do it manually. For the users scope, it would be: # config.omniauth_path_prefix = '/my_engine/users/auth' + + config.omniauth :openid_connect, + name: :openid_connect, + scope: %i[openid email], + response_type: :code, + issuer: Tenant.credentials.lemonldap[:issuer], + discovery: true, + client_options: Tenant.credentials.lemonldap[:client_options] end diff --git a/config/initializers/role_management.rb b/config/initializers/role_management.rb index 9a09a0cad..f6b0522c3 100644 --- a/config/initializers/role_management.rb +++ b/config/initializers/role_management.rb @@ -7,21 +7,28 @@ class RoleManagement # permissions permission :role_management, name: 'Rol Yönetimi', - description: 'Rol Yönetim Yetkisi' + description: 'Rol Yönetim Yetkisi', + privileges: %i[read write destroy] permission :permission_management, name: 'İzin Yönetimi', - description: 'İzin Yönetim Yetkisi' + description: 'İzin Yönetim Yetkisi', + privileges: %i[read write destroy] permission :scope_query_management, name: 'Kapsam Sorgu Yönetimi', - description: 'Kapsam Sorgu Yönetim Yetkisi' + description: 'Kapsam Sorgu Yönetim Yetkisi', + privileges: %i[read write destroy] permission :authorization_management, name: 'Yetkilendirme Yönetimi', - description: 'Yetkilendirme Yönetimi Yetkisi' + description: 'Yetkilendirme Yönetimi Yetkisi', + privileges: %i[read write destroy] # roles role :authorization_manager, name: 'Yetkilendirme Yöneticisi', - permissions: %i[ - role_management permission_management scope_query_management authorization_management - ] + permissions: { + role_management: %i[read write destroy], + permission_management: %i[read write destroy], + scope_query_management: %i[read write destroy], + authorization_management: %i[read write destroy] + } end diff --git a/config/initializers/ssl.rb b/config/initializers/ssl.rb new file mode 100644 index 000000000..074fc639c --- /dev/null +++ b/config/initializers/ssl.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +if Rails.env.development? + OpenIDConnect.http_config do |config| + config.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE + end +end diff --git a/config/initializers/zeitwerk.rb b/config/initializers/zeitwerk.rb index 955ff84a2..b1878ade6 100644 --- a/config/initializers/zeitwerk.rb +++ b/config/initializers/zeitwerk.rb @@ -2,6 +2,7 @@ Rails.autoloaders.each do |autoloader| autoloader.inflector.inflect( - 'ldap' => 'LDAP' + 'ldap' => 'LDAP', + 'sso' => 'SSO' ) end diff --git a/config/locales/controllers/course_management/available_courses.en.yml b/config/locales/controllers/course_management/available_courses.en.yml index 2c8f903fc..e6eb4b894 100644 --- a/config/locales/controllers/course_management/available_courses.en.yml +++ b/config/locales/controllers/course_management/available_courses.en.yml @@ -8,6 +8,13 @@ en: curriculum: Curriculum groups: Groups unit: Unit + available_course/groups: + name: Group Name + quota: Quota + lecturers: Lecturers + available_course/groups/lecturers: + lecturer: Lecturer + coordinator: Coordinator cocoon: groups: add: Add Group diff --git a/config/locales/controllers/course_management/available_courses.tr.yml b/config/locales/controllers/course_management/available_courses.tr.yml index 85ab509f0..939d32436 100644 --- a/config/locales/controllers/course_management/available_courses.tr.yml +++ b/config/locales/controllers/course_management/available_courses.tr.yml @@ -8,6 +8,13 @@ tr: curriculum: Müfredat groups: Gruplar unit: Birim + available_course/groups: + name: Grup Adı + quota: Kontenjan + lecturers: Öğretim elemanları + available_course/groups/lecturers: + lecturer: Öğretim Elemanı + coordinator: Koordinatör cocoon: groups: add: Grup Ekle diff --git a/config/locales/controllers/meksis/buildings.en.yml b/config/locales/controllers/meksis/buildings.en.yml index 3b2aa6d01..8f24dab2c 100644 --- a/config/locales/controllers/meksis/buildings.en.yml +++ b/config/locales/controllers/meksis/buildings.en.yml @@ -49,3 +49,5 @@ en: chart_of_available_spaces: Numeric Distribution of Available Spaces by Classroom chart_of_classrooms: Numeric Distribution of Classrooms by Place Type chart_of_place_numbers: Numeric Distribution of Place Numbers by Place Type + update: + success: Building successfully updated. diff --git a/config/locales/controllers/meksis/buildings.tr.yml b/config/locales/controllers/meksis/buildings.tr.yml index 0b123f6b7..7a36fd6a5 100644 --- a/config/locales/controllers/meksis/buildings.tr.yml +++ b/config/locales/controllers/meksis/buildings.tr.yml @@ -49,3 +49,5 @@ tr: chart_of_available_spaces: Sınıf Tiplerine Göre Mevcut Alan Miktarı chart_of_classrooms: Mekan Türüne Göre Sınıflar chart_of_place_numbers: Türüne Göre Mekan Sayıları + update: + success: Bina başarıyla güncellenmiştir. diff --git a/config/locales/controllers/patron/permissions.en.yml b/config/locales/controllers/patron/permissions.en.yml index 365af9cba..9bc4fe866 100644 --- a/config/locales/controllers/patron/permissions.en.yml +++ b/config/locales/controllers/patron/permissions.en.yml @@ -5,6 +5,10 @@ en: identifier: Permission Identifier name: Permission Name description: Permission Description + patron/role_permission: + permission: İzin + privileges: Ayrıcalıkları + patron: permissions: index: @@ -15,4 +19,10 @@ en: roles: Roles smart_search_placeholder: Search with Model-Specific Keyword users: Users - + active_flag: + patron/role_permission: + privileges: + read: Read + write: Write + destroy: Destroy + report: Report diff --git a/config/locales/controllers/patron/permissions.tr.yml b/config/locales/controllers/patron/permissions.tr.yml index edee8433c..e42c84199 100644 --- a/config/locales/controllers/patron/permissions.tr.yml +++ b/config/locales/controllers/patron/permissions.tr.yml @@ -5,6 +5,10 @@ tr: identifier: İzin Tanımlayıcı name: İzin Adı description: İzin Açıklaması + privileges: Ayrıcalıkları + patron/role_permission: + permission: İzin + privileges: Ayrıcalıkları patron: permissions: index: @@ -15,4 +19,10 @@ tr: roles: Roller smart_search_placeholder: Modele Özel Anahtar Kelime ile Arama users: Kullanıcılar - + active_flag: + patron/role_permission: + privileges: + read: Okuma + write: Yazma + destroy: Silme + report: Raporlama diff --git a/config/locales/controllers/patron/role_permissions.en.yml b/config/locales/controllers/patron/role_permissions.en.yml new file mode 100644 index 000000000..de8569c44 --- /dev/null +++ b/config/locales/controllers/patron/role_permissions.en.yml @@ -0,0 +1,13 @@ +en: + activerecord: + attributes: + patron/role_permission: + permission: Permission + privileges: Privileges + active_flag: + patron/role_permission: + privileges: + read: Read + write: Write + destroy: Destroy + report: Report diff --git a/config/locales/controllers/patron/role_permissions.tr.yml b/config/locales/controllers/patron/role_permissions.tr.yml new file mode 100644 index 000000000..cb038efea --- /dev/null +++ b/config/locales/controllers/patron/role_permissions.tr.yml @@ -0,0 +1,13 @@ +tr: + activerecord: + attributes: + patron/role_permission: + permission: İzin + privileges: Ayrıcalıkları + active_flag: + patron/role_permission: + privileges: + read: Okuma + write: Yazma + destroy: Silme + report: Raporlama diff --git a/config/locales/controllers/patron/roles.en.yml b/config/locales/controllers/patron/roles.en.yml index 44d357681..8fc3519eb 100644 --- a/config/locales/controllers/patron/roles.en.yml +++ b/config/locales/controllers/patron/roles.en.yml @@ -20,6 +20,8 @@ en: success: Role successfully deleted! edit: form_title: Update the Role + form: + permissions: Permissions index: card_header: Roles new_role_link: Add a New Role diff --git a/config/locales/controllers/patron/roles.tr.yml b/config/locales/controllers/patron/roles.tr.yml index c509af3be..d83e1c717 100644 --- a/config/locales/controllers/patron/roles.tr.yml +++ b/config/locales/controllers/patron/roles.tr.yml @@ -20,6 +20,8 @@ tr: success: Rol başarıyla silindi. edit: form_title: Rolü Güncelle + form: + permissions: İzinler index: card_header: Roller new_role_link: Yeni Rol Ekle diff --git a/config/locales/controllers/studentship/course_enrollments.en.yml b/config/locales/controllers/studentship/course_enrollments.en.yml index 60787ae18..87bb590ce 100644 --- a/config/locales/controllers/studentship/course_enrollments.en.yml +++ b/config/locales/controllers/studentship/course_enrollments.en.yml @@ -5,6 +5,10 @@ en: statuses: draft: Draft saved: Saved + semester_registration: + statuses: + draft: Draft + saved: Saved studentship: course_enrollments: available_courses: &course_attributes @@ -25,14 +29,15 @@ en: success: The course successfully removed from selected courses. errors: already_enrolled_at_group: The maximum amount of ECTS that can be selected from the course group is selected. + empty_selected_courses_list: The list of selected courses is empty. quota_full: The course has reached its quota. must_drop_first: Courses taken from the top semester must be dropped first. not_enough_ects: The amount of ECTS that can be selected is not enough for you to take this course. not_proper_register_event_range: There is no online course registration activity covering the date range today. - registration completed: You can not perform this action since you have completed the course selection. + registration_completed: You can not perform this action since you have completed the course selection. index: course_enrollments: Course Enrollments - enrollment_status: Enrollment Status + registration_status: Enrollment Status registration_date_range: "Online Course Registration Dates: %{start_time} - %{end_time}" list: <<: *course_attributes @@ -54,7 +59,7 @@ en: success: Selected courses successfully saved. student_info: academic_term: Academic Term - enrollment_status: Enrollment Status + registration_status: Enrollment Status gpa: GPA program: Program student_info: Student Information diff --git a/config/locales/controllers/studentship/course_enrollments.tr.yml b/config/locales/controllers/studentship/course_enrollments.tr.yml index a6aef35af..5916503a9 100644 --- a/config/locales/controllers/studentship/course_enrollments.tr.yml +++ b/config/locales/controllers/studentship/course_enrollments.tr.yml @@ -5,6 +5,10 @@ tr: statuses: draft: Taslak saved: Kaydedildi + semester_registration: + statuses: + draft: Taslak + saved: Kaydedildi studentship: course_enrollments: available_courses: &course_attributes @@ -25,14 +29,15 @@ tr: success: Ders seçilen derslerden çıkarıldı. errors: already_enrolled_at_group: Ders grubundan seçilebilecek maksimum AKTS miktarı kadar ders seçilmiş. + empty_selected_courses_list: Seçilen dersler listesi boş. quota_full: Ders için belirlenen kontenjan dolmuş. must_drop_first: Öncelikli olarak en üst dönemden alınan dersler çıkarılmalı. not_enough_ects: Seçilebilecek AKTS miktarı bu dersi alabilmeniz için yeterli değil. not_proper_register_event_range: Tarih aralığı bugünü kapsayan çevrimiçi ders kayıtlanma aktivitesi bulunmamaktadır. - registration completed: Ders seçimini tamamladığınız için bu işlemi gerçekleştiremezsiniz. + registration_completed: Ders seçimini tamamladığınız için bu işlemi gerçekleştiremezsiniz. index: course_enrollments: Ders Kayıtları - enrollment_status: Kayıtlanma Durumu + registration_status: Kayıt Durumu registration_date_range: "Çevrimiçi Ders Kayıt Tarihleri: %{start_time} - %{end_time}" list: <<: *course_attributes @@ -54,7 +59,7 @@ tr: success: Seçilen dersler başarıyla kaydedildi. student_info: academic_term: Akademik Dönem - enrollment_status: Kayıtlanma Durumu + registration_status: Kayıtlanma Durumu gpa: GANO program: Program student_info: Öğrenci Bilgileri diff --git a/config/locales/errors/en.yml b/config/locales/errors/en.yml index 099bf84f6..1f113f7d5 100644 --- a/config/locales/errors/en.yml +++ b/config/locales/errors/en.yml @@ -6,3 +6,4 @@ en: invalid_email: This is not a valid e-mail address! system_error: The system error has occurred. Please try later. unicode_not_supported: Receiver does not support unicode encoding! + invalid_authenticity_token: Invalid authenticity token! Please try again. diff --git a/config/locales/errors/tr.yml b/config/locales/errors/tr.yml index 2b9967d6b..575209ba7 100644 --- a/config/locales/errors/tr.yml +++ b/config/locales/errors/tr.yml @@ -6,3 +6,4 @@ tr: invalid_email: Geçerli bir e-mail adresi değil! system_error: Sistemsel bir hata oluştu. Lütfen daha sonra tekrar deneyin. unicode_not_supported: Alıcı numara unicode desteklemiyor! + invalid_authenticity_token: Geçersiz kimlik doğrulama jetonu! Lütfen tekrar deneyin. diff --git a/config/locales/patron/en.yml b/config/locales/patron/en.yml index 83aa30908..816aa2de5 100644 --- a/config/locales/patron/en.yml +++ b/config/locales/patron/en.yml @@ -1,5 +1,7 @@ en: patron: + errors: + invalid_privilege: '%{privilege} is not a valid privilege for this permission' skip_empties: 'true': 'Yes' 'false': 'No' diff --git a/config/locales/patron/tr.yml b/config/locales/patron/tr.yml index ccfe56c98..583e37440 100644 --- a/config/locales/patron/tr.yml +++ b/config/locales/patron/tr.yml @@ -1,5 +1,7 @@ tr: patron: + errors: + invalid_privilege: Bu izin için %{privilege} geçerli bir ayrıcalık değil skip_empties: 'true': 'Evet' 'false': 'Hayır' diff --git a/config/locales/validators/en.yml b/config/locales/validators/en.yml index fcd15bf8e..b498b3870 100644 --- a/config/locales/validators/en.yml +++ b/config/locales/validators/en.yml @@ -30,6 +30,8 @@ en: image: not_permitted: '%{mime_type} is not an allowed file type. You can upload files in %{extension_whitelist} formats.' size_not_satisfied: File size is not between the permitted range. You can upload files from minimum %{minimum} KBs to maximum %{maximum} MBs. + prospective_student: + unchangeable_variables: The program and academic term of a registered student cannot be changed. position: invalid_end_date: Start date is selected as a date after the end date multiple_active_repetitive: This employee already has this position in this unit diff --git a/config/locales/validators/tr.yml b/config/locales/validators/tr.yml index 03aa66bdf..49d5a2cdf 100644 --- a/config/locales/validators/tr.yml +++ b/config/locales/validators/tr.yml @@ -30,6 +30,8 @@ tr: image: not_permitted: '%{mime_type} izin verilen bir dosya türü değil. %{extension_whitelist} türlerinde bir dosya yükleyebilirsiniz' size_not_satisfied: Dosya boyutu izin verilen aralıkta değil. Yükleyeceğiniz dosya en az %{minimum} KB, en çok %{maximum} MB boyutunda olabilir. + prospective_student: + unchangeable_variables: Kayıtlı bir öğrencinin yerleştiği program ve akademik dönemi değiştirilemez. position: invalid_end_date: Görev başlangıç tarihi bitiş tarihinden sonraki bir tarih olarak seçilmiş. multiple_active_repetitive: Bu personelin seçilen birimde aktif olarak aynı görevi var! diff --git a/config/routes/account.rb b/config/routes/account.rb index 79541208b..0948b9e8b 100644 --- a/config/routes/account.rb +++ b/config/routes/account.rb @@ -1,9 +1,10 @@ # frozen_string_literal: true devise_for :users, skip: :registrations, controllers: { - passwords: 'account/passwords', - sessions: 'account/sessions', - unlocks: 'account/unlocks' + passwords: 'account/passwords', + sessions: 'account/sessions', + unlocks: 'account/unlocks', + omniauth_callbacks: 'account/omniauth_callbacks' } devise_scope :user do @@ -11,6 +12,7 @@ get 'login', to: 'sessions#new' get 'recover', to: 'passwords#new' delete 'logout', to: 'sessions#destroy' + get 'logout', to: 'sessions#destroy' end end diff --git a/config/routes/meksis.rb b/config/routes/meksis.rb index 2151d4777..24cff8b78 100644 --- a/config/routes/meksis.rb +++ b/config/routes/meksis.rb @@ -3,8 +3,8 @@ namespace :meksis do get '/', to: 'dashboard#index' - resources :place_types - resources :buildings do - resources :classrooms + resources :place_types, only: %i[index show] + resources :buildings, except: %i[new create destroy] do + resources :classrooms, only: %i[index show] end end diff --git a/db/beta_seed/user.rb b/db/beta_seed/user.rb new file mode 100644 index 000000000..87ba7dacf --- /dev/null +++ b/db/beta_seed/user.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +user = User.new( + id_number: 11_111_111_111, + email: 'cezmi@baum.omu.edu.tr', + password: '123456', + password_confirmation: '123456', + activated: true +) + +User.skip_callback(:commit, :after, :build_address_information) +User.skip_callback(:commit, :after, :build_identity_information) +user.save(validate: false) +User.after_create_commit :build_address_information +User.after_create_commit :build_identity_information + +Identity.create!( + type: 'informal', + first_name: 'Cezmi Seha', + last_name: 'SAHİR', + mothers_name: 'Bilge', + fathers_name: 'Emre Can', + gender: 'male', + marital_status: 'single', + place_of_birth: 'Samsun', + date_of_birth: Time.zone.now.to_date, + user_id: user.id, + student_id: nil +) + +Address.create!( + type: 'informal', + full_address: 'Ondokuz Mayıs Üniversitesi Rektörlük Binası Kurupelit Kampüsü, 55139 Atakum / SAMSUN', + district_id: 769, + user_id: user.id +) + +user.roles << Patron::Role.all diff --git a/db/migrate/20191112123931_add_privileges_to_role_permission.rb b/db/migrate/20191112123931_add_privileges_to_role_permission.rb new file mode 100644 index 000000000..6b9432a47 --- /dev/null +++ b/db/migrate/20191112123931_add_privileges_to_role_permission.rb @@ -0,0 +1,5 @@ +class AddPrivilegesToRolePermission < ActiveRecord::Migration[6.0] + def change + add_column :role_permissions, :privileges, :integer, null: false, default: 0, limit: 8 + end +end diff --git a/db/migrate/20191226074849_create_semester_registrations.rb b/db/migrate/20191226074849_create_semester_registrations.rb new file mode 100644 index 000000000..cc9d1c31f --- /dev/null +++ b/db/migrate/20191226074849_create_semester_registrations.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class CreateSemesterRegistrations < ActiveRecord::Migration[6.0] + def change + create_table :semester_registrations do |t| + t.integer :semester + t.integer :status, null: false, default: 0 + t.references :academic_term, null: false, foreign_key: true + t.references :student, null: false, foreign_key: true + t.timestamps + end + + add_null_constraint :semester_registrations, :semester + + add_numericality_constraint :semester_registrations, :semester, greater_than: 0 + add_numericality_constraint :semester_registrations, :status, greater_than_or_equal_to: 0 + end +end diff --git a/db/migrate/20200102083531_remove_semester_and_student_reference_from_course_enrollments.rb b/db/migrate/20200102083531_remove_semester_and_student_reference_from_course_enrollments.rb new file mode 100644 index 000000000..fc0eef96f --- /dev/null +++ b/db/migrate/20200102083531_remove_semester_and_student_reference_from_course_enrollments.rb @@ -0,0 +1,8 @@ +class RemoveSemesterAndStudentReferenceFromCourseEnrollments < ActiveRecord::Migration[6.0] + def change + remove_reference :course_enrollments, :student, foreign_key: true + remove_numericality_constraint :course_enrollments, :semester, greater_than: 0 + remove_null_constraint :course_enrollments, :semester + remove_column :course_enrollments, :semester, :integer + end +end diff --git a/db/migrate/20200102083736_add_semester_registration_reference_to_course_enrollments.rb b/db/migrate/20200102083736_add_semester_registration_reference_to_course_enrollments.rb new file mode 100644 index 000000000..9fe625a29 --- /dev/null +++ b/db/migrate/20200102083736_add_semester_registration_reference_to_course_enrollments.rb @@ -0,0 +1,5 @@ +class AddSemesterRegistrationReferenceToCourseEnrollments < ActiveRecord::Migration[6.0] + def change + add_reference :course_enrollments, :semester_registration, foreign_key: true + end +end diff --git a/db/seeds.rb b/db/seeds.rb index af255c7dd..7c68aa573 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -65,6 +65,3 @@ def restore_seed_data(encrypted_data_name) # authorization data Rake::Task['patron:all'].invoke - -user = User.find_by(id_number: '11111111111') -user.roles << Patron::Role.all if user diff --git a/db/structure.sql b/db/structure.sql index 599802745..c3461ba29 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -1242,14 +1242,11 @@ ALTER SEQUENCE public.course_assessment_methods_id_seq OWNED BY public.course_as CREATE TABLE public.course_enrollments ( id bigint NOT NULL, - semester integer, - student_id bigint NOT NULL, available_course_id bigint NOT NULL, status integer DEFAULT 0 NOT NULL, created_at timestamp(6) without time zone NOT NULL, updated_at timestamp(6) without time zone NOT NULL, - CONSTRAINT course_enrollments_semester_null CHECK ((semester IS NOT NULL)), - CONSTRAINT course_enrollments_semester_numericality CHECK ((semester > 0)), + semester_registration_id bigint, CONSTRAINT course_enrollments_status_numericality CHECK ((status >= 0)) ); @@ -2755,7 +2752,8 @@ CREATE TABLE public.role_permissions ( role_id bigint NOT NULL, permission_id bigint NOT NULL, created_at timestamp(6) without time zone NOT NULL, - updated_at timestamp(6) without time zone NOT NULL + updated_at timestamp(6) without time zone NOT NULL, + privileges bigint DEFAULT 0 NOT NULL ); @@ -2857,6 +2855,43 @@ CREATE SEQUENCE public.scope_assignments_id_seq ALTER SEQUENCE public.scope_assignments_id_seq OWNED BY public.scope_assignments.id; +-- +-- Name: semester_registrations; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.semester_registrations ( + id bigint NOT NULL, + semester integer, + status integer DEFAULT 0 NOT NULL, + academic_term_id bigint NOT NULL, + student_id bigint NOT NULL, + created_at timestamp(6) without time zone NOT NULL, + updated_at timestamp(6) without time zone NOT NULL, + CONSTRAINT semester_registrations_semester_null CHECK ((semester IS NOT NULL)), + CONSTRAINT semester_registrations_semester_numericality CHECK ((semester > 0)), + CONSTRAINT semester_registrations_status_numericality CHECK ((status >= 0)) +); + + +-- +-- Name: semester_registrations_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.semester_registrations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: semester_registrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.semester_registrations_id_seq OWNED BY public.semester_registrations.id; + + -- -- Name: student_disability_types; Type: TABLE; Schema: public; Owner: - -- @@ -4042,6 +4077,13 @@ ALTER TABLE ONLY public.roles ALTER COLUMN id SET DEFAULT nextval('public.roles_ ALTER TABLE ONLY public.scope_assignments ALTER COLUMN id SET DEFAULT nextval('public.scope_assignments_id_seq'::regclass); +-- +-- Name: semester_registrations id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.semester_registrations ALTER COLUMN id SET DEFAULT nextval('public.semester_registrations_id_seq'::regclass); + + -- -- Name: student_disability_types id; Type: DEFAULT; Schema: public; Owner: - -- @@ -4839,6 +4881,14 @@ ALTER TABLE ONLY public.scope_assignments ADD CONSTRAINT scope_assignments_pkey PRIMARY KEY (id); +-- +-- Name: semester_registrations semester_registrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.semester_registrations + ADD CONSTRAINT semester_registrations_pkey PRIMARY KEY (id); + + -- -- Name: student_disability_types student_disability_types_code_unique; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -5475,10 +5525,10 @@ CREATE INDEX index_course_enrollments_on_available_course_id ON public.course_en -- --- Name: index_course_enrollments_on_student_id; Type: INDEX; Schema: public; Owner: - +-- Name: index_course_enrollments_on_semester_registration_id; Type: INDEX; Schema: public; Owner: - -- -CREATE INDEX index_course_enrollments_on_student_id ON public.course_enrollments USING btree (student_id); +CREATE INDEX index_course_enrollments_on_semester_registration_id ON public.course_enrollments USING btree (semester_registration_id); -- @@ -5915,6 +5965,20 @@ CREATE INDEX index_scope_assignments_on_query_store_id ON public.scope_assignmen CREATE INDEX index_scope_assignments_on_user_id ON public.scope_assignments USING btree (user_id); +-- +-- Name: index_semester_registrations_on_academic_term_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_semester_registrations_on_academic_term_id ON public.semester_registrations USING btree (academic_term_id); + + +-- +-- Name: index_semester_registrations_on_student_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_semester_registrations_on_student_id ON public.semester_registrations USING btree (student_id); + + -- -- Name: index_students_on_unit_id; Type: INDEX; Schema: public; Owner: - -- @@ -6244,6 +6308,14 @@ ALTER TABLE ONLY public.course_groups ADD CONSTRAINT fk_rails_4af2ef6ebe FOREIGN KEY (course_group_type_id) REFERENCES public.course_group_types(id); +-- +-- Name: semester_registrations fk_rails_4de980fa38; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.semester_registrations + ADD CONSTRAINT fk_rails_4de980fa38 FOREIGN KEY (academic_term_id) REFERENCES public.academic_terms(id); + + -- -- Name: calendar_committee_decisions fk_rails_4f3eb3da94; Type: FK CONSTRAINT; Schema: public; Owner: - -- @@ -6404,14 +6476,6 @@ ALTER TABLE ONLY public.units ADD CONSTRAINT fk_rails_8ab0da65e4 FOREIGN KEY (unit_instruction_type_id) REFERENCES public.unit_instruction_types(id); --- --- Name: course_enrollments fk_rails_8ab18ea2b7; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.course_enrollments - ADD CONSTRAINT fk_rails_8ab18ea2b7 FOREIGN KEY (student_id) REFERENCES public.students(id); - - -- -- Name: positions fk_rails_8d264a5cbc; Type: FK CONSTRAINT; Schema: public; Owner: - -- @@ -6484,6 +6548,14 @@ ALTER TABLE ONLY public.scope_assignments ADD CONSTRAINT fk_rails_9d2d00a9ee FOREIGN KEY (user_id) REFERENCES public.users(id); +-- +-- Name: semester_registrations fk_rails_a47620f287; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.semester_registrations + ADD CONSTRAINT fk_rails_a47620f287 FOREIGN KEY (student_id) REFERENCES public.students(id); + + -- -- Name: prospective_students fk_rails_a6111d55a4; Type: FK CONSTRAINT; Schema: public; Owner: - -- @@ -6572,6 +6644,14 @@ ALTER TABLE ONLY public.academic_credentials ADD CONSTRAINT fk_rails_b9d9c54fa8 FOREIGN KEY (country_id) REFERENCES public.countries(id); +-- +-- Name: course_enrollments fk_rails_baabe22f29; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.course_enrollments + ADD CONSTRAINT fk_rails_baabe22f29 FOREIGN KEY (semester_registration_id) REFERENCES public.semester_registrations(id); + + -- -- Name: course_evaluation_types fk_rails_bb4be290e9; Type: FK CONSTRAINT; Schema: public; Owner: - -- @@ -6898,7 +6978,11 @@ INSERT INTO "schema_migrations" (version) VALUES ('20191018084942'), ('20191021073002'), ('20191111082956'), +('20191112123931'), ('20191113054514'), -('20191127055945'); +('20191127055945'), +('20191226074849'), +('20200102083531'), +('20200102083736'); diff --git a/doc/app/patron.md b/doc/app/patron.md index 1b6708672..cab83b57a 100644 --- a/doc/app/patron.md +++ b/doc/app/patron.md @@ -11,38 +11,30 @@ Yetkilendirme Temel Bilgiler -------------- -Sistem üzerinde kullanıcıların erişebileceği işlevleri belirlemek ve -sınırlandırmak için üç temel bileşen kullanılarak yetkilendirme yapısı -oluşturulmuştur. Bu bileşenler; +Sistem üzerinde kullanıcıların erişebileceği işlevleri belirlemek ve sınırlandırmak için üç temel bileşen kullanılarak +yetkilendirme yapısı oluşturulmuştur. Bu bileşenler; ### İzinler (Permissions) -Belirli bir kapsamda yapabilecek işler için oluşturulan genel bir -tanımlayıcıdır. İzinler built-in olarak oluşturulur ve sistem tarafından sunulan -interface sayesinde kullanıcıların ilgili izne sahiplikleri sorgulanabilir. -(Bknz: User Modeli Üzerinden Yetki ve Rol Sorgulama) Örneğin, sistem üzerinde -dersler ile ilgili işlevleri yapabilmek için `course_managemant` adında bir izin -tanımlanabilir. İzin tanımlamaları, ihtiyaçlara özgü olarak -`ders_olusturma_izni` şeklinde daha spesifik tanımlanabilir. Bu tanımlamalar +Belirli bir kapsamda yapabilecek işler için oluşturulan genel bir tanımlayıcıdır. İzinler built-in olarak oluşturulur ve +sistem tarafından sunulan interface sayesinde kullanıcıların ilgili izne sahiplikleri sorgulanabilir. Örneğin, sistem +üzerinde dersler ile ilgili işlevleri yapabilmek için `course_managemant` adında bir izin tanımlanabilir. İzin +tanımlamaları, ihtiyaçlara özgü olarak `ders_olusturma_izni` şeklinde daha spesifik tanımlanabilir. Bu tanımlamalar yetkilendirme ihtiyaçlarına göre geliştiriciler tarafından belirlenebilir. ### Rol (Role) -İzinlerin gruplandırılarak kullanıcılara atanabilmesini sağlayan bileşendir. -Kullanıcı ile izinler arasındaki bağlantı kullanıcı-rol ilişkisi ile sağlanır. -Yukarıda belirtilen görevi dışında diğer bir görevi ise kullanıcılar arasındaki -üst seviyeli yetki ayrımını sağlamaktır. Üst seviyeli yetki ayrımından kasıt -`Super Admin`, `Admin`, `Authorization Manager`, `Student` ve `Lecturer` gibi -roller ile üst seviye erişim sınırlamalarını belirlemektir. +İzinlerin gruplandırılarak kullanıcılara atanabilmesini sağlayan bileşendir. Kullanıcı ile izinler arasındaki bağlantı +kullanıcı-rol ilişkisi ile sağlanır. Yukarıda belirtilen görevi dışında diğer bir görevi ise kullanıcılar arasındaki üst +seviyeli yetki ayrımını sağlamaktır. Üst seviyeli yetki ayrımından kasıt `Super Admin`, `Admin`, `Authorization +Manager`, `Student` ve `Lecturer` gibi roller ile üst seviye erişim sınırlamalarını belirlemektir. ### Kapsamlar (Scopes) -Kapsam, sistem üzerinde dinamik olarak veri erişim kısıtlanması sağlayan -bileşendir. Web arayüzünde oluşturulan formlar kullanılarak kapsamlar için -sorgulama parametreleri oluşturulur. Bu parametreler `QueryStore` adından bir -modelde tutulmaktadır. Oluşturulan kapsam sorgu parametreleri kullanıcılar ile -ilişkilendirilerek, kullanıcıların veri erişimleri kısıtlanır. (Bknz: Kapsam -Oluşturması ve Kullanımı) +Kapsam, sistem üzerinde dinamik olarak veri erişim kısıtlanması sağlayan bileşendir. Web arayüzünde oluşturulan formlar +kullanılarak kapsamlar için sorgulama parametreleri oluşturulur. Bu parametreler `QueryStore` adından bir modelde +tutulmaktadır. Oluşturulan kapsam sorgu parametreleri kullanıcılar ile ilişkilendirilerek, kullanıcıların veri +erişimleri kısıtlanır. (Bknz: Kapsam Oluşturması ve Kullanımı) Yetkilendirme Alt Yapısı ------------------------ @@ -51,6 +43,64 @@ Yetkilendirme Alt Yapısı Rol ve izin bazlı yetkilendirme yönetimi için `Pundit` gemi kullanılmıştır. +### Dahili (built-in) Rol ve İzin Tanımlama + +Sistem genelinde temel rollendirme için kullanılacak rol ve izinlerin built-in olarak oluşturulması gerekir. Dahili rol +ve izinler `config/initializers/role_management.rb` dosyası üzerinden tanımlanır. Aşağıda rol ve izin tanımlama +örneğine görmektesiniz. + +```ruby +class RoleManagement + extend Patron::PermissionBuilder + extend Patron::RoleBuilder + + # permissions + permission :foo, + name: 'Foo', + description: 'Foo için Temel İzin Açıklaması', + privileges: %i[read write destroy] + + permission :foo, + name: 'Bar', + description: 'Bar için Temel İzin Açıklaması', + privileges: %i[read write] + + # roles + role :authorization_manager, + name: 'Rol Adı', + permissions: { + foo: %i[read write destroy], + bar: %i[read] + } +end +``` + +#### İzin Tanımlama + +`permission(identifier, name:, description:, privileges:)` + +Parametreler: + +- `identifier (String):` İznin tekil tanımlayıcısı +- `name (String):` İznin yaptığı işi belirtebilecek açıklayıcı kısa ad +- `description (String):` İzin için detaylı açıklama +- `privileges (Array[Symbol]):` Desteklediği ayrıcalıklar + +#### Rol Tanımlama + +`role(identifier, name:, permissions:)` + +Parametreler: + +- `identifier (String):` Rolün tekil tanımlayıcısı +- `name (String):` Rolün yaptığı işi belirtebilecek açıklayıcı kısa ad +- `permissions (Hash):` Rolün sahip olduğu izinler ve bu rol için izinlere verilen ayrıcalıklar **({ izin_tanımlayıcısı: + [Ayrıcalık Listesi] })** + +### Dahili Rol ve İzinleri Veritabanına Aktarma + +`rails patron:all` rake görevini kullanarak veritabanı aktarım işlemini gerçekleştirebilirsiniz. + ### Kapsam Oluşturması ve Kullanımı `Unit` modeli için kapsam oluşturma örneği üzerinden anlatılacaktır. @@ -88,17 +138,14 @@ end 1. `app\scopes` dizini altına `unit_scope.rb` adından bir dosya oluşturulur. -2. `unit_scope.rb` dosyasına `UnitScope` adından ve `Patron::Scope::Base` - sınıfından miras alan bir sınıf oluşturulur. Oluşturulan kapsam sınıfı için - isimlendirmeler `%sScope` kuralı göre yapılır. +2. `unit_scope.rb` dosyasına `UnitScope` adından ve `Patron::Scope::Base` sınıfından miras alan bir sınıf oluşturulur. + Oluşturulan kapsam sınıfı için isimlendirmeler `%sScope` kuralı göre yapılır. -3. Oluşturulan `UnitScope` sınıfına `Patron::Scope::Base` sınıfından gelen - `filter`, `preview_attributes` ve `bypass?` metodları kullanılarak gerekli - tanımlamalar yapılır. +3. Oluşturulan `UnitScope` sınıfına `Patron::Scope::Base` sınıfından gelen `filter`, `preview_attributes` ve `bypass?` + metodları kullanılarak gerekli tanımlamalar yapılır. -4. `Unit` modeline `Patron::Scope::Model` modülü `include` edilir. Bu modülün - iclude edilemesi ile modele `scope_for` adından bir class metod eklenmiş - olur. Model için veri sınırlaması bu metod aracılığıyla yapılmaktadır. +4. `Unit` modeline `Patron::Scope::Model` modülü `include` edilir. Bu modülün iclude edilemesi ile modele `scope_for` + adından bir class metod eklenmiş olur. Model için veri sınırlaması bu metod aracılığıyla yapılmaktadır. ```ruby # bypass'ın varsayılan değeri kapsam sınıfına tanımlan bypass? metodundan dönen @@ -114,9 +161,8 @@ end #### filter -Unit modelinde bulunan niteliklerden hangisinin kapsam sorgu üretiminde -kullanılacağını belirlemek için kullanılan metoddur. Bu metodun kullanım şekli -ve alabileceği parametreler aşağıdaki gibidir. +Unit modelinde bulunan niteliklerden hangisinin kapsam sorgu üretiminde kullanılacağını belirlemek için kullanılan +metoddur. Bu metodun kullanım şekli ve alabileceği parametreler aşağıdaki gibidir. ```ruby filter :attribute_name, collection: [], # opsiyonel @@ -127,39 +173,29 @@ ve alabileceği parametreler aşağıdaki gibidir. - **attribute_name:** Kapsam oluşturulan modelde filtrelenecek niteliğin adı, bu nitelik sorgulanabilir olmalıdır. -- **collection:** UI üzerinde filtre değeri için oluşturulan input'un - `selectbox` türünde olmasını ve selectbox listesindeki değerlerin - collection'a tanımlanan değerlerden oluşmasını sağlayan parametredir. Bu - parametreye verilen değer `Proc` sınıfına ait olmalıdır. Eğer `collection` - tanımlanmaz ise filtre değeri için oluşturulan input `string` türünde - olacaktır. - -- **multiple:** UI üzerinde filtre değeri için oluşturulan input'un `selectbox` - olması durumunda liste üzerinden birden fazla değer seçimi yapılabilmesini - sağlayan parametredir. `true` veya `false` olmak üzere iki değerden birini - alır. `true` olması durumundan çoklu seçim aktifleştirilmiş olur. - -- **i18n_key:** UI üzerinde filtre ile ilgili çevirilerde kullanılacak anahtar - kelimenin belirlenmesi sağlayan parametredir. Boş geçilmesi halinde - `i18n_key` filtre tanımlanan nitelik adıyla aynı olur. Örnek üzerinden de - belirtecek olursak filtre niteliği `unit_type_id` iken çevirilerde - kullanılacak anahtar kelime `unit_type` olarak belirlenmiştir. Ek olarak - filtreler için çeviriler `activerecord.attributes.model` kapsamı altında - aranır. +- **collection:** UI üzerinde filtre değeri için oluşturulan input'un `selectbox` türünde olmasını ve selectbox + listesindeki değerlerin collection'a tanımlanan değerlerden oluşmasını sağlayan parametredir. Bu parametreye verilen + değer `Proc` sınıfına ait olmalıdır. Eğer `collection` tanımlanmaz ise filtre değeri için oluşturulan input `string` + türünde olacaktır. + +- **multiple:** UI üzerinde filtre değeri için oluşturulan input'un `selectbox` olması durumunda liste üzerinden birden + fazla değer seçimi yapılabilmesini sağlayan parametredir. `true` veya `false` olmak üzere iki değerden birini alır. + `true` olması durumundan çoklu seçim aktifleştirilmiş olur. + +- **i18n_key:** UI üzerinde filtre ile ilgili çevirilerde kullanılacak anahtar kelimenin belirlenmesi sağlayan + parametredir. Boş geçilmesi halinde `i18n_key` filtre tanımlanan nitelik adıyla aynı olur. Örnek üzerinden de + belirtecek olursak filtre niteliği `unit_type_id` iken çevirilerde kullanılacak anahtar kelime `unit_type` olarak + belirlenmiştir. Ek olarak filtreler için çeviriler `activerecord.attributes.model` kapsamı altında aranır. #### dynamic_value - Filterelere statik ve dinamik türde iki değer atanabilir. Statik değer, - kullanıcıdan kullanıcıya değişmeyen ve herhangi bir hesaplanma yapılmadan - sabit olarak belirlenen değerlerdir. Dimanik değer ise, kullanıcıdan - kullanıcıya değişiklik gösterebilecek, kapsam sınıfında tanımlanan ve her - defasında belirlenen lojiğe göre hesaplanan değerdir. + Filterelere statik ve dinamik türde iki değer atanabilir. Statik değer, kullanıcıdan kullanıcıya değişmeyen ve + herhangi bir hesaplanma yapılmadan sabit olarak belirlenen değerlerdir. Dimanik değer ise, kullanıcıdan kullanıcıya + değişiklik gösterebilecek, kapsam sınıfında tanımlanan ve her defasında belirlenen lojiğe göre hesaplanan değerdir. - Kapsam oluşturulurken filtrelere dinamik değer atayabilmek için kapsam sınıfı - içerisine `dynamic_value` tanımlamanız ve `dynamic_value`'nın `scope` - niteliğine dinamik değeri kullanabilecek filtreleri tanımlamanız - gerekmektedir. Bir dinamic_value sadece scope niteliği ile belirlenen - filtrelere tanımlanabilir. + Kapsam oluşturulurken filtrelere dinamik değer atayabilmek için kapsam sınıfı içerisine `dynamic_value` tanımlamanız + ve `dynamic_value`'nın `scope` niteliğine dinamik değeri kullanabilecek filtreleri tanımlamanız gerekmektedir. Bir + dinamic_value sadece scope niteliği ile belirlenen filtrelere tanımlanabilir. **Not:** Metod içisinde kapsamın uygulandığı kullanıcıya `user` niteliğiyle erişilir. @@ -176,14 +212,11 @@ ve alabileceği parametreler aşağıdaki gibidir. #### preview_attributes - Ön izleme sırasında hangi niteliklerin görüntüleneceğinin belirlenmesini - sağlayan metoddur. Eğer `preview_attributes` tanımlanmamışsa, - `preview_attributes` olarak filtreler kullanılır. + Ön izleme sırasında hangi niteliklerin görüntüleneceğinin belirlenmesini sağlayan metoddur. Eğer `preview_attributes` + tanımlanmamışsa, `preview_attributes` olarak filtreler kullanılır. #### bypass - Hangi durumlarda kapsamın bypass edileceğinin belirlendiği metoddur. Bu metod - yardımıyla belirli rollere veya koşullara sahip kullanıcılar için veri - sınırlaması bypass edilebilir. Metod içisinde kapsamın uygulandığı kullanıcıya - `user` niteliğiyle erişilir. Bu metodun `true` veya `false` bir değer - döndürmesi gerekmektedir. + Hangi durumlarda kapsamın bypass edileceğinin belirlendiği metoddur. Bu metod yardımıyla belirli rollere veya + koşullara sahip kullanıcılar için veri sınırlaması bypass edilebilir. Metod içisinde kapsamın uygulandığı kullanıcıya + `user` niteliğiyle erişilir. Bu metodun `true` veya `false` bir değer döndürmesi gerekmektedir. diff --git a/doc/app/sso.md b/doc/app/sso.md new file mode 100644 index 000000000..b902fa02e --- /dev/null +++ b/doc/app/sso.md @@ -0,0 +1,40 @@ +--- +author(s): + - Emre Can Yılmaz (@ecylmz) +--- + +Single Sign-on +============== + +Uygulamada SSO'yu aktif hale getirmek için aşağıdaki ortam değişkeni tanımlanmalıdır. + +```text +NOKUL_SSO_ENABLE=true +``` + +Bu ortam değişkeni olmadığında sistem veritabanından yetkilendirmeye çalışacaktır. LDAP ve veritabanındaki kullanıcı +parolaları aynı olduğundan, kullanıcılar başarılı bir şekilde sisteme giriş yapabilmeye devam edebileceklerdir. + +LemonLDAP +--------- + +LemonLDAP ve LLNG arasındaki bağlantı bir süre sonra kopuyor. Bununla LLNG depolarındaki issue [şudur][LLNG-1807]. + +Geçici çözüm: + +LemonLDAP sunucusunda aşağıdaki gibi keepalive değerleri girilir: + +```bash +$ vim /etc/sysctl +net.ipv4.tcp_keepalive_time = 300 +net.ipv4.tcp_keepalive_intvl = 60 +net.ipv4.tcp_keepalive_probes = 5 +``` + +Yukarıdaki ayarlar şunu yapmaktadır: + +Açık ve boşta olan bir TCP bağlantısına, 300 saniyenin ardından bağlantının hala hayatta olup olmadığını anlamak için +dakikada 1 istek atılır. 5 denemenin ardından eğer karşı taraftan yanıt alınamazsa bağlantı sonlandırılır. Bu kontroller +sırasında arada trafik oluştuğu için firewall bağlantıyı sonlandırmayacaktır. + +[LLNG-1807]: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/issues/1807 diff --git a/doc/development/sso.md b/doc/development/sso.md new file mode 100644 index 000000000..519e3bbf4 --- /dev/null +++ b/doc/development/sso.md @@ -0,0 +1,54 @@ +--- +author(s): + - Emre Can Yılmaz (@ecylmz) +--- + +Single Sign-on +============== + +Geliştirme ortamında Single Sign-On(SSO) denemeleri yapmak için Vagrant ile çalışmanız gerekiyor. Çalışma ortamını hazır +hale getirmek için aşağıdaki komutlar uygulanır: + +```sh +vagrant up ldap --provider=lxc +vagrant up dev --provider=lxc +vagrant up sso --provider=lxc +``` + +Nokul'da SSO'yu etkinleştirmek için `.env` dosyasına aşağıdaki satırı ekleyin: + +```text +NOKUL_SSO_ENABLE=true +``` + +Nokul uygulamasına SSO üzerinden giriş yapabilmek için bir kullanıcınızın olması gerekiyor. Kullanıcınızı hazır hale +getirmek için aşağıdaki komutları rails konsoluna girmelisiniz: + +```ruby +user = User.find_by(id_number: "Geliştirici ekibe sor") +user.password = 12345 +user.password_confirmation = 12345 +user.activated = true +user.save(validate: false) +LDAP::Entity.create(user) +``` + +`vagrant ssh dev` diyerek dev sanal makinesine girip uygulamayı durdurun. Uygulamayı SSL kullanarak başlatmak için: + +```bash +sudo app stop +cd /app +bundle exec rails s -b 'ssl://0.0.0.0:3000?key=/etc/ssl/private/ssl-cert-snakeoil.key&cert=/etc/ssl/certs/ssl-cert-snakeoil.pem' +``` + +Uygulamaya giriş için `https://other.vagrant.ga:3000` adresine gidin. + +LemonLDAP +--------- + +LemonLDAP ile ilgili yapılandırmalar için `https://manager.sso.vagrant.ga` adresine girin. + +```text +Kullanıcı: cezmi +Parola: 12345 +``` diff --git a/lib/scripts/deploy.sh b/lib/scripts/deploy.sh index d0555fe0c..efccba840 100644 --- a/lib/scripts/deploy.sh +++ b/lib/scripts/deploy.sh @@ -66,4 +66,4 @@ sudo -EH -u "$operator" bash -xs <<-'EOF' fi EOF -systemctl disable ufw +ufw disable diff --git a/lib/scripts/ldap.sh b/lib/scripts/ldap.sh index 7917dae0d..4a53db38f 100644 --- a/lib/scripts/ldap.sh +++ b/lib/scripts/ldap.sh @@ -49,3 +49,5 @@ ldapmodify -Q -Y EXTERNAL -H ldapi:// -f 08-acl.ldif ldapadd -x -D "cn=admin,dc=acme,dc=omu,dc=sh" -w 12345 -f import.ldif touch /var/lib/ldap/bootstrapped + +ufw disable diff --git a/lib/scripts/sso.sh b/lib/scripts/sso.sh new file mode 100644 index 000000000..cbdf1b004 --- /dev/null +++ b/lib/scripts/sso.sh @@ -0,0 +1,174 @@ +#!/bin/bash +# shellcheck disable=SC2016 disable=SC1117 + +set -euo pipefail; [[ -z ${TRACE:-} ]] || set -x + +export DEBIAN_FRONTEND=noninteractive + +if [[ ! -f /etc/apt/sources.list.d/lemonldap-ng.list ]]; then + cat >/etc/apt/sources.list.d/lemonldap-ng.list <<-EOF + deb https://lemonldap-ng.org/deb 2.0 main + EOF + curl -fsSL https://lemonldap-ng.org/_media/rpm-gpg-key-ow2 | apt-key add - + + apt-get -y update +fi + +ufw disable + +apt-get -y install lemonldap-ng \ + lemonldap-ng-fastcgi-server \ + lemonldap-ng-doc \ + perlmagick \ + liblasso-perl \ + libio-string-perl \ + libxml-libxslt-perl \ + libxml-simple-perl \ + libunicode-string-perl \ + libsoap-lite-perl \ + libregexp-common-perl \ + libnet-ldap-perl \ + libmime-tools-perl \ + libgd-securityimage-perl \ + libemail-sender-perl \ + libdigest-hmac-perl \ + libdbi-perl \ + libredis-perl \ + libstring-random-perl \ + libapache-session-browseable-perl \ + libcgi-emulate-psgi-perl \ + libcgi-compile-perl \ + cpanminus + +sed -i 's/example\.com/sso\.vagrant\.ga/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1.json +sed -i 's/^;checkTime.*/checkTime = 1/' /etc/lemonldap-ng/lemonldap-ng.ini +sed -i 's/^logLevel.*/logLevel=debug/' /etc/lemonldap-ng/lemonldap-ng.ini + +# allow sso vagrant ip for reload +# shellcheck disable=SC2117 +sed -i '/^\s*location\s*=\s*[/]reload\>/a\ allow 10.0.3.19;' /etc/nginx/sites-available/handler-nginx.conf + +# for vagrant +ln -s /vagrant/lib/templates/sso/etc/nginx/dhparam.pem /etc/nginx/dhparam.pem +ln -s /vagrant/lib/templates/sso/etc/nginx/snippets/ssl-params.conf /etc/nginx/snippets/ssl-params.conf +ln -s /vagrant/lib/templates/sso/etc/nginx/portal-nginx.conf /etc/nginx/sites-enabled/ + +ln -s /etc/nginx/sites-available/handler-nginx.conf /etc/nginx/sites-enabled/ +ln -s /etc/nginx/sites-available/manager-nginx.conf /etc/nginx/sites-enabled/ +ln -s /etc/nginx/sites-available/test-nginx.conf /etc/nginx/sites-enabled/ + +systemctl restart lemonldap-ng-fastcgi-server +systemctl restart nginx + +systemctl enable redis-server +systemctl start redis-server + +cpanm Apache::Session::Redis + +ln -s /usr/share/lemonldap-ng/bin/lemonldap-ng-cli /usr/local/bin + +# CSP Configuration +lemonldap-ng-cli -yes 1 set \ + cspDefault "'self' https://other.vagrant.ga:3000" \ + cspImg "'self' https://other.vagrant.ga:3000" \ + cspScript "'self' https://other.vagrant.ga:3000" \ + cspStyle "'self' https://other.vagrant.ga:3000" \ + cspFont "'self' https://other.vagrant.ga:3000" \ + cspFormAction "'self' https://other.vagrant.ga:3000" \ + cspConnect "'self' https://other.vagrant.ga:3000" + +# security +lemonldap-ng-cli -yes 1 set portalAntiFrame '0' + +# register +lemonldap-ng-cli -yes 1 set registerUrl "https://other.vagrant.ga:3000/activation" + +# Reload Configuration +lemonldap-ng-cli -yes 1 delKey reloadUrls localhost +lemonldap-ng-cli -yes 1 addKey reloadUrls 'reload.sso.vagrant.ga' 'http://reload.sso.vagrant.ga/reload' + +# Session Storage Configuration +lemonldap-ng-cli -yes 1 delKey globalStorageOptions Directory persistentStorageOptions LockDirectory +lemonldap-ng-cli -yes 1 set globalStorage 'Apache::Session::Browseable::Redis' +lemonldap-ng-cli -yes 1 addKey globalStorageOptions 'server' '127.0.0.1:6379' + +# LDAP configuration +lemonldap-ng-cli -yes 1 set \ + authentication 'LDAP' \ + passwordDB 'LDAP' \ + registerDB 'Null' \ + ldapServer 'ldap://ldap.vagrant.ga' \ + ldapPort 389 \ + ldapBase 'dc=acme,dc=omu,dc=sh' \ + managerDn 'cn=admin,dc=acme,dc=omu,dc=sh' \ + managerPassword '12345' \ + AuthLDAPFilter '(&(uid=$user)(objectClass=eduPerson))' \ + mailLDAPFilter '(&(mail=$mail)(objectClass=eduPerson))' + +# LDAP Exported Vars +lemonldap-ng-cli -yes 1 addKey \ + ldapExportedVars uid uid \ + ldapExportedVars cn cn \ + ldapExportedVars sn sn \ + ldapExportedVars mobile mobile \ + ldapExportedVars mail mail \ + ldapExportedVars givenName givenName + +# manager portal auth config +lemonldap-ng-cli -yes 1 addKey \ + 'locationRules/manager.sso.vagrant.ga' 'default' '$uid eq "cezmi"' \ + 'locationRules/manager.sso.vagrant.ga' '(?#Sessions)/(.*?\.(fcgi|psgi)/)?sessions' '$uid eq "cezmi"' \ + 'locationRules/manager.sso.vagrant.ga' '(?#Configuration)^/(.*?\.(fcgi|psgi)/)?(manager\.html|confs/|$)' '$uid eq "cezmi"' \ + 'locationRules/manager.sso.vagrant.ga' '(?#Notifications)/(.*?\.(fcgi|psgi)/)?notifications' '$uid eq "cezmi"' + +# OIDC configuration +lemonldap-ng-cli -yes 1 set \ + issuerDBOpenIDConnectActivation 1 \ + oidcServiceMetaDataIssuer 'https://auth.sso.vagrant.ga' \ + oidcServicePrivateKeySig "$(cat /vagrant/lib/templates/sso/etc/oidc.key)" \ + oidcServicePublicKeySig "$(cat /vagrant/lib/templates/sso/etc/oidc_pub.key)" \ + oidcServiceKeyIdSig "$(genpasswd)" \ + oidcServiceAllowHybridFlow 1 \ + oidcServiceAllowAuthorizationCodeFlow 1 \ + oidcServiceAllowImplicitFlow 1 + +# OIDC RP configuration +# Nokul +lemonldap-ng-cli -yes 1 addKey \ + oidcRPMetaDataExportedVars/nokul email mail \ + oidcRPMetaDataExportedVars/nokul family_name sn \ + oidcRPMetaDataExportedVars/nokul name cn \ + oidcRPMetaDataExportedVars/nokul sub uid + +lemonldap-ng-cli -yes 1 addKey \ + oidcRPMetaDataOptions/nokul oidcRPMetaDataOptionsClientID testclientid \ + oidcRPMetaDataOptions/nokul oidcRPMetaDataOptionsClientSecret testclientsecret + +lemonldap-ng-cli -yes 1 addKey \ + oidcRPMetaDataOptions/nokul oidcRPMetaDataOptionsDisplayName 'Nokul' \ + oidcRPMetaDataOptions/nokul oidcRPMetaDataOptionsRedirectUris 'https://other.vagrant.ga:3000/users/auth/openid_connect/callback' \ + oidcRPMetaDataOptions/nokul oidcRPMetaDataOptionsPostLogoutRedirectUris 'https://other.vagrant.ga:3000' \ + oidcRPMetaDataOptions/nokul oidcRPMetaDataOptionsLogoutUrl 'https://other.vagrant.ga:3000/logout' \ + oidcRPMetaDataOptions/nokul oidcRPMetaDataOptionsLogoutType 'front' + +# Portal customization +STATIC_DIR=/usr/share/lemonldap-ng/portal/htdocs/static +TEMPLATE_DIR=/usr/share/lemonldap-ng/portal/templates + +# static data +mkdir -p $STATIC_DIR/acme/images +pushd $STATIC_DIR/acme +cp -a $STATIC_DIR/bootstrap/js/ $STATIC_DIR/acme +cp -a $STATIC_DIR/bootstrap/css/ $STATIC_DIR/acme +ln -s /vagrant/plugins/tenant/acme/app/assets/images/logos/acme-logo.svg $STATIC_DIR/acme/images/acme-logo.svg + +ln -s /vagrant/plugins/tenant/acme/app/assets/images/backgrounds/background.jpg /usr/share/lemonldap-ng/portal/htdocs/static/common/backgrounds/acme-bg.jpg + +# customized pages +ln -s /vagrant/lib/templates/sso/portal $TEMPLATE_DIR/acme + +# apply changes +lemonldap-ng-cli -yes 1 set portalSkin 'acme' portalSkinBackground 'acme-bg.jpg' + +lemonldap-ng-cli update-cache +systemctl restart lemonldap-ng-fastcgi-server.service diff --git a/lib/tasks/patron.rake b/lib/tasks/patron.rake index 063fd3208..221f816c3 100644 --- a/lib/tasks/patron.rake +++ b/lib/tasks/patron.rake @@ -5,7 +5,9 @@ namespace :patron do task upsert_permissions: :environment do Patron::PermissionBuilder.all.each do |identifier, permission| record = Patron::Permission.find_or_initialize_by(identifier: identifier) - record.assign_attributes(permission.to_h) + record.assign_attributes( + permission.to_h.slice(*Patron::Permission.attribute_names.map(&:to_sym)) + ) record.save end @@ -16,12 +18,16 @@ namespace :patron do desc 'Upsert roles' task upsert_roles: :environment do Patron::RoleBuilder.all.each do |identifier, role| - permissions = Patron::Permission.where(identifier: role.permissions.to_a) - record = Patron::Role.find_or_initialize_by(identifier: identifier) - record.locked = true - record.permissions = permissions - record.name = role.name - record.save + record = Patron::Role.find_or_initialize_by(identifier: identifier) + record.locked = true + record.name = role.name + record.role_permissions = role.permissions.map do |key, privileges| + record.role_permissions.build( + permission_id: Patron::Permission.find_by(identifier: key).id, + privileges: privileges + ) + end + record.save! end end diff --git a/lib/tasks/s3.rake b/lib/tasks/s3.rake index 550e5cd64..5c25de57d 100644 --- a/lib/tasks/s3.rake +++ b/lib/tasks/s3.rake @@ -1,97 +1,12 @@ # frozen_string_literal: true require 'aws-sdk-s3' -require 'fileutils' -require 'open3' require 'singleton' -# Adapted from https://github.com/omu/zoo/blob/master/git-import/git-import -module Shell - Result = Struct.new :args, :out, :err, :exit_code do - def outline - out.first - end - - # :reek:NilCheck - def ok? - exit_code&.zero? - end - - def notok? - !ok? - end - - def command - args.join ' ' - end - end - - # Adapted to popen3 from github.com/mina-deploy/mina - class Runner - def initialize - @coathooks = 0 - end - - def run(*args) - return dummy_result if args.empty? - - out, err, status = - Open3.popen3(*args) do |_, stdout, stderr, wait_thread| - block(stdout, stderr, wait_thread) - end - Result.new args, out, err, status.exitstatus - end - - private - - attr_reader :coathooks - - def block(stdout, stderr, wait_thread) - # Handle `^C` - trap('INT') { handle_sigint(wait_thread.pid) } - - out = stdout.readlines.map(&:chomp) - err = stderr.readlines.map(&:chomp) - - [out, err, wait_thread.value] - end - - def handle_sigint(pid) - message, signal = message_and_signal - warn "\n" + message - ::Process.kill signal, pid - @coathooks += 1 - rescue Errno::ESRCH - warn 'No process to kill.' - end - - def message_and_signal - if coathooks > 1 - ['SIGINT received again. Force quitting...', 'KILL'] - else - ['SIGINT received.', 'TERM'] - end - end - end - - module_function - - def run(args, msg = nil) - warn msg if msg - Runner.new.run(*args) - end - - def run_or_die(args, msg = nil) - result = run(args, msg) - result.ok? || abort("Command failed with exit code #{result.exit_code}: #{result.command}") - result - end -end - class S3 include Singleton - TOPLEVEL = %w[git rev-parse --show-toplevel].freeze + TOPLEVEL = Rails.application.root BUCKET = 'static' def initialize(config = Tenant.credentials.config[:s3]) @@ -99,7 +14,7 @@ class S3 end def pull(file, bucket: BUCKET) - Dir.chdir(Shell.run_or_die(TOPLEVEL).outline) do + Dir.chdir(TOPLEVEL) do target = File.join(Dir.pwd, file) key = File.basename(target) FileUtils.mkdir_p File.dirname(target) @@ -110,7 +25,7 @@ class S3 end def push(file, bucket: BUCKET) - Dir.chdir(Shell.run_or_die(TOPLEVEL).outline) do + Dir.chdir(TOPLEVEL) do body = IO.read(File.join(Dir.pwd, file)) key = File.basename(file) client.put_object bucket: bucket, body: body, key: key diff --git a/lib/tasks/static_analysis/all.rake b/lib/tasks/static_analysis/all.rake index 3271d6b3f..a50502b69 100644 --- a/lib/tasks/static_analysis/all.rake +++ b/lib/tasks/static_analysis/all.rake @@ -2,5 +2,5 @@ namespace :static_analysis do desc 'Run all static analysis tasks' - task all: %w[bundle:audit brakeman erb_linter eslint executables html_linter markdownlint rubocop secrets] + task all: %w[bundle_audit brakeman erb_linter eslint executables html_linter markdownlint rubocop secrets] end diff --git a/lib/tasks/static_analysis/audit.rake b/lib/tasks/static_analysis/audit.rake index 293c9e4b5..c809b981a 100644 --- a/lib/tasks/static_analysis/audit.rake +++ b/lib/tasks/static_analysis/audit.rake @@ -1,9 +1,8 @@ # frozen_string_literal: true -if Rails.env.development? || Rails.env.test? - require 'bundler/audit/task' - - namespace :static_analysis do - Bundler::Audit::Task.new +namespace :static_analysis do + desc 'Bundle Audit' + task bundle_audit: :environment do + sh 'bundle exec bundle-audit check --update --ignore CVE-2015-9284' end end diff --git a/lib/templates/ldap/config/import.ldif b/lib/templates/ldap/config/import.ldif index 71676f3e1..50c7bf5a5 100644 --- a/lib/templates/ldap/config/import.ldif +++ b/lib/templates/ldap/config/import.ldif @@ -8,46 +8,7 @@ ou: groups description: All groups in organisation objectclass: organizationalunit -dn: uid=emrecan.1234,ou=people,dc=acme,dc=omu,dc=sh -cn: Emre Can Yılmaz -displayName: Emre Can Yılmaz -eduPersonAffiliation: member -eduPersonAffiliation: employee -eduPersonAffiliation: faculty -eduPersonPrimaryAffiliation: faculty -eduPersonPrincipalName: emrecan@acme.omu.sh -eduPersonPrincipalNamePrior: emrecan.old@acme.omu.sh -eduPersonScopedAffiliation: faculty@_.bilgisayar-pr.bilgisayar.muhendislik.acme.omu.sh -givenName: Emre Can -jpegPhoto: base64ilebiseylerbiseyler -mail: emrecan@acme.omu.sh -mobile: +90 362 312 1919 -preferredLanguage: tr -schacCountryOfCitizenship: tr -schacExpiryDate: 20051231125959Z -schacPersonalUniqueCode: urn:schac:personalUniqueCode:tr:employeeID:acme.omu.sh:12345 -schacPersonalUniqueID: urn:schac:personalUniqueID:tr:NIN:10570898198 -schacUserStatus: urn:schac:userStatus:tr:acme.omu.sh:affiliation:expired -schacDateOfBirth: 19910128 -schacGender: 2 -schacHomeOrganization: acme.omu.sh -schacPlaceOfBirth: Samsun, Türkiye -schacYearOfBirth: 1991 -sn: Yılmaz -uid: emrecan.1234 -userPassword: {BCRYPT}$2b$10$P9c9uTcr5RjqOhmf1ZcYvO255n/q6SknPA3ERvaAqqEoDSGLer3sy -objectClass: person -objectClass: organizationalPerson -objectClass: inetOrgPerson -objectClass: eduPerson -objectClass: schacPersonalCharacteristics -objectClass: schacContactLocation -objectClass: schacLinkageIdentifiers -objectClass: schacEntryMetadata -objectClass: schacUserEntitlements -objectClass: schacExperimentalOC - -dn: uid=cezmi.5678,ou=people,dc=acme,dc=omu,dc=sh +dn: uid=cezmi,ou=people,dc=acme,dc=omu,dc=sh cn: Cezmi Seha Sahir displayName: Cezmi Seha Sahir eduPersonAffiliation: member @@ -73,8 +34,8 @@ schacHomeOrganization: acme.omu.sh schacPlaceOfBirth: Samsun, Türkiye schacYearOfBirth: 1991 sn: Sahir -uid: cezmi.5678 -userPassword: {BCRYPT}$2b$10$P9c9uTcr5RjqOhmf1ZcYvO255n/q6SknPA3ERvaAqqEoDSGLer3sy +uid: cezmi +userPassword: {BCRYPT}$2b$10$tFrK0DCl5AzcAJqMIJck9ejLiy1yE4fOo5Xxl3OJd0V5gdKXNwhHO objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson diff --git a/lib/templates/sso/etc/nginx/dhparam.pem b/lib/templates/sso/etc/nginx/dhparam.pem new file mode 100644 index 000000000..28d20a378 --- /dev/null +++ b/lib/templates/sso/etc/nginx/dhparam.pem @@ -0,0 +1,13 @@ +-----BEGIN DH PARAMETERS----- +MIICCAKCAgEA/X5geG0MFgSA7OPpEPXqs6MOfUjRexKi8GG20MuITqoRxkIEx0Sp +Yop0PAuQyDaf4YnnEgr4znc/BI2227Sl38fICX/Ukh48GmwctSKt9bUtcdWjeUpo +T6uixUap348PT46vN2eUzC+qFlWFme7TDPepK4vO8ZUCpnFTMb5z2er5yM3m240h +6E10u4joFe1mpEI3z8Hwd7xU/UuFMfjdZ05SWZ4xKD2bBbO2Uh4U+SA/uzJD+JgN +2gHXGOtcm+M//ff7BHpj3VzYIJqJ6JSRKy352B8119ntHxnzxyuGsYZaeGSHlRsM +nF73MBv08unFlNyIAWxEWkNYPD4oLvyiq2iE7Mbb7LMWVlAjqdfSb4Q1Lo5ZlJgj +PwVJPpZb//kFtZS+9PtU/K8NzDqpkEfNE02goY0jvWt7iKn6svHrxt0XXudxO3Lf +Tb+4SQtY9EezRRC3E8A7OrjnPnNiUdikT7jzx0LiPfeW80r46RWLkt7SliBuHOnF +9vz/WXjnvLSDy45yhC2q/wvqJRPJxj8WOxEqVJgqpOctWGcT6s9GiUZ8C2SPvdl3 +mvgCyU1i5O52EgKyogGHpuiP7TqqsrXMcwXF7gl3CRj1vQwodtW0/ymdPYrt8mSa +VKGIQ3V9Y/bZnvr81xOZ//mQXarT+IJeUixqyCVm/vaMiV5gnGsB7QsCAQI= +-----END DH PARAMETERS----- diff --git a/lib/templates/sso/etc/nginx/portal-nginx.conf b/lib/templates/sso/etc/nginx/portal-nginx.conf new file mode 100644 index 000000000..dfbecef21 --- /dev/null +++ b/lib/templates/sso/etc/nginx/portal-nginx.conf @@ -0,0 +1,69 @@ +server { + listen 80; + listen [::]:80; + + server_name auth.sso.vagrant.ga; + + return 302 https://$server_name$request_uri; +} + +server { + listen 443 ssl; + ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; + ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; + include snippets/ssl-params.conf; + + server_name auth.sso.vagrant.ga; + root /usr/share/lemonldap-ng/portal/htdocs/; + + set_real_ip_from 10.0.3.1; + real_ip_header X-Forwarded-For; + + if ($uri !~ ^/((static|javascript|favicon).*|.*\.psgi)) { + rewrite ^/(.*)$ /index.psgi/$1 break; + } + + location ~ ^(?/.*\.psgi)(?:$|/) { + + # FastCGI configuration + include /etc/nginx/fastcgi_params; + fastcgi_pass unix:/var/run/llng-fastcgi-server/llng-fastcgi.sock; + fastcgi_param LLTYPE psgi; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_split_path_info ^(.*\.psgi)(/.*)$; + fastcgi_param PATH_INFO $fastcgi_path_info; + + } + + index index.psgi; + location / { + try_files $uri $uri/ =404; + + # Uncomment this if you use https only + add_header Strict-Transport-Security "15768000"; + } + + location /static/ { + alias /usr/share/lemonldap-ng/portal/htdocs/static/; + } + + # REST/SOAP functions for sessions management (disabled by default) + location /index.psgi/adminSessions { + deny all; + } + + # REST/SOAP functions for sessions access (disabled by default) + location /index.psgi/sessions { + deny all; + } + + # REST/SOAP functions for configuration access (disabled by default) + location /index.psgi/config { + deny all; + } + + # REST/SOAP functions for notification insertion (disabled by default) + location /index.psgi/notification { + deny all; + } +} diff --git a/lib/templates/sso/etc/nginx/snippets/ssl-params.conf b/lib/templates/sso/etc/nginx/snippets/ssl-params.conf new file mode 100644 index 000000000..64ea45f3d --- /dev/null +++ b/lib/templates/sso/etc/nginx/snippets/ssl-params.conf @@ -0,0 +1,15 @@ +ssl_protocols TLSv1.2; +ssl_prefer_server_ciphers on; +ssl_dhparam /etc/nginx/dhparam.pem; +ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; +ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0 +ssl_session_timeout 10m; +ssl_session_cache shared:SSL:10m; +ssl_session_tickets off; # Requires nginx >= 1.5.9 +ssl_stapling on; # Requires nginx >= 1.3.7 +ssl_stapling_verify on; # Requires nginx => 1.3.7 +resolver 8.8.8.8 8.8.4.4 valid=300s; +resolver_timeout 5s; +add_header X-Frame-Options DENY; +add_header X-Content-Type-Options nosniff; +add_header X-XSS-Protection "1; mode=block"; diff --git a/lib/templates/sso/etc/oidc.key b/lib/templates/sso/etc/oidc.key new file mode 100644 index 000000000..b7d6a8381 --- /dev/null +++ b/lib/templates/sso/etc/oidc.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKQIBAAKCAgEA6kyWSkwryf5YA6aR0GBOrgZRykVh38mEDGbvO4LUQHC+9qB/ +RKve8Rw9O0YO9U0Jl/jg804LnXgmd6xo3enNvwXbGdGkD1PBpGToJyQtwY/2x3AF +yExKQkyPCamZYKDTkcZM7QqcvCE1gZd4yzPY0aABiEu68FfC2+GLkVxI6PgS75zL ++dxhg0gtIGO+vFlEi1GbG4xXoEczp6y1e3wsIMiWAj1PPTeXN3d7VHUHua0iuf05 +2Bj0jCzbvtvjSnvk24Z9ri1a6/jWeO1smhg3ZaaEPFqiqfGvJTA7fz5WXBqqpw0k +MQsW1w/P6cwpNV/aJVUIDz8bsFpCr36eS7vNm1NckgkeW8r8q25Pd0lgcRr0nVQM +TPP5SDCPQJVHvQ5Z0juHnreUjqaWk+bV6mxN33Eux0w9mEyH5U5SbWLvh9hiz0vA +H9LoJ24p8YOFoqHK3Ovth+rxHyRciwJNUobp5Quumtzzze43vF2NE1x5ujqa3H+W +28cq3WxyNwWxrI3wEn2vDrBg/Q4hGEBPwFpR/LjIBSpVlCO7/tqUBDuggL4Jx1nE +4vPuOVP5GaC6nFnUwfJuMLbm2/evyGfta+626KaJBlx9wnLKORfJ/w4C2OOGyXij +7YzdojNqLqxSZ9fN2Zm3r95pKFz5pqeOATQw3h5LntrOqtuGSM2RvWpf6w0CAwEA +AQKCAgB1m+Yg+2VLqqmBg55UC9PS1Qc/Ul6T1/K5yv2xULW8dxvUbrITxXZOb09p +LnyZs4bqSxqX5wg7jjE5B0lIg3EsvwLBThNdQjzEiYZjB20UaXCFofy1E15/MzDl +t8Vu1Kv+05yPrDEK2lyiZWdUEP14FCpQwTrgJB2DBA9r8vgCQWw37OwSywYDwTot +tQPsRZ77lAYY6PSfVr5eH3qltqnr9uQd0aqx3vK/+/Djby9mi7sPw0XC7JvstSPF +BVltbQ1vCG6T/N5T7v+xifRm0VsVYmWkahaW2eOB9lkXQTJWX2hkHFubZqabY6uI +/1t8GFZHQQyfop0Cg/xPXW6WM3o71NCB5qzqB6a1N8J+0hrnKMhf5Jl5vG01D+i7 +9AxI/3PnF1prSPTDVXHfg5FZCHsmRrpiLZyZCOovSK6pu0QtmjAsFY5hgJAUB5l5 +Z44E+DhQDqN7O8vCUZA5On8ic818wUN042AkHXBgSoHXPeHvbusb+hUnkoJnsozM +2ggvc9kR2qeKX9wD8RRElP2THoQiUHzi9+YidwIWs876YnZwdManvL/dj4+Ein0G +845VDnhTU+AWIb5z6gPtx6rYrPkNIgb1raaM0jYzsZYVhgAizbOfWbOfgWJEWPVH +jJhr3vkYyHXb3X9KCUTi121NT1ON/j0kb3BJO1R59o+jOheWYQKCAQEA+K18WSzt +FKzJmcWnFes5++u7FpkLYyuE6+fo0B9bxEiltDVcx7dB+M7IpnPUll23atS7Aoxf +byHK5oER6S/XsPZayyh7WLMkp1YEiEOADb/JtAFA2oLcFVGa7IOevq/Jrq3zqsCC +VwdJ22oTw8bQBDBlw4oKiqqtusJFs2HloJyG4PwBUKCVS7Yty+/RrpmRU3FbUrti +rVWpPW5PbtPpqUuJE3UN4leLmm7w4zYwai3isreIrD+pHiVDrJ7fBI6W7zAQLj4d +3JBukpkGGSxoeIO2d6PFOEjxG3ANX7uOsYV2eX0tdIP+XXnXF5wFF5zlONq1eJl0 +DrEil3nH5W7M+QKCAQEA8TK3mGeGSWwlm0wTQqxu8WfNOq1QYhD6jLUiJaKr81jF +SNwvp4oX9IAblIuK2llYf75jWfVG/CSt8WTQCmoSs1/cpizWAGiZmXig+8q/2RDy +vr9SoDlcJR2br2goMQiaI7vyIwKLvWD6I63uFOdis0eKJBuu8buVa0HtZJtD4VSX +J55CRaPw2BKsELwJoF9ZgCFCv+3YbdfZyiT/IQITVxUppknmbT4mvZD3AHpe1z60 +okKDFD5dL+/DG0CaSQs80EGsPYvE7B0vic7DtlQeJj+F+nrIVVBocr1nfBsFA0m4 +RU3cQqJsMatnaEmqRcyzFjV961mO1OGfDjruslu3tQKCAQEAzw9dL795tLJettxd +0KFpSXsx75IFalCtP+R89PZ3aYt39gJMu7q6gtpjNj3SMFXeSGTTRj7to9JGaQHl +kP2WIjIuzWRquCOKDI9R/Mf/kvMzlt9ISemWKWYmknLRtkMWso0DDBV5Mc/OzpSX +2nbrc+F8ioGhX27Yc14ZvVBxa/eJU0JiMelUBpOttFZ+iFw0Jn+Ho+6FLoDaB12X +ZFetAprzizD3G5T7l95yUy4mx/JnBZpOgeYMAh7TJ6OtXNUBli21+1sbcDEO8J/b +9RAF+Prq7tl9eO07XTZC3IiGOwg+6s+xDohtPxYZY/40O0IXlux9F+rmOOmDPQ9Y +w5AruQKCAQEA4ExKwZacIZFJk5Z2Xs1dym6+Qm/Dzb5+UPVs0NTq1Lzbkfr48fOQ +fVXY0BXIRW9Kxli1qYVXwskVXONkOBsWUuq1lW8if3TGShsMkbqlF+YT52CiJM/S +qc1T5xWUMq0OMmboMLiAXNdfJmjre1MFzTSc+SEpWjEYLYs8iQ9+W4A/pJ8egAaJ +xVXv3wwOY63n3CiSG0vCtbtCFCK9guOcOqI6fiJA/5wJiMXTfQVPRxlP/4icvumT +3S05IhG8qGqj3gMEeqOMuAoYGC5IgDjPZMA0Bo/B1tyUlQcfwiCaU8ltbD2QtAK5 +XKNJ4YiHqKtIa0HJXGCHW96I/EG/keuK9QKCAQAw06x4uRUdh5TYtyZOvXuhrJi/ +DFhBRtBflM40DUIc6eXak5ZFJwLqjI9dUp0q/yEBYnrRaZ+KzdQFGT3NAzW7Hpnl +BJ8Xkt2f6ZRJVv+8IgT3G2i1ii3RJuLwOQrI98uXXSDLtWIHm2L4QM1SRvLJCpaK +8DRVopFoHrC76fIhRIfM8agjomlZF6WaklAsRsnhQ8XqPQzTF2bGYPwngvJ28/lj +ZVIthGmAbmMsOxTsdloRPZPgrp616KplQhsRgvvkyNrTLbhDM2h/B4HKNf9zPOlW +RWk4cR+v2bVu1oXRGUFNGy0jW8KNoSL4boY4NcKC1D5kFnqw4MOYYD35R+KT +-----END RSA PRIVATE KEY----- diff --git a/lib/templates/sso/etc/oidc_pub.key b/lib/templates/sso/etc/oidc_pub.key new file mode 100644 index 000000000..3bf9404f9 --- /dev/null +++ b/lib/templates/sso/etc/oidc_pub.key @@ -0,0 +1,14 @@ +-----BEGIN PUBLIC KEY----- +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6kyWSkwryf5YA6aR0GBO +rgZRykVh38mEDGbvO4LUQHC+9qB/RKve8Rw9O0YO9U0Jl/jg804LnXgmd6xo3enN +vwXbGdGkD1PBpGToJyQtwY/2x3AFyExKQkyPCamZYKDTkcZM7QqcvCE1gZd4yzPY +0aABiEu68FfC2+GLkVxI6PgS75zL+dxhg0gtIGO+vFlEi1GbG4xXoEczp6y1e3ws +IMiWAj1PPTeXN3d7VHUHua0iuf052Bj0jCzbvtvjSnvk24Z9ri1a6/jWeO1smhg3 +ZaaEPFqiqfGvJTA7fz5WXBqqpw0kMQsW1w/P6cwpNV/aJVUIDz8bsFpCr36eS7vN +m1NckgkeW8r8q25Pd0lgcRr0nVQMTPP5SDCPQJVHvQ5Z0juHnreUjqaWk+bV6mxN +33Eux0w9mEyH5U5SbWLvh9hiz0vAH9LoJ24p8YOFoqHK3Ovth+rxHyRciwJNUobp +5Quumtzzze43vF2NE1x5ujqa3H+W28cq3WxyNwWxrI3wEn2vDrBg/Q4hGEBPwFpR +/LjIBSpVlCO7/tqUBDuggL4Jx1nE4vPuOVP5GaC6nFnUwfJuMLbm2/evyGfta+62 +6KaJBlx9wnLKORfJ/w4C2OOGyXij7YzdojNqLqxSZ9fN2Zm3r95pKFz5pqeOATQw +3h5LntrOqtuGSM2RvWpf6w0CAwEAAQ== +-----END PUBLIC KEY----- diff --git a/lib/templates/sso/portal/customLoginFooter.tpl b/lib/templates/sso/portal/customLoginFooter.tpl new file mode 100644 index 000000000..58b2cb09d --- /dev/null +++ b/lib/templates/sso/portal/customLoginFooter.tpl @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/lib/templates/sso/portal/customLoginHeader.tpl b/lib/templates/sso/portal/customLoginHeader.tpl new file mode 100644 index 000000000..0a2ce4a62 --- /dev/null +++ b/lib/templates/sso/portal/customLoginHeader.tpl @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/lib/templates/sso/portal/customfooter.tpl b/lib/templates/sso/portal/customfooter.tpl new file mode 100644 index 000000000..758424e08 --- /dev/null +++ b/lib/templates/sso/portal/customfooter.tpl @@ -0,0 +1,8 @@ + +

+ + + BAUM + +

+ diff --git a/lib/templates/sso/portal/customhead.tpl b/lib/templates/sso/portal/customhead.tpl new file mode 100644 index 000000000..cff7e7172 --- /dev/null +++ b/lib/templates/sso/portal/customhead.tpl @@ -0,0 +1 @@ + diff --git a/lib/templates/sso/portal/customheader.tpl b/lib/templates/sso/portal/customheader.tpl new file mode 100644 index 000000000..30460604b --- /dev/null +++ b/lib/templates/sso/portal/customheader.tpl @@ -0,0 +1,4 @@ + + + acme/images/acme-logo.svg" alt="ACME Logo" class="img-fluid rounded mx-auto d-block" /> + diff --git a/package.json b/package.json index 1fdddf7cb..477646017 100644 --- a/package.json +++ b/package.json @@ -2,19 +2,19 @@ "name": "nokul", "private": true, "dependencies": { - "@coreui/coreui-free-bootstrap-admin-template": "https://github.com/coreui/coreui-free-bootstrap-admin-template.git", + "@coreui/coreui-free-bootstrap-admin-template": "https://github.com/coreui/coreui-free-bootstrap-admin-template.git#master", "@rails/actioncable": "^6.0.0-alpha", - "@rails/actiontext": "^6.0.1", + "@rails/actiontext": "^6.0.2", "@rails/activestorage": "^6.0.0-alpha", "@rails/ujs": "^6.0.1", - "@rails/webpacker": "https://github.com/rails/webpacker", - "chalk": "^2.4.2", + "@rails/webpacker": "4.2.2", + "chalk": "^3.0.0", "flatpickr": "^4.6.3", - "intl-tel-input": "^16.0.7", + "intl-tel-input": "^16.0.8", "jquery.maskedinput": "^1.4.1", "select2": "^4.0.12", "toastr": "^2.1.4", - "trix": "^1.0.0", + "trix": "^1.2.2", "turbolinks": "^5.2.0" }, "devDependencies": { diff --git a/plugins/support/.rubocop.yml b/plugins/support/.rubocop.yml index dd1a8247a..f999f9487 100644 --- a/plugins/support/.rubocop.yml +++ b/plugins/support/.rubocop.yml @@ -4,7 +4,7 @@ Style/Lambda: Enabled: false Style/Documentation: Enabled: false -Metrics/LineLength: +Layout/LineLength: Max: 120 Naming/FileName: Exclude: diff --git a/plugins/support/.ruby-version b/plugins/support/.ruby-version index 2714f5313..24ba9a38d 100644 --- a/plugins/support/.ruby-version +++ b/plugins/support/.ruby-version @@ -1 +1 @@ -2.6.4 +2.7.0 diff --git a/plugins/support/Gemfile.lock b/plugins/support/Gemfile.lock index fc0b20ab2..6b51814c1 100644 --- a/plugins/support/Gemfile.lock +++ b/plugins/support/Gemfile.lock @@ -87,7 +87,7 @@ GEM nio4r (2.5.2) nokogiri (1.10.5) mini_portile2 (~> 2.4.0) - rack (2.0.7) + rack (2.0.8) rack-test (1.1.0) rack (>= 1.0, < 3) rails (6.0.1) @@ -142,7 +142,7 @@ DEPENDENCIES rails (~> 6.0) RUBY VERSION - ruby 2.6.4p104 + ruby 2.7.0p0 BUNDLED WITH - 2.0.2 + 2.1.2 diff --git a/plugins/support/lib/nokul/support/codification/coder.rb b/plugins/support/lib/nokul/support/codification/coder.rb index b177876c1..7de32e8b2 100644 --- a/plugins/support/lib/nokul/support/codification/coder.rb +++ b/plugins/support/lib/nokul/support/codification/coder.rb @@ -12,7 +12,8 @@ class Coder def initialize(code, **options) @code = code.must_be_any_of! Code - @processor = Processor.new @options = default_options.merge(options) + @options = default_options.merge(**options) + @processor = Processor.new(**@options) setup if defined? setup end diff --git a/plugins/tenant/acme/.rubocop.yml b/plugins/tenant/acme/.rubocop.yml index 3c2bd710b..e451261e9 100644 --- a/plugins/tenant/acme/.rubocop.yml +++ b/plugins/tenant/acme/.rubocop.yml @@ -4,7 +4,7 @@ Style/Lambda: Enabled: false Style/Documentation: Enabled: false -Metrics/LineLength: +Layout/LineLength: Max: 120 Naming/FileName: Exclude: diff --git a/plugins/tenant/acme/.ruby-version b/plugins/tenant/acme/.ruby-version index 2714f5313..24ba9a38d 100644 --- a/plugins/tenant/acme/.ruby-version +++ b/plugins/tenant/acme/.ruby-version @@ -1 +1 @@ -2.6.4 +2.7.0 diff --git a/plugins/tenant/acme/Gemfile.lock b/plugins/tenant/acme/Gemfile.lock index 609ade97b..d9bb33445 100644 --- a/plugins/tenant/acme/Gemfile.lock +++ b/plugins/tenant/acme/Gemfile.lock @@ -100,7 +100,7 @@ GEM nio4r (2.5.2) nokogiri (1.10.5) mini_portile2 (~> 2.4.0) - rack (2.0.7) + rack (2.0.8) rack-test (1.1.0) rack (>= 1.0, < 3) rails (6.0.1) @@ -158,7 +158,7 @@ DEPENDENCIES sqlite3 RUBY VERSION - ruby 2.6.4p104 + ruby 2.7.0p0 BUNDLED WITH - 2.0.2 + 2.1.2 diff --git a/plugins/tenant/acme/test/dummy/config/credentials/development.yml.enc b/plugins/tenant/acme/test/dummy/config/credentials/development.yml.enc index db4b8d180..1de671b26 100644 --- a/plugins/tenant/acme/test/dummy/config/credentials/development.yml.enc +++ b/plugins/tenant/acme/test/dummy/config/credentials/development.yml.enc @@ -1 +1 @@ -qz5+6C+1nR5rDfFY3fDnoqgAIqHa++XCn5jWsU+SBg/C+cIGTngFoyTEta1IITfkRUDlr3u4FdywH7zcrVKr5wE0snkliS0O8DwpYZ5KsYLDd/qp8oj3KCvxbQZBRQL6yPcKSXZNYu65kcRMzHFdEQNZ1LsuXVjEhM/V0rOnGbC8p1BWcjxGx3FuPhf/1R4lAGdiqkKXZdjsIgVHiOCN3rD4voOQKlezBdwFKNAjSdeZ+8MV2C2kI2SvZ15Z+hrGLl6Hy53UwN/lZMk3BPien2163YHmUPsuPvc/j7KRBg/TdoQ0WW/0DsvAsdp2M97j3ugf8IydAAQRjBzItTMLaueJnSTKOqx97P3BPxQdrF3mYn0INiXHiXnflGO0Fckg1T9MpZcbKthbXrUdU1SYrgUhYFm5jSvSfFZ/HSHbyq+xVXxNEmjZqkbyKU3ZZwDj7ok1kpGIKkPIusAe7BKW5nVDgXN33mZY58lzwS908t1S6Lxojp7gWUaEmkJWZEW/HZKIShF4dp2Peob7Lmd+Zd/YB9RF7e67NCcf4P1fy3qKQ+OYLQSRatMS+BSx428rT3NVJmTBXE7g1uGAXkqll5QwnVFhzXysffKpxSvLhk0NBeHz137345QDPqECx/FthCrQqEp+7aKNI4zM1ogsFRj9Frm5Dbb6qXyJW2z/MxRE033SwSZD5SQR2FBjtNzIi967L9AzRQeJrDcE/iB5JL63mb5kpMQdpVo7MCXxPIJOEHmqLf165ClAxkqdNBG3edjtkz5ilw0ddPOt7c73rvxDJ1zxOYLqJH9wV8nBNQR6LIvgjtMu1p+QJBkvtlB2eXtCj2MRDF+xOUuvv4P/I+Ebd+1iB9FTUbDyGEmAGsuBjnak/zWyoGivPqd9XYa4otGYT4V9M+z5FIWLiYBgor0R/qoqxKVI0rohlN3njJaGpDHj5rII+/1f+FZUhBKnPQ9FQsEizCjjFIXXeBcpo48WoHZTzcTdj+kjM2fFwv5UeoGg6jIEJNvnaMB5t21+chmsTNcNigCSWeig456wJ3pnjUwg4cRnJUnbqwiDn3tgUa0LPdsKWv0gMA8uLN3DH0PlDYWX+29zwbssuTBYPnqmzBHAkGMvcbnUXTi0eePDU+jYRiVLB4xbRVGPDAeibxl9F26QkwQ5KGXyNkqIEBdp0Pb0wYSWFzY7M2H8gmihi/fr57bd8UI1nzC7DwzoOdPK8+ov32ivmaJ5xlufCCoEnPdiYf9Nj0GNhrkj2/CgGuFqsfTobdibQjzDGxE9WYTHyNFcSne7Q+yGN0Mz36t0DDv3ZUdrHdrGrvECpGK7EsJaTO6QjwYh/ESCzR+LAKMYlTD4O7nfF9ECZXZhYWun7e4wmd4tzHQ8wbxZU5iDCmBV/sJb1VaJk+Cp0TIdzP0bW+ixPiFB/pnjHADalIqjjSRQXI/ojrEj1b8neF3a15UoXM1Z6qnL2Vbvjfo5WeFN+JLQlL6rhG/gyQV4Pilx1d6+--b4WL/Zp9NYFylq8E--kM7Mb4gUI1OnBmu8fccaVA== \ No newline at end of file +4uziXndh55ScQ8xt3SC5lnBWZIIJQy4TFBPzuBCWQDBnQAGNyC2RMNVEg4Q+F6Qvz66zqihOkt184BathWmgvmbjDPKYzHhaKHHjq83e0V61Fz7gpn9FaDrWdUI1Q5fHOpJXX3Lacy1N/PMb2IJL+3QMbTt5Y9bXLagAshG5R7JKsCHjkoUnXY9DPyjAQjnEgBVgN2V3c+8xTJFxyLj4a3P7q0/O+b0cZZ0CA41UJDco5iTQoVV/mr0EG6Gf1Kd8JGc4rSXP858gdtw4AjlpT0J3eKeMPriUf5r7gtGCpXPANLBzlxjLj7USsXW7s+nfQdnljD0hoBet5ixBALFnO5hwTGcqtaDDxeWWzdJj1wbDgSeFLj0W0UMSYbZt2JmWWk4XqeH8TXJuFs+9BMu+uzK4t0EpNqM1OCti94g5ps4vCkmYZh6PiGwesQWdxqPax9W+7zAKeZFtrYmVdPigdqjObUYsXdWbkiVv4+uAK20kFuLRSlX3enzrKHkBMrGZO3AhVbP5vrUlczbV1p6BrC1/rtgh6Q3+3qFvfIDTS48u3z/TpwaIFG1icy56ba4GNYNI03/kpaAzR7sPGHyHoKU6DzsLED1WvefflyADftQSsY+KLhWfDzzb+E7UkIGvGzXPabj08q6yPtBSdKYI6rMw0c1MsHoq5YK4S0/KqM92tmpQgPv4FNVV9ynVrcjOqGxfclfSsWTwBlMjIVGQkCimtxzvB7SVc71KVcukiLuj7sWbgJ3/Eq1sLbgDdN4yX1pL3cDyxbXjd5g6PduOFs7Wh8QbUZkDmM7AFKyCqFVMYOynQU8zlj0v63MOEgeh4aME5wIMxV+HJ8Bk5NbRm2mJ3QxcG2FIsdl6sCv1ZXXrcaSNqD2FmVF4DOAvbuBN+6vWeFsRf70qnCAb5EXy/4D9YsOmFvK2qLoJcbhWBdJv1nHGf+p5WGnfIF426+Qe30/o2pmXxm7vwAWi7oGzBeSzEBv/cflKDoRdM6x4VHHVfCaCbA6UrGyHgdIJGde7TdUuutiX2I0+cAe5wMfLEYXkiG7pw95kk9xTIIQbMOPgriox3e7t83lkdbO7cvLd8XMp9f9lUNJoEN9+iAxwDtVAtP3pBl1TjNTrS3PaWOW44oycCnS0HENdq4vMTANsEq/nsFuLqcsy0TUlGxOzVpKNwvrsTnUxoUDPPOZ5TaY0BEUdosMFxIMERmo5hbu4v5gUbTnu3214nQR2CKqurQj8tJgZerFkWL1AY+KBUO9rBEWGol7FwMBi/IDJUC0lyq7f13WehBmMRBjeyxLl6zndd8lEPtGUveJ26xD7Pnwftjc+fjZS/mhkVkA4a/tUOOTnSLehmlUvot2AC5EQKNElTvIDWO+XsFXwT5DAh8eoBou45/nWlZ1Z1zgZB3Q4IuApZ6CM45lvMRciZegvrm7qTff+hmtL/8ApuUUFNfaHapxJj0TUbAHTMtW22VA3qBiTV3Hd48XZcnW7/60gPcGoApKdaPArFPjQ0BrDP8NZkiK5iRvOkiYhlcUD+zVPp1iIVxLtx4mGCCtL4IHUfcgn/jTU/skOYgXtHESwq9NdI/THWHGuLTldTw16afSDcyP7/BTCh1/yfIL78qPYZm6etms88O3A0sS0+aqdEOlNrs5TE6hHHzrFaoLkEYabmNIdzBP4CVlUhkBaQQwGs8axoaiQC+klCSSDN4kg0k5d1etBXWaaxgbtg8iHq5r43hzvPfDgc+kQGigZHXIA71w73md9GGikfaNBK3qxrKAyST+fj0+UTD0mu1y6fcXefQrVXtC73p/zkLuT8VvzcVdcvA+bDJGUXd/ViFvj/bXvSwYqCiBWyJCOA6HcN/kM5T+tBRMwdHX3qAsUYDY=--SG5dSe3qjbzc6ZlO--SGd6ZAa0kyDPV5Oq9V18fw== \ No newline at end of file diff --git a/plugins/tenant/acme/test/dummy/config/credentials/production.yml.enc b/plugins/tenant/acme/test/dummy/config/credentials/production.yml.enc index ec753a0aa..8fadf8436 100644 --- a/plugins/tenant/acme/test/dummy/config/credentials/production.yml.enc +++ b/plugins/tenant/acme/test/dummy/config/credentials/production.yml.enc @@ -1 +1 @@ -l2oeGvZVBP/h9AJwSWDXma7WWro/+4p2oHdBwmDNWf4ynTURNs2g5dnDypeKlC4VPRn+SuXotjLbx1dFuRX3ixMNbn3NzgT2Kky4ZYZ/63XJ9L6F7wCqO1I6JyBCFxFmarVt6gcofJ3VvQ+yX9jHgr+0/kXPQS8lIU/yYZK1FGHddpwOc0jJDQtX5QEKmnESy3nt58ZN6kLPAoydT74HNOuM2gPNEG315lqfQP4Yo9JGTx+XI1W2pMSTPhtZdizJz+MuOe97K1dgnaeNfb15kUVHKTsro91IhrT1T+VC1+0pLbgyrBDcC1OxmhTthsNlFv5Lqk3nf2iZnyCfsAGDl+4uaDx6x+vZi/KraEVl4aZRDLkxMmLjCQgtvt9fDWFZT/PE6+vJTOAqezNWmu80zTsTnzLLBLjiisFMg9RTIrkAF8FoNkMoOCJWn/zxitmMcGsDfXlxltorCk63fcVbKWmmYhobcbjaGwKx5NkXW2QR/9olm0xmqT4dUGRXbUmklHRX30Gt9lXuAvIexoX5ptkMk2yOBR/JihgrwliiSFlxjWCjExeLP7a1FlAQGsJCQa5RqU4P/uN2Dp4b63U+4EP17a+n/9wUrXiWIJ8lqF3ANOyIC6riamz8goozY7ubIMBYbOh0j+CKmnNs0AEOaBUVbB1oy+VHVaT0kV0JFstz3cT1Jlq5si33o3l/9i0+UV9LWFDLLGMZ4bMWByYZcJgy41UfOOOdnHZMlW8gZJHMVaorby5do84dXLiKATy8JMnquJlsl6siXFE2dcaoWiN+Hm81KmQ8l/hO5sXo/poKKtrY0UDe0u6xaWKeS61qR0H1L6RuUwzSHByE1cptFLjZFhqDbneyuGLwAqBBG1QUCd+OwibHokDHF24dYWxa5wou512f6+Nl5HoXLZCDn5mbustYJIjFQrxXGtSC2ypNBMgGoSpJqU2B1Tv7HB7oz5xk3r87IGVtiubNDRI9o3F2nNRZIscypyG0N/C/yHqdfKB2429xrWIy45LkXf2nXrz7FuGdmSS3VJFGthZVohvrkkB/M43RChzJGUATuJZAKMlP5l/tFQx0d9JV75165fOVfa0uGUGck7INv7UseS99C/M8SHKwTUK5htopHiWmGv9mzlyxZxHaJAuSY1Gc79OHGYj/ZcjWS4DXDnDeXGfFir2348pPTuGwsTpR77FdBHTEaiBcrvIjRIOm3CDgxvk5k01bNnFERE6Tg2HEtORaBydL1DXq5EoOD8FKbaGYEFvpx1K8YwB57ziUH4FhfSRZ8ocrDrAzai/5gpg1TNdrmBmvxzEQjpWHRb9KMslk05BYx5NJo1vXo4b1Q4XmwEEzp7io+6InHGGgRslLS7l0onmMtCOktWv4fOtxkF6oslM/t7Bl/1WJT5f5wV1aC1WC7XLGvYFPoKzvB9qaRP4+Fjkh/At6CWgiFwcZxOlsWKGw73JGWwUJxI3A0RkjFfCKJ0m44NWYBuTEUzH6x4f5v5wiBZakm1w=--8HESn0FbwKzbmfeh--vvaJGjMfZBJnDQHWz558EQ== \ No newline at end of file +1jNeODJU5wzk5bPZbdWE+7HBXr6/hzYPyxZjpp8QH+EYFqqpqBqm4rzpNCkTTemYJJ1ayEk3mKkD9ZEnkDZ0XOx5f2y34PJFHXAoOeIGeCB1bbljavrPp8dUAWTAttmUZfnaWnZ4W7P7gv+uyjb7xfIB/zOe83H95PU3SIdtGTvfg0g1D9srlGRoBNPYdK8P/LO1vqxYME+il6o1cFo73KZr0goxfFcPm+n3nJE2KW1kiPvUPKzcKbmj337rylFvExCk1YR6geEak3gZcKKRrvNrpYCm0Zb+0HNaZtjDbqZU8fTi9JDEK6fBbhvqoBIFETCNQ3TQ1bovOsr3ECP22TQBJccEN8JoBHI33qulfwq2VIXlAcRzPDu2ytr805WP0tPKCnYntOJcc1xx7+OdG1QE5eae17jAh1wxuCRbv4cpe/5jP6vGQ04j0i+MnB9RMUITzPqln5B6qRxZ/IrL0n5PlZg1uiC0JALbCB9PlpLIf9neXNG8lsXxUMnNWRuu/JVtlPewKXZ/R+a2QGUXdqQvFIkrXWQxb40z/QiC8ZhNgxqGDDcwH5Fusmge4eRHqiFxZExL/gxz9s6uFuVmr/AG7EmOScyHlDf5cbRptO7rPQRg0fKWh2IO7ph4EEjqF9qf8433sKAF4UIOU2RBuM9wAA+4h4eZRSnD4mdTxDpBvSuGl+HR8bQCrPpuzGmEkOy+L0lRPO8MKEvajaqfcQRGws4gPbO0q3MTmY/yDVOu0ilKfe1cI3CMFu5WktON0hz6mewJikBtnDju+8+sBXlJ3cVRUhb3h5boOTb0cDrpUdxOwiYmQsjtEymAewOHMVXBKwKidrnYMacgRo/7vDnH5DEs65sDeJn0hdPK2VA8MiyRpHSC1cVxd/2TYwnmv+a33xJQJiKH9OlarxKZrmIeOTEasMci5MlDC9+f578R12yY4O7c8Ua88QqjT32BNDx8zK/OlMwXuvO5QjG3Lp/wF/AYSH9AP8giDZxdyqQ+LDhaldqfV/snl09WdvZ4SegQHhyTab/vvyMYgjSOAifPXN7lPqiEw/oU/N0iMfsf2jM9azIeb6QLV7D+r4Z28yUnqINiJv+Ubuw9qwLLy84ueh7sw2tP4Lqc+WNW//NYSoRUO6tNZlIUqM142vPi9vj4ZEZZCoUpe25HS8ICbwPj9p1gs81lj0WESnqXgd4eVMGzrkmAGKGAJ8zWGbIzz6wvdYeDl0P0GqNNJNgh3bLEfa2RBZ5wxSrSVQNH5AZ/dx/WpT1/d4yUehtEvtmbQIUCUQYpLQVTF4oJbt/hEHyvIXhMC/rVCUm4tlHTHu8QfIEWzljk1+oGBBYzDgSMycUzxw6y+quIkhnc4RHcpH44ioTYUfX+/tOP/NseE1N/rhPcmCiaH4zPaiFcMJtum1Gnnwl0iONJwEStank7Ua/T+x/pl7wQGDfHsITs4b8Mjx74RSS0lHRJsDPHQEc+AaRTvBOr7s1FJfc6RidyfSHc5660VCYWQQnJe4uGdDj+PRjYo7zSe++pYrg/vvtzxei1NCBd7XDPh0fyhtn7h19xwCGZtr1gke5xP8LutvEV764Rd5O/ty0rVm3cG/FncgTLHD0AYm/BfPXKi60xGUjKi6rXMazKoK3mz2+CO5oDf+hqFbkJnzf9STEELPzCgpwvL0v9Ytc13t0Yh+4uX65OcYRhsXiT59oXuJo6SMwfdRLUcdHcIoCIdo6OvUDTHnivSv162thJxz5W3kOtwx6wExicApzDLDmnA5CIO/5aMqFrMQgMZMyvBsiTTTFnetCOSCAHVolBOKulfGsbDF3iLQo9VpgyWehN8Mz+4vhGy6WkIk7uZozQZExk46p9gT01UMbWZWP+--FEi0yvrK102wIX4S--kosE+42lphTgPCgnR4CvfQ== \ No newline at end of file diff --git a/plugins/tenant/acme/test/dummy/config/credentials/test.yml.enc b/plugins/tenant/acme/test/dummy/config/credentials/test.yml.enc index 09aebb84a..1de671b26 100644 --- a/plugins/tenant/acme/test/dummy/config/credentials/test.yml.enc +++ b/plugins/tenant/acme/test/dummy/config/credentials/test.yml.enc @@ -1 +1 @@ -V1VIFJrIz+zUmEtUESdJbN1D6KrxfqJSdA1zLQ+ATDlZ1sJyDFUQ/VejzXDXyDqNChC87bUotg6xbay8oeihBp4pq8kKM/Z5fHothk4n6fYv17XnwcDAbQwPZhU1K44mvvslJL7nPdgZ7HIao+ZWT2AU/EhBAgiVIPEZoA+kWC4DWzfvUMpGGPX8q90cfEk/YcOTaG3LlQxn9SoLEBSRwZtrrZ1N/qOsDb/sqo4zTj1zzvSBlKKFKi2+aTiHgtFWfxvkFyEGAqCDRIjx6+bLwxKP/Kg/6y9d5+eWltU5Fh8n++oadGGlzXP7AiEoY8ZXMjPY/7OF3Zalmt8mMjsoWzKAJqlVeeYtSNaA2VJyRhRniwdwzn4z3Lq/xWyEhVyhJQGKWZZFDSthHfK7wL6a4MPifujfj7DDRuO1CNXaZNvAKH2Tr+bP5WlCLD3tDrb8AEpHYZxOYB90r5PPbIe6tYqUlCNaqYeNW7Yf86SLB2nH/aYgT8aSRtR75c8Oc1RL1/RIpTa1acPdJIhHJuYjvIwxbK4G+RxE1Az0pNyfLquCqTAWolvXKiNOlwrg/bPS0Nyr52qMwm1RgOh1LMHcyaqtN0ojpifcrHD+YnJoXb45Cr0U4NgBm8zjV2DLrH3RM7urPpKuYkMP+6b8Z+d8cICc9WdXT7MbB0Y+rv5dBTV6UkINwHUPloyCLMBmqj4UQzDA3Zao6uDOlaBzYRrHrqM68lEzLomkJ237Uvtr0hr4jJXcnYIAAPCUtRUBHRDv9BnL9e2YUeME2QvVQ2hA0fR/534FpnmFgbyf/JWyMfZgTp9K/XttqfiCzE2DURKDsb8ce538XeQlTYy++gOtcqTYl2mHwNEK0n2X9fCzv8YErjU9YK4o77oqHlVV/WUeFgbxSKlk3O0g9y9/VDPIEKhRfqxPmHSfMXpItBiQ2hTP4U5p1lQ+G7i13ompZdy9YS9MX4KghU0ywkYvF95AHCV7FgU3+Em/F0WvErRLiZ45vMUcTI/KEp9S1/aJzZVOKrTLxMY2yX0cpfp5JGREd9FPOtPeLWd3yBlUU6fCL/2tXCTUb5mPEBVXo4gwOrhUWRGD8bEsmtf03JzwHmRC87pWYyEhLbZhL6iv2c4kj7ZmvbvMdOTrIzvknA1mBv4Lf73CdznFN+vvHknY4/qWhfQuDKP0i0EtTpYqYaY+R4BpcuuNXEpFIi0nR//nQfmSt42SoiphPjCZ2Rg0BFU/71CaUW9BsVJqd/hdc2c5JfFiCivf/rBLkYejv9GJfsJoWH5pjsZh0I9Mj1dDmSSpzM5t4SMBjgSw2CCYGXi+AjdD/9TYNdGXNUUhY/1fsOmbaOat5qtSoiP+cUyvace8X5KeiNe4rfUd6evbGYUZxPlbVgrTunME3MzVcJZ0o1LDwLYL5OWhyiL8O3efw+7EjniIRZIiRRpFMni99mxIsc8dKY5FJhRbw+A7eoVywPo9GlEktESlKiH7fM0I6BNHykKTKVg=--rEuq4aphpOLdfahw--i1g8g7687a/QkdlgOnIeVQ== \ No newline at end of file +4uziXndh55ScQ8xt3SC5lnBWZIIJQy4TFBPzuBCWQDBnQAGNyC2RMNVEg4Q+F6Qvz66zqihOkt184BathWmgvmbjDPKYzHhaKHHjq83e0V61Fz7gpn9FaDrWdUI1Q5fHOpJXX3Lacy1N/PMb2IJL+3QMbTt5Y9bXLagAshG5R7JKsCHjkoUnXY9DPyjAQjnEgBVgN2V3c+8xTJFxyLj4a3P7q0/O+b0cZZ0CA41UJDco5iTQoVV/mr0EG6Gf1Kd8JGc4rSXP858gdtw4AjlpT0J3eKeMPriUf5r7gtGCpXPANLBzlxjLj7USsXW7s+nfQdnljD0hoBet5ixBALFnO5hwTGcqtaDDxeWWzdJj1wbDgSeFLj0W0UMSYbZt2JmWWk4XqeH8TXJuFs+9BMu+uzK4t0EpNqM1OCti94g5ps4vCkmYZh6PiGwesQWdxqPax9W+7zAKeZFtrYmVdPigdqjObUYsXdWbkiVv4+uAK20kFuLRSlX3enzrKHkBMrGZO3AhVbP5vrUlczbV1p6BrC1/rtgh6Q3+3qFvfIDTS48u3z/TpwaIFG1icy56ba4GNYNI03/kpaAzR7sPGHyHoKU6DzsLED1WvefflyADftQSsY+KLhWfDzzb+E7UkIGvGzXPabj08q6yPtBSdKYI6rMw0c1MsHoq5YK4S0/KqM92tmpQgPv4FNVV9ynVrcjOqGxfclfSsWTwBlMjIVGQkCimtxzvB7SVc71KVcukiLuj7sWbgJ3/Eq1sLbgDdN4yX1pL3cDyxbXjd5g6PduOFs7Wh8QbUZkDmM7AFKyCqFVMYOynQU8zlj0v63MOEgeh4aME5wIMxV+HJ8Bk5NbRm2mJ3QxcG2FIsdl6sCv1ZXXrcaSNqD2FmVF4DOAvbuBN+6vWeFsRf70qnCAb5EXy/4D9YsOmFvK2qLoJcbhWBdJv1nHGf+p5WGnfIF426+Qe30/o2pmXxm7vwAWi7oGzBeSzEBv/cflKDoRdM6x4VHHVfCaCbA6UrGyHgdIJGde7TdUuutiX2I0+cAe5wMfLEYXkiG7pw95kk9xTIIQbMOPgriox3e7t83lkdbO7cvLd8XMp9f9lUNJoEN9+iAxwDtVAtP3pBl1TjNTrS3PaWOW44oycCnS0HENdq4vMTANsEq/nsFuLqcsy0TUlGxOzVpKNwvrsTnUxoUDPPOZ5TaY0BEUdosMFxIMERmo5hbu4v5gUbTnu3214nQR2CKqurQj8tJgZerFkWL1AY+KBUO9rBEWGol7FwMBi/IDJUC0lyq7f13WehBmMRBjeyxLl6zndd8lEPtGUveJ26xD7Pnwftjc+fjZS/mhkVkA4a/tUOOTnSLehmlUvot2AC5EQKNElTvIDWO+XsFXwT5DAh8eoBou45/nWlZ1Z1zgZB3Q4IuApZ6CM45lvMRciZegvrm7qTff+hmtL/8ApuUUFNfaHapxJj0TUbAHTMtW22VA3qBiTV3Hd48XZcnW7/60gPcGoApKdaPArFPjQ0BrDP8NZkiK5iRvOkiYhlcUD+zVPp1iIVxLtx4mGCCtL4IHUfcgn/jTU/skOYgXtHESwq9NdI/THWHGuLTldTw16afSDcyP7/BTCh1/yfIL78qPYZm6etms88O3A0sS0+aqdEOlNrs5TE6hHHzrFaoLkEYabmNIdzBP4CVlUhkBaQQwGs8axoaiQC+klCSSDN4kg0k5d1etBXWaaxgbtg8iHq5r43hzvPfDgc+kQGigZHXIA71w73md9GGikfaNBK3qxrKAyST+fj0+UTD0mu1y6fcXefQrVXtC73p/zkLuT8VvzcVdcvA+bDJGUXd/ViFvj/bXvSwYqCiBWyJCOA6HcN/kM5T+tBRMwdHX3qAsUYDY=--SG5dSe3qjbzc6ZlO--SGd6ZAa0kyDPV5Oq9V18fw== \ No newline at end of file diff --git a/plugins/tenant/common/.rubocop.yml b/plugins/tenant/common/.rubocop.yml index ce83d9883..7dcc86803 100644 --- a/plugins/tenant/common/.rubocop.yml +++ b/plugins/tenant/common/.rubocop.yml @@ -5,11 +5,15 @@ Style/Lambda: Enabled: false Style/Documentation: Enabled: false -Metrics/LineLength: +Layout/LineLength: Max: 120 Layout/HashAlignment: EnforcedHashRocketStyle: table EnforcedColonStyle: table +Lint/NonDeterministicRequireOrder: + Exclude: + - lib/nokul/tenant/tasks.rb + - lib/nokul/tenant/tests.rb Naming/FileName: Exclude: - lib/nokul-tenant.rb diff --git a/plugins/tenant/common/.ruby-version b/plugins/tenant/common/.ruby-version index 2714f5313..24ba9a38d 100644 --- a/plugins/tenant/common/.ruby-version +++ b/plugins/tenant/common/.ruby-version @@ -1 +1 @@ -2.6.4 +2.7.0 diff --git a/plugins/tenant/common/Gemfile.lock b/plugins/tenant/common/Gemfile.lock index f32aa17b4..216f73fb3 100644 --- a/plugins/tenant/common/Gemfile.lock +++ b/plugins/tenant/common/Gemfile.lock @@ -93,7 +93,7 @@ GEM nio4r (2.5.2) nokogiri (1.10.5) mini_portile2 (~> 2.4.0) - rack (2.0.7) + rack (2.0.8) rack-test (1.1.0) rack (>= 1.0, < 3) rails (6.0.1) @@ -149,7 +149,7 @@ DEPENDENCIES rails (~> 6.0) RUBY VERSION - ruby 2.6.4p104 + ruby 2.7.0p0 BUNDLED WITH - 2.0.2 + 2.1.2 diff --git a/plugins/tenant/omu/.rubocop.yml b/plugins/tenant/omu/.rubocop.yml index 3c2bd710b..e451261e9 100644 --- a/plugins/tenant/omu/.rubocop.yml +++ b/plugins/tenant/omu/.rubocop.yml @@ -4,7 +4,7 @@ Style/Lambda: Enabled: false Style/Documentation: Enabled: false -Metrics/LineLength: +Layout/LineLength: Max: 120 Naming/FileName: Exclude: diff --git a/plugins/tenant/omu/.ruby-version b/plugins/tenant/omu/.ruby-version index 2714f5313..24ba9a38d 100644 --- a/plugins/tenant/omu/.ruby-version +++ b/plugins/tenant/omu/.ruby-version @@ -1 +1 @@ -2.6.4 +2.7.0 diff --git a/plugins/tenant/omu/Gemfile.lock b/plugins/tenant/omu/Gemfile.lock index 66f21def7..37d72eac8 100644 --- a/plugins/tenant/omu/Gemfile.lock +++ b/plugins/tenant/omu/Gemfile.lock @@ -100,7 +100,7 @@ GEM nio4r (2.5.2) nokogiri (1.10.5) mini_portile2 (~> 2.4.0) - rack (2.0.7) + rack (2.0.8) rack-test (1.1.0) rack (>= 1.0, < 3) rails (6.0.1) @@ -158,7 +158,7 @@ DEPENDENCIES sqlite3 RUBY VERSION - ruby 2.6.4p104 + ruby 2.7.0p0 BUNDLED WITH - 2.0.2 + 2.1.2 diff --git a/plugins/tenant/omu/test/dummy/config/credentials/development.yml.enc b/plugins/tenant/omu/test/dummy/config/credentials/development.yml.enc index c1c717245..1de671b26 100644 --- a/plugins/tenant/omu/test/dummy/config/credentials/development.yml.enc +++ b/plugins/tenant/omu/test/dummy/config/credentials/development.yml.enc @@ -1 +1 @@ -7I0GSdWpOrkl1b2kAzwTVaRE0E7X5wedmReTbw4rJtl/9H0sDnHnPYrdyME94ciYTyv0kaAI5MZGdsHeWaCkboINPmru+gS45dc0dD1PPG7yIfGmeCCTdrE+eDbNKvb3D6bTY7fwOenfKPp54wA5O9fHGS/cRzbhIS3rbzDFmMZGKkYxo+D2ab5FxRSawPypQ0uVlA/gK8VjfpZC5Uy5jynPa3ZzDOF4k9NIKZ08VQ0PatIc5b+68jIFhDbnHYRw/4BfQGGxoC9aAIs3D2l/6/YAX3xA2GOCHg37foY3PkYO9NRSNf+Z+w/cTei6djldlz68mJWWECrDWWq3dKmjTJiDEFMevC3axqdD8nuGqGz544jpumZQkI0llZuTXS4koFYXwsOB8jjIdcET680DdpIUz0uUMJgXgelJqhq3Qp+q4ahf2KXjhI6Cvj7oI1bCdgEH77hnhNcqDIo7ij0lvi0ZfZnd34UGDEI4mWM6RIgGKNdyv+LUHJNSZvNNGTkpZez+s4OufT0QMpRIs+kgow6LaVtAbp66m9YzYGnWB4UwVnexbdR4fI/5Szh8YRaVrojJg8TjoyLSD+Oc3iosZbGnmBstc5It2VrHs2F+9qshk4AWF8dxyRverinT22AvanbDP/tIhi4uLcUcrDQ651yH6hT54PjaSDVW1perRcOiqIiU7yDATc45RQxydCcOLaVgPLxIzoBan4FRrW+tdgDXFYkt7ejHLlWckSHHIGkmaBvwu9uHkM7oFzQ6Sbs+kg6kWLTKWHEvtXw1fJnM6wg3+DtC1hzofqrertMIoKRtH4sNzAdh9koskR1ZwDTrXlTGaKGtFQPQQ4neIla+JvzS9UIKhAjhTHebrOApGi2sVB5YQ25S5MK3+9oM0ybKGSJUK2izMeZp1CuQCbWO95DqXlyBQZJbkQuW5JTNv8C323IPZX94DPy5q/kHweapq7wOOHHWSZc6rcXkSE9gaiJXHho2iEqYlxF9u5eXx/73o9+shTg/e0gT9UxsXlHvAkJW1L4hC5IGKU+q2s/Lj805yIcp2dIr3FgufBE/ynBp0sKttqNwH4l1QSYG4X+RLoxMpXkb0r6IEQKIBEzxOWnIMpUy8aSQCw9nW8Hpk2x2QeHAlFBwzeApo6ODVo18PuZguf77Bwd9xmOout8+KfCoeYpWk9stAjsI59/sMaKWw3Zni7zQf0u/n7a73qLDaKJo27tSv/LlFtZEMuVpCgt8C2dRH3KlgWr5N0KZeb4kiDhR7Ru9fJAeyLxWCP8Dxla8mT8PhlgWGlrvaBgTAUnAtdDj58c8qjMapq8ocDCxf9U2lQVqwS7fjcLXywtomcszMinOpPbJUeEBIxqnn9iBgd4v9eDyXw6dMwC7nw9raFdSMp8rRnoX2xXJXzZuYNthYgpybqNx9o45vKh+Ra1P3s61hDWClMFNf3M6N45FGiN+Ny2Bpg0HRqwrm02Qbu7sbx1Umlazd/v7Pu+cUk4GMA==--f2l+Uu17GitzVtDD--61Vgp2X3neIblPpCtrhf4g== \ No newline at end of file +4uziXndh55ScQ8xt3SC5lnBWZIIJQy4TFBPzuBCWQDBnQAGNyC2RMNVEg4Q+F6Qvz66zqihOkt184BathWmgvmbjDPKYzHhaKHHjq83e0V61Fz7gpn9FaDrWdUI1Q5fHOpJXX3Lacy1N/PMb2IJL+3QMbTt5Y9bXLagAshG5R7JKsCHjkoUnXY9DPyjAQjnEgBVgN2V3c+8xTJFxyLj4a3P7q0/O+b0cZZ0CA41UJDco5iTQoVV/mr0EG6Gf1Kd8JGc4rSXP858gdtw4AjlpT0J3eKeMPriUf5r7gtGCpXPANLBzlxjLj7USsXW7s+nfQdnljD0hoBet5ixBALFnO5hwTGcqtaDDxeWWzdJj1wbDgSeFLj0W0UMSYbZt2JmWWk4XqeH8TXJuFs+9BMu+uzK4t0EpNqM1OCti94g5ps4vCkmYZh6PiGwesQWdxqPax9W+7zAKeZFtrYmVdPigdqjObUYsXdWbkiVv4+uAK20kFuLRSlX3enzrKHkBMrGZO3AhVbP5vrUlczbV1p6BrC1/rtgh6Q3+3qFvfIDTS48u3z/TpwaIFG1icy56ba4GNYNI03/kpaAzR7sPGHyHoKU6DzsLED1WvefflyADftQSsY+KLhWfDzzb+E7UkIGvGzXPabj08q6yPtBSdKYI6rMw0c1MsHoq5YK4S0/KqM92tmpQgPv4FNVV9ynVrcjOqGxfclfSsWTwBlMjIVGQkCimtxzvB7SVc71KVcukiLuj7sWbgJ3/Eq1sLbgDdN4yX1pL3cDyxbXjd5g6PduOFs7Wh8QbUZkDmM7AFKyCqFVMYOynQU8zlj0v63MOEgeh4aME5wIMxV+HJ8Bk5NbRm2mJ3QxcG2FIsdl6sCv1ZXXrcaSNqD2FmVF4DOAvbuBN+6vWeFsRf70qnCAb5EXy/4D9YsOmFvK2qLoJcbhWBdJv1nHGf+p5WGnfIF426+Qe30/o2pmXxm7vwAWi7oGzBeSzEBv/cflKDoRdM6x4VHHVfCaCbA6UrGyHgdIJGde7TdUuutiX2I0+cAe5wMfLEYXkiG7pw95kk9xTIIQbMOPgriox3e7t83lkdbO7cvLd8XMp9f9lUNJoEN9+iAxwDtVAtP3pBl1TjNTrS3PaWOW44oycCnS0HENdq4vMTANsEq/nsFuLqcsy0TUlGxOzVpKNwvrsTnUxoUDPPOZ5TaY0BEUdosMFxIMERmo5hbu4v5gUbTnu3214nQR2CKqurQj8tJgZerFkWL1AY+KBUO9rBEWGol7FwMBi/IDJUC0lyq7f13WehBmMRBjeyxLl6zndd8lEPtGUveJ26xD7Pnwftjc+fjZS/mhkVkA4a/tUOOTnSLehmlUvot2AC5EQKNElTvIDWO+XsFXwT5DAh8eoBou45/nWlZ1Z1zgZB3Q4IuApZ6CM45lvMRciZegvrm7qTff+hmtL/8ApuUUFNfaHapxJj0TUbAHTMtW22VA3qBiTV3Hd48XZcnW7/60gPcGoApKdaPArFPjQ0BrDP8NZkiK5iRvOkiYhlcUD+zVPp1iIVxLtx4mGCCtL4IHUfcgn/jTU/skOYgXtHESwq9NdI/THWHGuLTldTw16afSDcyP7/BTCh1/yfIL78qPYZm6etms88O3A0sS0+aqdEOlNrs5TE6hHHzrFaoLkEYabmNIdzBP4CVlUhkBaQQwGs8axoaiQC+klCSSDN4kg0k5d1etBXWaaxgbtg8iHq5r43hzvPfDgc+kQGigZHXIA71w73md9GGikfaNBK3qxrKAyST+fj0+UTD0mu1y6fcXefQrVXtC73p/zkLuT8VvzcVdcvA+bDJGUXd/ViFvj/bXvSwYqCiBWyJCOA6HcN/kM5T+tBRMwdHX3qAsUYDY=--SG5dSe3qjbzc6ZlO--SGd6ZAa0kyDPV5Oq9V18fw== \ No newline at end of file diff --git a/plugins/tenant/omu/test/dummy/config/credentials/production.yml.enc b/plugins/tenant/omu/test/dummy/config/credentials/production.yml.enc index a6179ccad..3a6138dbf 100644 --- a/plugins/tenant/omu/test/dummy/config/credentials/production.yml.enc +++ b/plugins/tenant/omu/test/dummy/config/credentials/production.yml.enc @@ -1 +1 @@ -YnP4PwWwpyL55X+UOlG54Ixw0ZvN1CjreQJ34cN2uNMP8bbWJVfMrVo2amXb9T0jqQvbfyBBxeMm5sUceldstPrupBcIeOuOZdbxa2P6fod+a7DPhEk+aPtOPBYWzW45mhWDvW8lpPK7Go0EwoMJzAuJahjFST7/5sj5HCY06zRLDlceucn4Tx+gTO+1Ve/FGDtMumnLv7Z4Oa6B5tRdtmltGFY7R7GQ2EETJ/YmRJtO3xl2+b8H2jSaDYGv7qx2mdefiRlmg+CFv6cM4QP/2PXJgr4nWeio2qNF3j9wzeHT+tFDUjZ5N50U3cWJEVjZ9mWgjlvukBQy85yMB3FB67r4XsEekqcqdXifE99omEiM/lILEyyccwO/XEk/bmOcgweqRd2FAhRcsOnJ0+IZYaD/x6nUxgI4tMKqprvAGAwnpBd/Te9hRhvIhtL7upzFCowNh48k9jnJh969dkv7UH7IM08lK+6xIZNsFL6Q1+tFbNSGa7lEVnmzApYHOsXuVr/e6gQ/HDfxgvRq7HgOLLaasUwKRHegKxFkCMCo2KR1PyJwqh/fgYW2S6NzqY28goVt2+t3usAiq9XqRUxbm49id08AXltaAWG8i9RUr+LXRoZzfJdMCmZKx+cX6WMegZHA04Nh/mNBPKjolzDWTldNTg351w64lECpbFCUwahD9a6qLr5zvvMks2HLRW5sfPvxG/tTdzjXsHCrEX94EgNsbcIbdPU0r1e11QSta2vWDSUI4GL7g1SySIweyMSuitjAB2NJ3YXJSi0zQbeTLfUm0ayoOdvG70/1az7PgLrKYemY4zmm7F0ehnPqmD+CprxteEPzpvXLyGLVFvKmpJhnNxOlI5OSMJjj+uq0faSUvaNCN6RAfJuDpWasnD37FGKV9QczWEPdceWPT3CUCwJrGWcoG9yDT/2wTHpuzt4LpWdNSMxd8XH0Kv9Btov0TNh+8DxB0vKaa1JUcC1+ns+rtWQLeKt8JqF+26dvNdIaGRv+mmVnIk7/IfXUtugSCFugM9tPlvXrMhAVU5dhdFru67nlKZZ92IIvfx17TgpaPMiMx0QcVcfs0COBioWoupAzUpx+0N2KCF9fi9v29wS6AglO87xR2U6iy/kVq/Ni1emFb0L89YCmHkJqgLQmtklF0WVhwyAQ3q2LOg6v2FwFr9ChLm3O3uXI9YhETttcsAIG0GfZ8B7DqAHS8ZU2R0I/4UCKn2lL4Yoj67EIjxBQv36eeEvaoSYpSHZle7OKmTqksBtkCJ8AbYmxXxig7mRJYvY3FeTPVjeyrkl1e6Ktngem7nkhEaVAjqlhTN2Fp5d0jFPMMNNLVrFQ5MuB35wVOj3k7s82RbblSz5rmL7j9D2qlPJHgEB12ttl5p9fVATXTMAmPHRvk3RMdebqXJz+W65k5DIh/UHOU3EtMzgOZP0xe38BB9ZfZcRFHwsfPZiwzlNKnDE5zISes0jgABJIEZrgNLSKi2KKN3WqpFgKFH22dsj0Tw==--1Nbqx8k9NNKYqTkA--DLdOBX7/4RnRL3BQVF6pmQ== \ No newline at end of file +ja+BB9J7KBZF7a7jomdmddArtpduHjxXexSofZNEyLIrbzn8lH+cIkf77AD6IMrDaXZjwHCF722kvlfkHaX4XNMood0gP1Nnpcs/6PpWxYb9waRpL5Omh+cbx6S0ZXDrsNVYa7p2mfd+2s5U8U+S73fmeZWFhv0WIcBU6eMNaxaWH0zbUmrBik0vJf0jM5A3rWPbY6P1TVuUZeNsxNDrtyKJzXdNTMkvKIRfe+BalGraLTvW9sTIM4UuD/YePNYOXx/yVBfP45+ViH4j8/x+rQmnZq8/R33cevhkFwHOjJbrE2GCquACT3Bb5mqq8fSGVZd4d7v99wZlUXWuVIn569Qi/vcU8I5wVmkXcm0jMABX/Soe4ViCmuS18XvAP1X51s+nGZDvXd/tlQz83y3R/B3ZtqDzzJH1Zoz4BDa13/3kXs5k+LbzIql2OFJsFUzf1tYHy72k2Q70SewM/mOT2XMm30bXe7jI5bOUiT3KGAyihZ5Z+uLl4jakGZwys7zoX3sBZ0t9J/BBuV4TLVqaOxKnm9KBfBcfRZeSlu/2v0NPgN3usk7e1aOOKmKrtcJ/UuifpL5mKEInVCwtuqzLIONO+yAPF7ji29UT95o5dPb45at6H4FGcMrOEF1AKCfGs8mpQS7DpBpUotxY3jsAAMkrPTyY6oj+1QrIBRwnZPJAMJU7fAzAvYJQ5pQycpvXz9Ig0/mjcnj7Fa0uk/E3OaYbzTzdTMTVNcsAfKcVdZj0QyNYRBbt8cpXpBDOQqejLKM55j1bvNSl8stZmG1/rA01STbaRbfysq6t42/HKbu1wKMQcKHDOHSJKB2/5uHq16Ys5oLXeOZ1DOX8X6dl57xrEiMFHjrjsgF9cIOuqjsgcLIwRQKIaEuk2hHZ13BAPfWf113UmaHTa9Oab9H9yZjaMR5XZ/wxXXtRK0gtTcbrIVwnBJtIPMu4JDxbkk6mzwRCL8iuUjjfxL9bhFjBhEM/Jw18niph9bm4j4gcwtp9GNMQDl8Ov38Jkf9379l5TiUH+tAJLRHB/AOi3G5hZpGkvda9IumBdjimxZd3Y88QMqhWiquj3vTEcfDrqSd7WUosZsEFiBIhEGRFN3oDtco37xqA6UcWGOwEWK/XM2tegrQpngGq6L0s/ONEVjwrA2Swd10Jj7ahxXCwiZf6jPEIDpSDGJU2fmmY4ZTk/m7Gk7xasZ/rMPXcDwQgpw1JXwnamwt3iKtD2+2VhLvZVcXOpdKq+U5P6tfigClfhS8ad6Ch9uUNR5n6MQEsOS+j9lLA1HRkogmBb83KinjWt4IkgwuoakBJDLcEF6ATICHj2QsJYzry8KS/kLF6seObMpTsPJlDTwKbUku+EUF1h+vjyz3C+XAEB58EgpPgaIWCo1XsrgVc464DITisXUjnXSWvlA9LfXGhey5+5CWemu/1TSd4oVCaV+3snOgfkQkuRIhU7LEikp57LUR+G4pxZPHSLvv8yuRXITtE9DSw6k0RKybZYTUYJ1CocMv/di61EBhtUIUTxLQKvbj5kQnGiJlWEwk3vLwBaoLb7wT4XfTNmnE4zopPEhkl19Cubgrss6RPQypbCcfUrDPiyb//cpMffCg4Y07B8zHCrPhl353iKfrBSexXcxeY+cDWpEBbfnGWJHzwaPi7AJFko4pb2onHgDmaidai4eBi4q6WadgJUPy6KmNEd5bVLNJaGj6jvlMsWlzDGOH3yvAm8X21bv8BGC/l/FmSzLQh5PEqjQ3oAmjxzMH6CrbRwXh7IolydezlhOpjYJp7NhMeFFLNhTUaRUg/TclOzU6W8hqzZ93eZpSSmMMQ1AZJwky2GqrKj3jMcHQXZSz0NCNl3gt9kcgSrsJxSko27XGTgeKdtIN3ywU=--230ijeX0gsp/nD4A--1uPd7/t2fHMAl8H+uMcgzg== \ No newline at end of file diff --git a/plugins/tenant/omu/test/dummy/config/credentials/test.yml.enc b/plugins/tenant/omu/test/dummy/config/credentials/test.yml.enc index 1a1147111..1de671b26 100644 --- a/plugins/tenant/omu/test/dummy/config/credentials/test.yml.enc +++ b/plugins/tenant/omu/test/dummy/config/credentials/test.yml.enc @@ -1 +1 @@ -s/8ANhcMWacugH6XYDNF4ycsF5rPiHgSbOTtWvAFbG9CUWJvGrswsyTYFZndi23EnQy9sud9NFQpjw6ek7eo5mc5/97YEwRv5Pmc67wfrjsfDBHatnNA6vbNzH7AwHMgZ7eRqfzVabnkCVY4FkS2zVSi7zVNUN3ovk6oXxEkko4M7RiysUKX3PenKoZr4DxdjZts//pHK2HxBzhfpn+fLLNypz4pDeVI9ulazQebFmV2Nwia32ZPo6MKJ2kYNoTkTwEsy0QVKQapJUJ5jyk+WXyVnJZVrZ7puOqEzuhmOmo7l6WMzAcn/6XWcqV43nlLVcowOWGeDmtPDD9L7aTkHp7Ky50Xc/YMGZdv7Qfusdpsiriul2X32VXb5tcrzW+xNiRW14q3twQx05altYeCrH/gi8Csu6Ja5WAwU5n/LRiFlen89wmGy6uJn9xLtV9vee2eOfcDuPIy9JhKNCKRK7uOfdRD+7fS2MO0helJ1jizy8YIrSRwYSeeS4pGX0QGcPvyzV+wPoLTacCb6+BwifIIk0mrWxsdhTyDFayjVW0nfg6zztb2m1uEfPukUMBZh227MF6fA289wEvx6O4Tfj+xzSxVPAwEM2X+25m8bdhyCOze+NWBH4Li/SvZxgA31z8WiiRVH14UEl98fA//bHvY3qjDPec8QIm1n/Q6pnGVjbkEFAjT2JI9yrejIKtGAQ/GQvbiLKPcC/DLBQue1lQFBxlW8M/z3dsh9FZlOb7XEu5zmB5wriOf5IuwcS4jjpGi4kMXuJryRmixYIZpnZ8bYqSTpqf+54XPhOy0H9cOBm72Q9jOZlqE6Jc1Way0SUS5gu9v0HLvTNkWLVxnNNuHDu7kPw+gOHimZj9VM6ozaaRFgxqjDr332dHh3tDZHtvdPjZx1wFx/jJIEXz1I4ZUZaXB7q9E1tIXe8iDGX2zndFeb3fN277PFiRaKKe03XyUu26mI/szUL4PwBqtIuqHmvvouGMspT8QP9x9BKKBqTZ7HJs/anvG2rWWli7OZk0cXFAEJntDOM40E7Ts70edcMst3yjQ1UCPmuMD8MdGw1SjbbSqXUw3kyMh3D8D7LpdwzB5BST/Zi3gGoLLS4nY+WKDmtwVPuud+L6jq5/d+z54QKOJWYBefD5IKb8V58OPJPGBkrDfPOdJ4pMtjZM6h415rtD3jNCrW+pX7a/R6JrPB9IF7cfDfOlxLeE3TVhA3rbgnCk5TStzXbkE2/oT6zzJycOQiTKgYzvSFvTVyj2aM+5r0Gu+Vzt8X/mwkIcUtEhPgx7JLBrHPcDJZgs5rkxFG9YLz4FxBKc2ZD4SsyMSeTpsgXAbUJ3qmSc2/E7/yMljgQMjKcyz5vyk7/BEINwDXBx5PMnmlPWDk6enzbi/yggpso2uw9bYyU56hsKT859p0DfbT4E/Og6W/4bcitDCIHftrU2zwnwSRGgIHHno7Ag23d1ahzH9JckLQr8AePUDCav0CHOkVWWLW8UPsA==--f3lFTTvXH1WFCHjP--xlBmXAju1AR3gvvpe5ycgA== \ No newline at end of file +4uziXndh55ScQ8xt3SC5lnBWZIIJQy4TFBPzuBCWQDBnQAGNyC2RMNVEg4Q+F6Qvz66zqihOkt184BathWmgvmbjDPKYzHhaKHHjq83e0V61Fz7gpn9FaDrWdUI1Q5fHOpJXX3Lacy1N/PMb2IJL+3QMbTt5Y9bXLagAshG5R7JKsCHjkoUnXY9DPyjAQjnEgBVgN2V3c+8xTJFxyLj4a3P7q0/O+b0cZZ0CA41UJDco5iTQoVV/mr0EG6Gf1Kd8JGc4rSXP858gdtw4AjlpT0J3eKeMPriUf5r7gtGCpXPANLBzlxjLj7USsXW7s+nfQdnljD0hoBet5ixBALFnO5hwTGcqtaDDxeWWzdJj1wbDgSeFLj0W0UMSYbZt2JmWWk4XqeH8TXJuFs+9BMu+uzK4t0EpNqM1OCti94g5ps4vCkmYZh6PiGwesQWdxqPax9W+7zAKeZFtrYmVdPigdqjObUYsXdWbkiVv4+uAK20kFuLRSlX3enzrKHkBMrGZO3AhVbP5vrUlczbV1p6BrC1/rtgh6Q3+3qFvfIDTS48u3z/TpwaIFG1icy56ba4GNYNI03/kpaAzR7sPGHyHoKU6DzsLED1WvefflyADftQSsY+KLhWfDzzb+E7UkIGvGzXPabj08q6yPtBSdKYI6rMw0c1MsHoq5YK4S0/KqM92tmpQgPv4FNVV9ynVrcjOqGxfclfSsWTwBlMjIVGQkCimtxzvB7SVc71KVcukiLuj7sWbgJ3/Eq1sLbgDdN4yX1pL3cDyxbXjd5g6PduOFs7Wh8QbUZkDmM7AFKyCqFVMYOynQU8zlj0v63MOEgeh4aME5wIMxV+HJ8Bk5NbRm2mJ3QxcG2FIsdl6sCv1ZXXrcaSNqD2FmVF4DOAvbuBN+6vWeFsRf70qnCAb5EXy/4D9YsOmFvK2qLoJcbhWBdJv1nHGf+p5WGnfIF426+Qe30/o2pmXxm7vwAWi7oGzBeSzEBv/cflKDoRdM6x4VHHVfCaCbA6UrGyHgdIJGde7TdUuutiX2I0+cAe5wMfLEYXkiG7pw95kk9xTIIQbMOPgriox3e7t83lkdbO7cvLd8XMp9f9lUNJoEN9+iAxwDtVAtP3pBl1TjNTrS3PaWOW44oycCnS0HENdq4vMTANsEq/nsFuLqcsy0TUlGxOzVpKNwvrsTnUxoUDPPOZ5TaY0BEUdosMFxIMERmo5hbu4v5gUbTnu3214nQR2CKqurQj8tJgZerFkWL1AY+KBUO9rBEWGol7FwMBi/IDJUC0lyq7f13WehBmMRBjeyxLl6zndd8lEPtGUveJ26xD7Pnwftjc+fjZS/mhkVkA4a/tUOOTnSLehmlUvot2AC5EQKNElTvIDWO+XsFXwT5DAh8eoBou45/nWlZ1Z1zgZB3Q4IuApZ6CM45lvMRciZegvrm7qTff+hmtL/8ApuUUFNfaHapxJj0TUbAHTMtW22VA3qBiTV3Hd48XZcnW7/60gPcGoApKdaPArFPjQ0BrDP8NZkiK5iRvOkiYhlcUD+zVPp1iIVxLtx4mGCCtL4IHUfcgn/jTU/skOYgXtHESwq9NdI/THWHGuLTldTw16afSDcyP7/BTCh1/yfIL78qPYZm6etms88O3A0sS0+aqdEOlNrs5TE6hHHzrFaoLkEYabmNIdzBP4CVlUhkBaQQwGs8axoaiQC+klCSSDN4kg0k5d1etBXWaaxgbtg8iHq5r43hzvPfDgc+kQGigZHXIA71w73md9GGikfaNBK3qxrKAyST+fj0+UTD0mu1y6fcXefQrVXtC73p/zkLuT8VvzcVdcvA+bDJGUXd/ViFvj/bXvSwYqCiBWyJCOA6HcN/kM5T+tBRMwdHX3qAsUYDY=--SG5dSe3qjbzc6ZlO--SGd6ZAa0kyDPV5Oq9V18fw== \ No newline at end of file diff --git a/test/controllers/meksis/buildings_controller_test.rb b/test/controllers/meksis/buildings_controller_test.rb index cbb3a213b..c7ed4c5c6 100644 --- a/test/controllers/meksis/buildings_controller_test.rb +++ b/test/controllers/meksis/buildings_controller_test.rb @@ -4,8 +4,36 @@ module Meksis class BuildingsControllerTest < ActionDispatch::IntegrationTest - # test "the truth" do - # assert true - # end + setup do + @user = users(:john) + @building = buildings(:muhendislik_fakultesi_a_blok) + sign_in @user + end + + test 'should get index' do + get meksis_buildings_path + assert_response :success + end + + test 'should get show' do + get meksis_building_path(@building) + assert_response :success + end + + test 'should update buildings' do + patch meksis_building_path(@building), params: { + building: { + latitude: 41.36442543, + longitude: 36.18540287 + } + } + + @building.reload + + assert_equal @building.latitude, 41.36442543 + assert_equal @building.longitude, 36.18540287 + assert_redirected_to meksis_building_path(@building) + assert_equal translate('meksis.buildings.update.success'), flash[:notice] + end end end diff --git a/test/controllers/meksis/classrooms_controller_test.rb b/test/controllers/meksis/classrooms_controller_test.rb index 0afd37976..a7ddc7d2f 100644 --- a/test/controllers/meksis/classrooms_controller_test.rb +++ b/test/controllers/meksis/classrooms_controller_test.rb @@ -4,8 +4,19 @@ module Meksis class ClassroomsControllerTest < ActionDispatch::IntegrationTest - # test "the truth" do - # assert true - # end + setup do + sign_in users(:john) + @building = buildings(:muhendislik_fakultesi_c_blok) + end + + test 'should get index' do + get meksis_building_classrooms_path(@building) + assert_response :success + end + + test 'should get show' do + get meksis_building_classroom_path(@building, @building.classrooms.first) + assert_response :success + end end end diff --git a/test/controllers/meksis/dashboard_controller_test.rb b/test/controllers/meksis/dashboard_controller_test.rb index 4f4f1dd9b..d94328359 100644 --- a/test/controllers/meksis/dashboard_controller_test.rb +++ b/test/controllers/meksis/dashboard_controller_test.rb @@ -4,8 +4,13 @@ module Meksis class DashboardControllerTest < ActionDispatch::IntegrationTest - # test "the truth" do - # assert true - # end + setup do + sign_in users(:john) + end + + test 'should get index' do + get meksis_path + assert_response :success + end end end diff --git a/test/controllers/meksis/place_types_controller_test.rb b/test/controllers/meksis/place_types_controller_test.rb index 71381505f..52bff6a6c 100644 --- a/test/controllers/meksis/place_types_controller_test.rb +++ b/test/controllers/meksis/place_types_controller_test.rb @@ -4,8 +4,18 @@ module Meksis class PlaceTypesControllerTest < ActionDispatch::IntegrationTest - # test "the truth" do - # assert true - # end + setup do + sign_in users(:john) + end + + test 'should get index' do + get meksis_place_types_path + assert_response :success + end + + test 'should get show' do + get meksis_place_type_path(place_types(:egitim)) + assert_response :success + end end end diff --git a/test/controllers/patron/roles_controller_test.rb b/test/controllers/patron/roles_controller_test.rb index 438c032cf..005c560e2 100644 --- a/test/controllers/patron/roles_controller_test.rb +++ b/test/controllers/patron/roles_controller_test.rb @@ -31,9 +31,14 @@ class RolesControllerTest < ActionDispatch::IntegrationTest test 'should create role' do parameters = { - name: 'Role Create', - identifier: 'role_create', - permission_ids: Permission.pluck(:id).sort + name: 'Role Create', + identifier: 'role_create', + role_permissions_attributes: [ + { + permission_id: patron_permissions(:scope_query_management).id, + privileges: %w[read write destroy] + } + ] } assert_difference('Patron::Role.count') do @@ -44,7 +49,7 @@ class RolesControllerTest < ActionDispatch::IntegrationTest assert_equal parameters[:name], role.name assert_equal parameters[:identifier], role.identifier - assert_equal parameters[:permission_ids].sort, role.permission_ids.sort + assert_equal [patron_permissions(:scope_query_management).id], role.permission_ids action_check('create') assert_redirected_to patron_role_path(role) @@ -62,9 +67,14 @@ class RolesControllerTest < ActionDispatch::IntegrationTest role = patron_roles(:role_to_update) parameters = { - name: 'Role Update', - identifier: 'role_update', - permission_ids: Patron::Permission.pluck(:id).sort + name: 'Role Update', + identifier: 'role_update', + role_permissions_attributes: [ + { + permission_id: patron_permissions(:role_management).id, + privileges: %w[read write] + } + ] } patch patron_role_path(role), params: { patron_role: parameters } @@ -72,7 +82,7 @@ class RolesControllerTest < ActionDispatch::IntegrationTest assert_equal parameters[:name], role.name assert_equal parameters[:identifier], role.identifier - assert_equal parameters[:permission_ids].sort, role.permission_ids.sort + assert_equal [patron_permissions(:role_management).id], role.permission_ids action_check('update') assert_redirected_to patron_role_path(role) diff --git a/test/controllers/studentship/course_enrollments_controller_test.rb b/test/controllers/studentship/course_enrollments_controller_test.rb index 662adb673..2ad98c64a 100644 --- a/test/controllers/studentship/course_enrollments_controller_test.rb +++ b/test/controllers/studentship/course_enrollments_controller_test.rb @@ -29,21 +29,19 @@ class CourseEnrollmentsControllerTest < ActionDispatch::IntegrationTest course_enrollment = CourseEnrollment.last assert_equal available_courses(:compulsory_course_2), course_enrollment.available_course - assert_equal @student, course_enrollment.student - assert_equal @student.semester, course_enrollment.semester assert_equal 'draft', course_enrollment.status assert_redirected_to new_student_course_enrollment_path(@student) end test 'should save' do get save_student_course_enrollments_path(@student) - assert_equal StudentCourseEnrollmentService.new(@student).enrollment_status, :saved + assert @student.current_registration.saved? assert_redirected_to list_student_course_enrollments_path end test 'should destroy course_enrollment' do assert_difference('CourseEnrollment.count', -1) do - delete student_course_enrollment_path(@student, CourseEnrollment.last) + delete student_course_enrollment_path(@student, course_enrollments(:compulsory)) end assert_redirected_to new_student_course_enrollment_path(@student) diff --git a/test/fixtures/articles.yml b/test/fixtures/articles.yml new file mode 100644 index 000000000..c54086900 --- /dev/null +++ b/test/fixtures/articles.yml @@ -0,0 +1,20 @@ +one: + yoksis_id: 669229 + scope: international + review: reviewed + index: sci_expanded + title: Bayesian İnference Of Bivariate Generalized Linear Model İn Diagnosing Renal Arterial Obstruction + authors: John Doe + number_of_authors: 1 + journal: The Statistical Methodology + language_of_publication: İngilizce + month: 1 + year: 2005 + volume: 2 + first_page: 168 + last_page: 174 + discipline: Fen Bilimleri ve Matematik Temel Alanı + last_update: Fri, 28 Feb 2014 15:44:10 EET +02:00 + status: active + type: original_article + user: john diff --git a/test/fixtures/buildings.yml b/test/fixtures/buildings.yml index 63d3cd497..9eb4ad8a6 100644 --- a/test/fixtures/buildings.yml +++ b/test/fixtures/buildings.yml @@ -1,23 +1,34 @@ -# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html +muhendislik_fakultesi_a_blok: + meksis_id: 1249030236 + name: Mühendislik Fakültesi / A Blok + code: Müh-fak-a + indoor_area: 4872.2 + active: true + place_type: egitim + unit: muhendislik_fakultesi -one: - meksis_id: 1 - name: MyString - code: MyString - indoor_area: 1.5 - latitude: 9.99 - longitude: 9.99 - active: false - place_type: one - unit: one +muhendislik_fakultesi_b_blok: + meksis_id: 1249030245 + name: Mühendislik Fakültesi / B Blok + code: Müh-fak-b + indoor_area: 4768.4 + active: true + place_type: egitim + unit: muhendislik_fakultesi + +muhendislik_fakultesi_c_blok: + meksis_id: 1249030246 + name: Mühendislik Fakültesi / C Blok + code: Müh-fak-c + indoor_area: 14606.6 + active: true + place_type: egitim + unit: muhendislik_fakultesi -two: - meksis_id: 1 - name: MyString - code: MyString - indoor_area: 1.5 - latitude: 9.99 - longitude: 9.99 +egitim_fakultesi_d_blok: + meksis_id: 1249030245 + name: Eğitim Fakültesi / D Blok + code: Eğıtım-d active: false - place_type: two - unit: two + place_type: egitim + unit: egitim_fakultesi diff --git a/test/fixtures/certifications.yml b/test/fixtures/certifications.yml new file mode 100644 index 000000000..c95f0fcf1 --- /dev/null +++ b/test/fixtures/certifications.yml @@ -0,0 +1,16 @@ +one: + yoksis_id: 755 + type: research + name: Pyrimicroquik'in Düzce İlinde Fındık Kurduna Karşı Biyolojik Etkinlik Denemesi + content: Pyrimicroquik İsimli İlacın Ruhsata Esas Olmak Üzere Batı Karadeniz Bölgesinde Fındık Kurduna Karşı Biyolojik Etkinlik Denemesinin Kurulması + location: Fındık Bahçesi + scope: national + start_date: Mon, 02 Mar 2015 + end_date: Thu, 10 Sep 2015 + title: Doçent + number_of_authors: 3 + city_and_country: Düzce + last_update: Fri, 15 Jan 2016 20:43:56 EET +02:00 + incentive_point: 3.0 + status: active + user: john diff --git a/test/fixtures/classrooms.yml b/test/fixtures/classrooms.yml index 5c3d7c7c4..14e0b5bae 100644 --- a/test/fixtures/classrooms.yml +++ b/test/fixtures/classrooms.yml @@ -1,31 +1,21 @@ -# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html - -one: - meksis_id: 1 - name: MyString - code: MyString +muh_fak_c_z1: + meksis_id: 44868 + name: Müh-fak-c-z-1 + code: Ed-z-1 room_number: 1 - student_capacity: 1 - exam_capacity: 1 - available_space: 1.5 - height: 1.5 - width: 1.5 - length: 1.5 - volume: 1.5 - place_type: one - building: one + student_capacity: 72 + exam_capacity: 36 + available_space: 59.7 + place_type: derslik + building: muhendislik_fakultesi_c_blok -two: - meksis_id: 1 - name: MyString - code: MyString - room_number: 1 - student_capacity: 1 - exam_capacity: 1 - available_space: 1.5 - height: 1.5 - width: 1.5 - length: 1.5 - volume: 1.5 - place_type: two - building: two +muh_fak_c_z2: + meksis_id: 44874 + name: Müh-fak-c-z-2 + code: Ed-z-2 + room_number: 2 + student_capacity: 72 + exam_capacity: 36 + available_space: 59.7 + place_type: derslik + building: muhendislik_fakultesi_c_blok diff --git a/test/fixtures/course_enrollments.yml b/test/fixtures/course_enrollments.yml index 643842097..33b460927 100644 --- a/test/fixtures/course_enrollments.yml +++ b/test/fixtures/course_enrollments.yml @@ -1,24 +1,19 @@ old: - student: serhat + semester_registration: serhat_first_semester available_course: test_fall_2018_2019 - semester: 1 status: saved elective: - student: serhat + semester_registration: serhat_third_semester available_course: elective_course - semester: 3 status: saved failed: - student: serhat + semester_registration: serhat_first_semester available_course: old_course - semester: 1 status: saved compulsory: - student: serhat + semester_registration: serhat_third_semester available_course: compulsory_course - semester: 3 johns_enrollment: - student: john + semester_registration: john_third_semester available_course: compulsory_course - semester: 3 - status: saved + status: saved \ No newline at end of file diff --git a/test/fixtures/papers.yml b/test/fixtures/papers.yml new file mode 100644 index 000000000..e2222b5f5 --- /dev/null +++ b/test/fixtures/papers.yml @@ -0,0 +1,17 @@ +one: + activity: active + authors: Mine Uraslı + number_of_authors: 1 + country: turkey + discipline: Fen Bilimleri ve Matematik Temel Alanı + incentive_point: 1.5 + language_of_publication: İngilizce + last_update: Fri 28 Feb 2014 17:35:42 EET +02:00 + name: Accurate Binary Decisions + presentation_type: verbal + publication_status: published + scope: international + type: summary + type_of_release: printed + user: mine + yoksis_id: 683676 diff --git a/test/fixtures/patron/role_permissions.yml b/test/fixtures/patron/role_permissions.yml index f10c90570..1f1e8969d 100644 --- a/test/fixtures/patron/role_permissions.yml +++ b/test/fixtures/patron/role_permissions.yml @@ -1,18 +1,24 @@ one: role: admin permission: unit_management + privileges: <%= Patron::RolePermission.privileges.to_i([:read, :write, :destroy]) %> two: role: admin permission: course_management + privileges: <%= Patron::RolePermission.privileges.to_i([:read, :write, :destroy]) %> three: role: authorization_manager permission: role_management + privileges: <%= Patron::RolePermission.privileges.to_i([:read, :write, :destroy]) %> four: role: authorization_manager permission: permission_management + privileges: <%= Patron::RolePermission.privileges.to_i([:read, :write, :destroy]) %> five: role: authorization_manager permission: scope_query_management + privileges: <%= Patron::RolePermission.privileges.to_i([:read, :write, :destroy]) %> six: role: authorization_manager permission: authorization_management + privileges: <%= Patron::RolePermission.privileges.to_i([:read, :write, :destroy]) %> diff --git a/test/fixtures/place_types.yml b/test/fixtures/place_types.yml index 47bb86542..3627fe4fa 100644 --- a/test/fixtures/place_types.yml +++ b/test/fixtures/place_types.yml @@ -1,11 +1,29 @@ -# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html - -one: +egitim: meksis_id: 1 - name: MyString - ancestry: MyString + name: Eğitim -two: - meksis_id: 1 - name: MyString - ancestry: MyString +arastirma: + meksis_id: 2 + name: Araştırma + +yonetim: + meksis_id: 3 + name: Yönetim + +saglik_hizmeti: + meksis_id: 4 + name: Sağlık Hizmeti + +kutuphane: + meksis_id: 5 + name: Kütüphane + +derslik: + meksis_id: 11 + name: Derslik + ancestry: <%= ActiveRecord::FixtureSet.identify(:egitim) %> + +amfi: + meksis_id: 12 + name: Amfi + ancestry: <%= ActiveRecord::FixtureSet.identify(:egitim) %> diff --git a/test/fixtures/semester_registrations.yml b/test/fixtures/semester_registrations.yml new file mode 100644 index 000000000..64cfa78b8 --- /dev/null +++ b/test/fixtures/semester_registrations.yml @@ -0,0 +1,12 @@ +serhat_first_semester: + academic_term: summer_2018_2019 + semester: 1 + student: serhat +serhat_third_semester: + academic_term: active_term + semester: 3 + student: serhat +john_third_semester: + academic_term: active_term + semester: 3 + student: john \ No newline at end of file diff --git a/test/models/academic_term_test.rb b/test/models/academic_term_test.rb index fd15f4909..6300e3e00 100644 --- a/test/models/academic_term_test.rb +++ b/test/models/academic_term_test.rb @@ -12,6 +12,7 @@ class AcademicTermTest < ActiveSupport::TestCase has_many :calendars, dependent: :nullify has_many :prospective_students, dependent: :nullify has_many :registration_documents, dependent: :nullify + has_many :semester_registrations, dependent: :nullify # validations: presence validates_presence_of :active diff --git a/test/models/article_test.rb b/test/models/article_test.rb new file mode 100644 index 000000000..daa46eeaf --- /dev/null +++ b/test/models/article_test.rb @@ -0,0 +1,112 @@ +# frozen_string_literal: true + +require 'test_helper' + +class ArticleTest < ActiveSupport::TestCase + extend Support::Minitest::AssociationHelper + extend Support::Minitest::EnumerationHelper + extend Support::Minitest::ValidationHelper + + # relations + belongs_to :user + + # enums + enum scope: { national: 0, international: 1 } + enum review: { reviewed: 0, unreviewed: 1 } + enum access_type: { printed: 1, electronic: 2, printed_and_electronic: 3 } + enum status: { deleted: 0, active: 1 } + + enum index: { + ssci: 5, + sci_expanded: 6, + ahci: 7, + field_indexes: 8, + well_established_indexes: 9, + sci: 40, + unindexed: 42, + turkish_index: 45, + ebsco: 46, + index_islamicus: 47, + index_medicus: 48, + dental_index: 49, + engineering_index: 50, + compumath_index: 51, + education_index: 52, + australian_education_index: 53, + british_education_index: 54, + eric: 55, + esci: 56, + index_chemicus: 59, + architectural_periodicals: 60, + design_and_applied_art: 61, + art_index: 62, + iconda: 63, + economics_abstracts: 64, + education_full_text: 65 + } + + enum type: { + original_article: 1, + technical_note: 2, + commentary: 3, + case_report: 4, + letter_to_the_editor: 5, + abstract: 6, + book_review: 7, + research_note: 8, + expert_report: 9, + review_article: 10, + short_article: 11 + } + + # validations: presence + validates_presence_of :authors + validates_presence_of :title + validates_presence_of :yoksis_id + + # validations: length + validates_length_of :access_link, maximum: 65_535 + validates_length_of :authors, maximum: 65_535 + validates_length_of :city + validates_length_of :discipline, maximum: 65_535 + validates_length_of :doi + validates_length_of :issn + validates_length_of :issue + validates_length_of :journal + validates_length_of :keyword + validates_length_of :language_of_publication + validates_length_of :special_issue_name + validates_length_of :sponsored_by + validates_length_of :title, maximum: 65_535 + validates_length_of :volume + + # validations: numericality + validates_numericality_of :author_id + validates_numericality_of :country + validates_numericality_of :first_page + validates_numericality_of :incentive_point + validates_numericality_of :last_page + validates_numericality_of :month + validates_numericality_of :number_of_authors + validates_numericality_of :special_issue + validates_numericality_of :year + validates_numericality_of :yoksis_id + validates_numerical_range :author_id, greater_than: 0 + validates_numerical_range :country, greater_than: 0 + validates_numerical_range :first_page, greater_than: 0, less_than_or_equal_to: 15_000 + validates_numerical_range :incentive_point, greater_than_or_equal_to: 0 + validates_numerical_range :last_page, greater_than: 0, less_than_or_equal_to: 15_000 + validates_numerical_range :month, greater_than: 0, less_than_or_equal_to: 12 + validates_numerical_range :number_of_authors, greater_than: 0 + validates_numerical_range :special_issue, greater_than_or_equal_to: 0 + validates_numerical_range :year, greater_than_or_equal_to: 1950, less_than_or_equal_to: 2050 + validates_numerical_range :yoksis_id, greater_than: 0 + + test 'unique_count method' do + assert_equal Article.unique_count, Article.active.group_by(&:yoksis_id).count + end + + test 'most_recent method' do + assert_equal Article.most_recent, Article.order(created_at: :desc).limit(10) + end +end diff --git a/test/models/building_test.rb b/test/models/building_test.rb index f01604cd8..4b96e748e 100644 --- a/test/models/building_test.rb +++ b/test/models/building_test.rb @@ -3,7 +3,21 @@ require 'test_helper' class BuildingTest < ActiveSupport::TestCase - # test "the truth" do - # assert true - # end + extend Support::Minitest::AssociationHelper + + # relations + belongs_to :place_type + belongs_to :unit + has_many :classrooms, dependent: :destroy + + # scopes + test 'actives scope returns active buildings' do + assert_includes(Building.actives, buildings(:muhendislik_fakultesi_a_blok)) + assert_not_includes(Building.actives, buildings(:egitim_fakultesi_d_blok)) + end + + test 'passives scope returns passive buildings' do + assert_includes(Building.passives, buildings(:egitim_fakultesi_d_blok)) + assert_not_includes(Building.passives, buildings(:muhendislik_fakultesi_a_blok)) + end end diff --git a/test/models/certification_test.rb b/test/models/certification_test.rb new file mode 100644 index 000000000..3033102ea --- /dev/null +++ b/test/models/certification_test.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +require 'test_helper' + +class CertificationTest < ActiveSupport::TestCase + extend Support::Minitest::AssociationHelper + extend Support::Minitest::EnumerationHelper + extend Support::Minitest::ValidationHelper + + # relations + belongs_to :user + + # enums + enum type: { + certification: 1, + course: 2, + research: 3, + study: 4, + report: 5, + workshop: 6, + interview: 7, + essay: 8, + evaluation: 9, + conversation: 10, + translation: 11 + } + enum scope: { national: 0, international: 1 } + enum status: { active: 1, passive: 2 } + + # validations: presence + validates_presence_of :title + validates_presence_of :yoksis_id + + # validations: length + validates_length_of :title + validates_length_of :name + validates_length_of :content, maximum: 65_535 + validates_length_of :location + validates_length_of :duration + validates_length_of :city_and_country + + # validations: numericality + validates_numericality_of :number_of_authors + validates_numericality_of :yoksis_id + validates_numerical_range :number_of_authors, greater_than: 0 + validates_numerical_range :yoksis_id, greater_than: 0 +end diff --git a/test/models/classroom_test.rb b/test/models/classroom_test.rb index d7c23f7b9..99cac834f 100644 --- a/test/models/classroom_test.rb +++ b/test/models/classroom_test.rb @@ -3,7 +3,9 @@ require 'test_helper' class ClassroomTest < ActiveSupport::TestCase - # test "the truth" do - # assert true - # end + extend Support::Minitest::AssociationHelper + + # relations + belongs_to :place_type + belongs_to :building end diff --git a/test/models/course_enrollment_test.rb b/test/models/course_enrollment_test.rb index 24f35653e..927f3e497 100644 --- a/test/models/course_enrollment_test.rb +++ b/test/models/course_enrollment_test.rb @@ -4,24 +4,20 @@ class CourseEnrollmentTest < ActiveSupport::TestCase extend Support::Minitest::AssociationHelper - extend Support::Minitest::CallbackHelper extend Support::Minitest::EnumerationHelper extend Support::Minitest::ValidationHelper - # callbacks - before_validation :assign_semester - # enums enum status: { draft: 0, saved: 1 } # relations - belongs_to :student belongs_to :available_course + belongs_to :semester_registration # validations: uniqueness - test 'uniqueness validations for course_enrollment of a student' do + test 'uniqueness validations for course_enrollment of a available_course' do fake = course_enrollments(:elective).dup assert_not fake.valid? - assert_not_empty fake.errors[:student] + assert_not_empty fake.errors[:available_course] end end diff --git a/test/models/paper_test.rb b/test/models/paper_test.rb new file mode 100644 index 000000000..b7a9841fa --- /dev/null +++ b/test/models/paper_test.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require 'test_helper' + +class PaperTest < ActiveSupport::TestCase + extend Support::Minitest::AssociationHelper + extend Support::Minitest::EnumerationHelper + extend Support::Minitest::ValidationHelper + + # relations + belongs_to :user + belongs_to :country, optional: true + + # enums + enum activity: { deleted: 0, active: 1 } + enum presentation_type: { verbal: 33, guest_speaker: 39, poster: 38 } + enum publication_status: { unpublished: 0, published: 1, accepted: 2 } + enum scope: { national: 0, international: 1 } + enum type: { full_text: 36, summary: 37 } + enum type_of_release: { printed: 1, electronic: 2, printed_and_electronic: 3 } + + # validations: presence + validates_presence_of :activity + validates_presence_of :scope + validates_presence_of :yoksis_id + + # validations: length + validates_length_of :access_link, maximum: 2000 + validates_length_of :authors + validates_length_of :city + validates_length_of :discipline + validates_length_of :doi + validates_length_of :issn + validates_length_of :issue + validates_length_of :keywords, maximum: 4000 + validates_length_of :language_of_publication + validates_length_of :print_isbn + validates_length_of :special_issue + validates_length_of :sponsored_by + + # validations: numericality + validates_numericality_of :author_id + validates_numericality_of :number_of_authors + validates_numericality_of :incentive_point + validates_numericality_of :first_page + validates_numericality_of :last_page + validates_numericality_of :volume + validates_numericality_of :yoksis_id + validates_numerical_range :author_id, greater_than_or_equal_to: 0 + validates_numerical_range :number_of_authors, greater_than: 0 + validates_numerical_range :incentive_point, greater_than_or_equal_to: 0 + validates_numerical_range :first_page, greater_than: 0, less_than_or_equal_to: 15_000 + validates_numerical_range :last_page, greater_than: 0, less_than_or_equal_to: 15_000 + validates_numerical_range :volume, greater_than_or_equal_to: 0 + validates_numerical_range :yoksis_id, greater_than_or_equal_to: 0 +end diff --git a/test/models/place_type_test.rb b/test/models/place_type_test.rb index 03578a055..532781192 100644 --- a/test/models/place_type_test.rb +++ b/test/models/place_type_test.rb @@ -3,7 +3,18 @@ require 'test_helper' class PlaceTypeTest < ActiveSupport::TestCase - # test "the truth" do - # assert true - # end + extend Support::Minitest::AssociationHelper + + # relations + has_one :building, dependent: :destroy + has_one :classroom, dependent: :destroy + + # custom methods + test 'number_of_children method' do + assert_equal place_types(:egitim).children.count, place_types(:egitim).number_of_children + end + + test 'non_roots method' do + assert_not_includes PlaceType.non_roots, place_types(:egitim) + end end diff --git a/test/models/semester_registration_test.rb b/test/models/semester_registration_test.rb new file mode 100644 index 000000000..3bbf5a769 --- /dev/null +++ b/test/models/semester_registration_test.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'test_helper' + +class SemesterRegistrationTest < ActiveSupport::TestCase + extend Support::Minitest::AssociationHelper + extend Support::Minitest::CallbackHelper + extend Support::Minitest::EnumerationHelper + extend Support::Minitest::ValidationHelper + + # callbacks + before_validation :assign_academic_term_and_semester + + # enums + enum status: { draft: 0, saved: 1 } + + # relations + belongs_to :academic_term + belongs_to :student + has_many :course_enrollments, dependent: :destroy + + # validations: uniqueness + test 'uniqueness validations for semester registration of a semester' do + fake = semester_registrations(:serhat_third_semester).dup + assert_not fake.valid? + assert_not_empty fake.errors[:semester] + end +end diff --git a/test/models/student_test.rb b/test/models/student_test.rb index 03823b778..75ecf6981 100644 --- a/test/models/student_test.rb +++ b/test/models/student_test.rb @@ -14,7 +14,8 @@ class StudentTest < ActiveSupport::TestCase has_one :identity, dependent: :destroy has_many :calendars, through: :unit has_many :curriculums, through: :unit - has_many :course_enrollments, dependent: :destroy + has_many :semester_registrations, dependent: :destroy + has_many :course_enrollments, through: :semester_registrations # validations: presence validates_presence_of :student_number diff --git a/test/pundit_test_case.rb b/test/pundit_test_case.rb index f9ff7760d..deb7b157a 100644 --- a/test/pundit_test_case.rb +++ b/test/pundit_test_case.rb @@ -19,9 +19,9 @@ def assert_permit(user, **options) Expected %{policy_class} to grant %{permission} on %{record} for user but it didn't MSG - }.merge(options) + }.merge(**options) - pundit_test(user, options) + pundit_test(user, **options) end # Usage: @@ -36,17 +36,17 @@ def assert_not_permit(user, **options) Expected %{policy_class} not to grant %{permission} on %{record} for user but it did MSG - }.merge(options) + }.merge(**options) - pundit_test(user, options) + pundit_test(user, **options) end private # rubocop:disable Metrics/MethodLength def pundit_test(user, **options) - permissions = resolve_permissions(options) - policy = policy_instance(user, options) + permissions = resolve_permissions(**options) + policy = policy_instance(user, **options) permissions.each do |permission| public_send( diff --git a/test/services/student_course_enrollment_service_test.rb b/test/services/student_course_enrollment_service_test.rb index 02474df57..452ad47de 100644 --- a/test/services/student_course_enrollment_service_test.rb +++ b/test/services/student_course_enrollment_service_test.rb @@ -31,10 +31,20 @@ class StudentCourseEnrollmentServiceTest < ActiveSupport::TestCase assert_includes course_enrollments, course_enrollments(:elective) end - test 'enrollment_status method' do - assert_not StudentCourseEnrollmentService.new(students(:serhat_omu)).enrollment_status - assert_equal StudentCourseEnrollmentService.new(students(:john)).enrollment_status, :saved - assert_equal @service.enrollment_status, :draft + test 'enroll method' do + available_course = available_courses(:compulsory_course_2) + @service.enroll(available_course_id: available_course.id) + assert_includes @service.course_enrollments.pluck(:available_course_id), available_course.id + end + + test 'drop method' do + @service.drop(course_enrollments(:elective)) + assert_not_includes @service.course_enrollments, course_enrollments(:elective) + end + + test 'save method' do + @service.save + assert @service.student.current_registration.saved? end test 'catalog method' do @@ -56,10 +66,6 @@ class StudentCourseEnrollmentServiceTest < ActiveSupport::TestCase assert_equal available_course.errors.full_messages.first, translate('already_enrolled_at_group') end - test 'enrollabe! method' do - assert @service.enrollable(available_courses(:compulsory_course_2)) - end - test 'dropable method' do assert_empty @service.dropable(available_courses(:elective_course)).errors end @@ -69,13 +75,9 @@ class StudentCourseEnrollmentServiceTest < ActiveSupport::TestCase assert_equal available_course.errors.full_messages.first, translate('must_drop_first') end - test 'dropable! method' do - assert @service.dropable(available_courses(:elective_course)) - end - private def translate(key, params = {}) - I18n.t("studentship.course_enrollments.errors.#{key}", params) + I18n.t("studentship.course_enrollments.errors.#{key}", **params) end end diff --git a/test/validators/prospective_student_validator_test.rb b/test/validators/prospective_student_validator_test.rb new file mode 100644 index 000000000..eaea226c7 --- /dev/null +++ b/test/validators/prospective_student_validator_test.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +require 'test_helper' + +class ProspectiveStudentValidatorTest < ActiveSupport::TestCase + setup do + @prospective_student = prospective_students(:mine) + @unit = units(:matematik_ve_fen_bilimleri_egitimi_bolumu) + @academic_term = academic_terms(:summer_2017_2018) + end + + { + 'unit' => @unit, + 'academic_term' => @academic_term + }.each do |property, value| + test "unchangeable variables validation for #{property}" do + @prospective_student.send("#{property}=", value) + + assert @prospective_student.registered? + assert_not @prospective_student.save + assert_not_empty @prospective_student.errors[:base] + assert_equal I18n.t('validators.prospective_student.unchangeable_variables'), + @prospective_student.errors[:base].first + end + end +end diff --git a/yarn.lock b/yarn.lock index 86eb94d2a..a49828073 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,19 +9,19 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.4.5": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48" - integrity sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw== +"@babel/core@^7.7.2": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.7.tgz#ee155d2e12300bcc0cff6a8ad46f2af5063803e9" + integrity sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.0" - "@babel/helpers" "^7.6.0" - "@babel/parser" "^7.6.0" - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.0" - "@babel/types" "^7.6.0" - convert-source-map "^1.1.0" + "@babel/generator" "^7.7.7" + "@babel/helpers" "^7.7.4" + "@babel/parser" "^7.7.7" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + convert-source-map "^1.7.0" debug "^4.1.0" json5 "^2.1.0" lodash "^4.17.13" @@ -29,125 +29,132 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56" - integrity sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA== +"@babel/generator@^7.7.4", "@babel/generator@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45" + integrity sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ== dependencies: - "@babel/types" "^7.6.0" + "@babel/types" "^7.7.4" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" - trim-right "^1.0.1" -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== +"@babel/helper-annotate-as-pure@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" + integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" + integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-explode-assignable-expression" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== +"@babel/helper-call-delegate@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" + integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-create-class-features-plugin@^7.5.5": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz#769711acca889be371e9bc2eb68641d55218021f" - integrity sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng== +"@babel/helper-create-class-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" + integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" -"@babel/helper-define-map@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" - integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== +"@babel/helper-create-regexp-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" + integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== + dependencies: + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" + integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.5.5" + "@babel/helper-function-name" "^7.7.4" + "@babel/types" "^7.7.4" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== +"@babel/helper-explode-assignable-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" + integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== +"@babel/helper-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" + integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== +"@babel/helper-get-function-arity@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" + integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== +"@babel/helper-hoist-variables@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" + integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.7.4" -"@babel/helper-member-expression-to-functions@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" - integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== +"@babel/helper-member-expression-to-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" + integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.7.4" -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== +"@babel/helper-module-imports@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" + integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" - integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.5.5" +"@babel/helper-module-transforms@^7.7.4", "@babel/helper-module-transforms@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835" + integrity sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw== + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-simple-access" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== +"@babel/helper-optimise-call-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" + integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" @@ -161,60 +168,60 @@ dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" - integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.0.tgz#21961d16c6a3c3ab597325c34c465c0887d31c6e" - integrity sha512-W9kao7OBleOjfXtFGgArGRX6eCP0UEcA2ZWEWNkJdRZnHhW4eEbeswbG3EwaRsnQUAEGWYgMq1HsIXuNNNy2eQ== - dependencies: - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.0" - "@babel/types" "^7.6.0" +"@babel/helper-remap-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" + integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-wrap-function" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-replace-supers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" + integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-simple-access@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" + integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== + dependencies: + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-split-export-declaration@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" + integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-wrap-function@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" + integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helpers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" + integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== + dependencies: + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/highlight@^7.0.0": version "7.5.0" @@ -225,459 +232,464 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" - integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== +"@babel/parser@^7.7.4", "@babel/parser@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937" + integrity sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw== -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== +"@babel/plugin-proposal-async-generator-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" + integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" -"@babel/plugin-proposal-class-properties@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" - integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== +"@babel/plugin-proposal-class-properties@^7.7.0": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" + integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.5.5" + "@babel/helper-create-class-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-dynamic-import@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" - integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== +"@babel/plugin-proposal-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" + integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== +"@babel/plugin-proposal-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" + integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.7.4" -"@babel/plugin-proposal-object-rest-spread@^7.4.4", "@babel/plugin-proposal-object-rest-spread@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58" - integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw== +"@babel/plugin-proposal-object-rest-spread@^7.6.2", "@babel/plugin-proposal-object-rest-spread@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz#9f27075004ab99be08c5c1bd653a2985813cb370" + integrity sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== +"@babel/plugin-proposal-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" + integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" - integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== +"@babel/plugin-proposal-unicode-property-regex@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz#433fa9dac64f953c12578b29633f456b68831c4e" + integrity sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== +"@babel/plugin-syntax-async-generators@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" + integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-dynamic-import@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" + integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== +"@babel/plugin-syntax-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" + integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== +"@babel/plugin-syntax-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" + integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== +"@babel/plugin-syntax-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" + integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== +"@babel/plugin-syntax-top-level-await@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" + integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" - integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== +"@babel/plugin-transform-arrow-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" + integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== dependencies: - "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== +"@babel/plugin-transform-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" + integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== dependencies: + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" -"@babel/plugin-transform-block-scoping@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.0.tgz#c49e21228c4bbd4068a35667e6d951c75439b1dc" - integrity sha512-tIt4E23+kw6TgL/edACZwP1OUKrjOTyMrFMLoT5IOFrfMRabCgekjqFd5o6PaAMildBu46oFkekIdMuGkkPEpA== +"@babel/plugin-transform-block-scoped-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" + integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" + integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" - integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== +"@babel/plugin-transform-classes@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" + integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-define-map" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== +"@babel/plugin-transform-computed-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" + integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.4.4", "@babel/plugin-transform-destructuring@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" - integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== +"@babel/plugin-transform-destructuring@^7.6.0", "@babel/plugin-transform-destructuring@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" + integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" - integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== +"@babel/plugin-transform-dotall-regex@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz#3e9713f1b69f339e87fa796b097d73ded16b937b" + integrity sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" -"@babel/plugin-transform-duplicate-keys@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" - integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== +"@babel/plugin-transform-duplicate-keys@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" + integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== +"@babel/plugin-transform-exponentiation-operator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" + integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== +"@babel/plugin-transform-for-of@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" + integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== +"@babel/plugin-transform-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" + integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== dependencies: - "@babel/helper-function-name" "^7.1.0" + "@babel/helper-function-name" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== +"@babel/plugin-transform-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" + integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== +"@babel/plugin-transform-member-expression-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" + integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-amd@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" - integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== +"@babel/plugin-transform-modules-amd@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz#39e0fb717224b59475b306402bb8eedab01e729c" + integrity sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ== dependencies: - "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-module-transforms" "^7.7.5" "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" - integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== +"@babel/plugin-transform-modules-commonjs@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345" + integrity sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q== dependencies: - "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-module-transforms" "^7.7.5" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-simple-access" "^7.7.4" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" - integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== +"@babel/plugin-transform-modules-systemjs@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" + integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-hoist-variables" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== +"@babel/plugin-transform-modules-umd@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" + integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== dependencies: - "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.0.tgz#1e6e663097813bb4f53d42df0750cf28ad3bb3f1" - integrity sha512-jem7uytlmrRl3iCAuQyw8BpB4c4LWvSpvIeXKpMb+7j84lkx4m4mYr5ErAcmN5KM7B6BqrAvRGjBIbbzqCczew== +"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" + integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== dependencies: - regexp-tree "^0.1.13" + "@babel/helper-create-regexp-features-plugin" "^7.7.4" -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== +"@babel/plugin-transform-new-target@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" + integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-object-super@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" - integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== +"@babel/plugin-transform-object-super@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" + integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-replace-supers" "^7.7.4" -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== +"@babel/plugin-transform-parameters@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz#7a884b2460164dc5f194f668332736584c760007" + integrity sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew== dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-call-delegate" "^7.7.4" + "@babel/helper-get-function-arity" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== +"@babel/plugin-transform-property-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" + integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-regenerator@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== +"@babel/plugin-transform-regenerator@^7.7.0", "@babel/plugin-transform-regenerator@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9" + integrity sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw== dependencies: regenerator-transform "^0.14.0" -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== +"@babel/plugin-transform-reserved-words@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" + integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-runtime@^7.4.4": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.0.tgz#85a3cce402b28586138e368fce20ab3019b9713e" - integrity sha512-Da8tMf7uClzwUm/pnJ1S93m/aRXmoYNDD7TkHua8xBDdaAs54uZpTWvEt6NGwmoVMb9mZbntfTqmG2oSzN/7Vg== +"@babel/plugin-transform-runtime@^7.6.2": + version "7.7.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.6.tgz#4f2b548c88922fb98ec1c242afd4733ee3e12f61" + integrity sha512-tajQY+YmXR7JjTwRvwL4HePqoL3DYxpYXIHKVvrOIvJmeHe2y1w4tz5qz9ObUDC9m76rCzIMPyn4eERuwA4a4A== dependencies: - "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== +"@babel/plugin-transform-shorthand-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" + integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" - integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== +"@babel/plugin-transform-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" + integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== +"@babel/plugin-transform-sticky-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" + integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== +"@babel/plugin-transform-template-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" + integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== +"@babel/plugin-transform-typeof-symbol@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" + integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-unicode-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" - integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== +"@babel/plugin-transform-unicode-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" + integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" -"@babel/preset-env@^7.4.5": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.0.tgz#aae4141c506100bb2bfaa4ac2a5c12b395619e50" - integrity sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg== +"@babel/preset-env@^7.7.1": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.7.tgz#c294167b91e53e7e36d820e943ece8d0c7fe46ac" + integrity sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg== dependencies: - "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-dynamic-import" "^7.5.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.5.5" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.5.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.6.0" - "@babel/plugin-transform-classes" "^7.5.5" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.6.0" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.6.0" - "@babel/plugin-transform-modules-systemjs" "^7.5.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.0" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.6.0" + "@babel/plugin-proposal-async-generator-functions" "^7.7.4" + "@babel/plugin-proposal-dynamic-import" "^7.7.4" + "@babel/plugin-proposal-json-strings" "^7.7.4" + "@babel/plugin-proposal-object-rest-spread" "^7.7.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.7.7" + "@babel/plugin-syntax-async-generators" "^7.7.4" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + "@babel/plugin-syntax-json-strings" "^7.7.4" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + "@babel/plugin-syntax-top-level-await" "^7.7.4" + "@babel/plugin-transform-arrow-functions" "^7.7.4" + "@babel/plugin-transform-async-to-generator" "^7.7.4" + "@babel/plugin-transform-block-scoped-functions" "^7.7.4" + "@babel/plugin-transform-block-scoping" "^7.7.4" + "@babel/plugin-transform-classes" "^7.7.4" + "@babel/plugin-transform-computed-properties" "^7.7.4" + "@babel/plugin-transform-destructuring" "^7.7.4" + "@babel/plugin-transform-dotall-regex" "^7.7.7" + "@babel/plugin-transform-duplicate-keys" "^7.7.4" + "@babel/plugin-transform-exponentiation-operator" "^7.7.4" + "@babel/plugin-transform-for-of" "^7.7.4" + "@babel/plugin-transform-function-name" "^7.7.4" + "@babel/plugin-transform-literals" "^7.7.4" + "@babel/plugin-transform-member-expression-literals" "^7.7.4" + "@babel/plugin-transform-modules-amd" "^7.7.5" + "@babel/plugin-transform-modules-commonjs" "^7.7.5" + "@babel/plugin-transform-modules-systemjs" "^7.7.4" + "@babel/plugin-transform-modules-umd" "^7.7.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" + "@babel/plugin-transform-new-target" "^7.7.4" + "@babel/plugin-transform-object-super" "^7.7.4" + "@babel/plugin-transform-parameters" "^7.7.7" + "@babel/plugin-transform-property-literals" "^7.7.4" + "@babel/plugin-transform-regenerator" "^7.7.5" + "@babel/plugin-transform-reserved-words" "^7.7.4" + "@babel/plugin-transform-shorthand-properties" "^7.7.4" + "@babel/plugin-transform-spread" "^7.7.4" + "@babel/plugin-transform-sticky-regex" "^7.7.4" + "@babel/plugin-transform-template-literals" "^7.7.4" + "@babel/plugin-transform-typeof-symbol" "^7.7.4" + "@babel/plugin-transform-unicode-regex" "^7.7.4" + "@babel/types" "^7.7.4" browserslist "^4.6.0" - core-js-compat "^3.1.1" + core-js-compat "^3.6.0" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/runtime@^7.4.2", "@babel/runtime@^7.4.5": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.0.tgz#4fc1d642a9fd0299754e8b5de62c631cf5568205" - integrity sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ== +"@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.7.tgz#194769ca8d6d7790ec23605af9ee3e42a0aa79cf" + integrity sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA== dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" - integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== +"@babel/template@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" + integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.0" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.0.tgz#389391d510f79be7ce2ddd6717be66d3fed4b516" - integrity sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ== +"@babel/traverse@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" + integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.0" + "@babel/generator" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0": - version "7.6.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" - integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== +"@babel/types@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" + integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== dependencies: esutils "^2.0.2" lodash "^4.17.13" to-fast-properties "^2.0.0" -"@coreui/coreui-free-bootstrap-admin-template@https://github.com/coreui/coreui-free-bootstrap-admin-template.git": +"@coreui/coreui-free-bootstrap-admin-template@https://github.com/coreui/coreui-free-bootstrap-admin-template.git#master": version "2.1.15" - resolved "https://github.com/coreui/coreui-free-bootstrap-admin-template.git#0cb1d81a8471ff4b6eb80c41b45c61a8e2ab3ef6" + resolved "https://github.com/coreui/coreui-free-bootstrap-admin-template.git#112721fb4be70038e8eb808d27e65d19cb823310" dependencies: "@coreui/coreui" "^2.1.12" "@coreui/coreui-plugin-chartjs-custom-tooltips" "^1.3.1" @@ -707,14 +719,14 @@ integrity sha512-yeeoWp+bNS84nP1977Y8UCiQ9pssO+f4QuVj3i0/gYZFjjvOgxx0dnyWhtowD5sLYnCRMPlPpqyjwXze3SlkYg== "@coreui/coreui@^2.1.12": - version "2.1.12" - resolved "https://registry.yarnpkg.com/@coreui/coreui/-/coreui-2.1.12.tgz#778b03a59984becb5441410a7595f6a064d388cd" - integrity sha512-wO2olnHWyvzW6CHaiU4oRq/tomuuHItiifcyU40UBN00vACjBUH4kpxfhZGGjwM031GRZRL6LnAWzwZb9wg8Lw== + version "2.1.16" + resolved "https://registry.yarnpkg.com/@coreui/coreui/-/coreui-2.1.16.tgz#93efb7d903bcd53092cc4bcc31ef8703de565457" + integrity sha512-1YOnQAlcX2bIgnaX3k9GKaN4lD+wKam7tdDfFj7/ZQTN1XG3dwDELHp4aagWQs78ix2CCO1LyeLrzGpsMcLW3Q== dependencies: "@coreui/coreui-plugin-npm-postinstall" "^1.0.2" bootstrap "^4.3.1" - core-js "^3.1.3" - regenerator-runtime "^0.13.2" + core-js "^3.3.4" + regenerator-runtime "^0.13.3" "@coreui/icons@0.3.0": version "0.3.0" @@ -727,71 +739,77 @@ integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== "@rails/actioncable@^6.0.0-alpha": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-6.0.0.tgz#8bff9c902be1531ef7a9e191562e9771efcfdfe1" - integrity sha512-DieouotYHpI6k2EGTCnh1eMvD3W8p3zqjWXEYj4z0khJ+A0qQ5tHxihjTEkio54MVwqHt1DcpUm2woh2n/alCA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-6.0.2.tgz#bcba9bcd6ee09a47c6628336e07399a68ca87814" + integrity sha512-vN78gohsXPlC5jxBHlmiwkUI9bv6SulcZaE72kAIg/G4ou+wTdiMWPJK1bf2IxUNf+sfOjhl+tbRmY4AzJcgrw== -"@rails/actiontext@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@rails/actiontext/-/actiontext-6.0.1.tgz#62400c48262c71b90e9808718609eb5dd59f4ac6" - integrity sha512-JP+nW17rPVX4CtnJE++0hDKfgtQekxN3avYO9XzQ/Ta/G+y32BhCYZ/SR4AyL/b+sv48l2a89TXGHyX6tTM+3A== +"@rails/actiontext@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@rails/actiontext/-/actiontext-6.0.2.tgz#1ad5ecfe5a64affb9cca7908a996c635cb0b2224" + integrity sha512-fxCGPRud14H4LTlAMLCtXDvhrNA9xswg2LwTYMEHzLQ0EPz2VU5ixDLygtYQymVq+9GtZ6CFGsvbOT0HhUJsGQ== dependencies: "@rails/activestorage" "^6.0.0-alpha" "@rails/activestorage@^6.0.0-alpha": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@rails/activestorage/-/activestorage-6.0.0.tgz#6d9cc98f3dcf195c38ca65e80acd2e759336dd7a" - integrity sha512-RZqTVlUYSWcI88pSJ7ImuTtDYQvqVc2PNuOo+5R3hcVupD+d2TO8xmluqQ5TvByjPqKX4acEK0mjEIK5ip9kCg== + version "6.0.2" + resolved "https://registry.yarnpkg.com/@rails/activestorage/-/activestorage-6.0.2.tgz#3882da2716d1f21091840fc52b71091d406a9c43" + integrity sha512-X0uGBLNsSKvVw5n93rH7k+7rbxc3Cq7p0ShiQbrk1cN0xflGjElzEJRY3okZZHsKkCV+h6rFCk0BOBVrLSrJ0A== dependencies: spark-md5 "^3.0.0" "@rails/ujs@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.0.1.tgz#5eb013bd7f18a1cc7c314602d3b4d68302e20b60" - integrity sha512-IwUGMGke2u5W/hkJLOSU5xcQT3Y0gjIdiEsG27kHyLvsPOzdABKeAD8l37j6romhzeCmM56Wv52OGqSueUmyig== + version "6.0.2" + resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.0.2.tgz#8d32452d51c5e115374a218fb5475803dc17f4c0" + integrity sha512-KSQjJG8yzSWC1IT+UtFQglefABU37hpJ7uAz39K1/iWtoaJaI9ydGIaxxpJBT/PmYv4kS6lCSjXq13DELeJocw== -"@rails/webpacker@https://github.com/rails/webpacker": - version "4.0.7" - resolved "https://github.com/rails/webpacker#d0fa1d1351bfc5bb53e76b94ce6f33cf2175a879" +"@rails/webpacker@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-4.2.2.tgz#b9dd3235fdf4d0badbda8e33f6ebee742a9f3abb" + integrity sha512-jzw7qMfSCLdrt9j1X+2IvXjf63huXYqeIPwLujXa9pYFvxtEstbVYRDivuLhiDokzih+PrYpB+dLTGBNgVsnpw== dependencies: - "@babel/core" "^7.4.5" - "@babel/plugin-proposal-class-properties" "^7.4.4" - "@babel/plugin-proposal-object-rest-spread" "^7.4.4" + "@babel/core" "^7.7.2" + "@babel/plugin-proposal-class-properties" "^7.7.0" + "@babel/plugin-proposal-object-rest-spread" "^7.6.2" "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.4.4" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-runtime" "^7.4.4" - "@babel/preset-env" "^7.4.5" - "@babel/runtime" "^7.4.5" + "@babel/plugin-transform-destructuring" "^7.6.0" + "@babel/plugin-transform-regenerator" "^7.7.0" + "@babel/plugin-transform-runtime" "^7.6.2" + "@babel/preset-env" "^7.7.1" + "@babel/runtime" "^7.7.2" babel-loader "^8.0.6" - babel-plugin-dynamic-import-node "^2.2.0" - babel-plugin-macros "^2.5.0" + babel-plugin-dynamic-import-node "^2.3.0" + babel-plugin-macros "^2.6.1" case-sensitive-paths-webpack-plugin "^2.2.0" - compression-webpack-plugin "^2.0.0" - core-js "^3.1.3" - css-loader "^2.1.1" - file-loader "^3.0.1" - flatted "^2.0.0" - glob "^7.1.4" + compression-webpack-plugin "^3.0.0" + core-js "^3.4.0" + css-loader "^3.2.0" + file-loader "^4.2.0" + flatted "^2.0.1" + glob "^7.1.6" js-yaml "^3.13.1" - mini-css-extract-plugin "^0.7.0" - node-sass "^4.12.0" - optimize-css-assets-webpack-plugin "^5.0.1" + mini-css-extract-plugin "^0.8.0" + node-sass "^4.13.0" + optimize-css-assets-webpack-plugin "^5.0.3" path-complete-extname "^1.0.0" - pnp-webpack-plugin "^1.4.3" + pnp-webpack-plugin "^1.5.0" postcss-flexbugs-fixes "^4.1.0" postcss-import "^12.0.1" postcss-loader "^3.0.0" - postcss-preset-env "^6.6.0" + postcss-preset-env "^6.7.0" postcss-safe-parser "^4.0.1" - regenerator-runtime "^0.13.2" - sass-loader "^7.1.0" - style-loader "^0.23.1" - terser-webpack-plugin "^1.3.0" - webpack "^4.32.2" + regenerator-runtime "^0.13.3" + sass-loader "7.3.1" + style-loader "^1.0.0" + terser-webpack-plugin "^2.2.1" + webpack "^4.41.2" webpack-assets-manifest "^3.1.1" - webpack-cli "^3.3.2" - webpack-sources "^1.3.0" + webpack-cli "^3.3.10" + webpack-sources "^1.4.3" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== "@types/events@*": version "3.0.0" @@ -813,9 +831,14 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "12.7.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.4.tgz#64db61e0359eb5a8d99b55e05c729f130a678b04" - integrity sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ== + version "12.12.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.21.tgz#aa44a6363291c7037111c47e4661ad210aded23f" + integrity sha512-8sRGhbpU+ck1n0PGAUgVrWrWdjSW2aqNeyC15W88GRsMpSwzv6RJGlLhE7s2RhVSOdyDmxbqlWSeThq4/7xqlA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/q@^1.5.1": version "1.5.2" @@ -997,15 +1020,23 @@ acorn-jsx@^5.1.0: integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== acorn@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" - integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + version "6.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" + integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== acorn@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== +aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1016,7 +1047,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== @@ -1026,6 +1057,16 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.5.5: + version "6.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9" + integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA== + 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" + alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -1085,6 +1126,14 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.0.tgz#5681f0dcf7ae5880a7841d8831c4724ed9cc0172" + integrity sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1144,12 +1193,13 @@ array-flatten@^2.1.0: integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" array-union@^1.0.1: version "1.0.2" @@ -1168,6 +1218,14 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.flat@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -1241,23 +1299,23 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.1.tgz#51967a02d2d2300bb01866c1611ec8348d355a47" - integrity sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw== + version "9.7.3" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.3.tgz#fd42ed03f53de9beb4ca0d61fb4f7268a9bb50b4" + integrity sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q== dependencies: - browserslist "^4.6.3" - caniuse-lite "^1.0.30000980" + browserslist "^4.8.0" + caniuse-lite "^1.0.30001012" chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.17" - postcss-value-parser "^4.0.0" + postcss "^7.0.23" + postcss-value-parser "^4.0.2" aws-sign2@~0.7.0: version "0.7.0" @@ -1265,9 +1323,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== babel-loader@^8.0.6: version "8.0.6" @@ -1279,21 +1337,21 @@ babel-loader@^8.0.6: mkdirp "^0.5.1" pify "^4.0.1" -babel-plugin-dynamic-import-node@^2.2.0, babel-plugin-dynamic-import-node@^2.3.0: +babel-plugin-dynamic-import-node@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== dependencies: object.assign "^4.1.0" -babel-plugin-macros@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz#41f7ead616fc36f6a93180e89697f69f51671181" - integrity sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ== +babel-plugin-macros@^2.6.1: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== dependencies: - "@babel/runtime" "^7.4.2" - cosmiconfig "^5.2.0" - resolve "^1.10.0" + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" balanced-match@^1.0.0: version "1.0.0" @@ -1340,6 +1398,13 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -1348,9 +1413,9 @@ block-stream@*: inherits "~2.0.0" bluebird@^3.5.5: - version "3.7.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" - integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" @@ -1391,9 +1456,9 @@ boolbase@^1.0.0, boolbase@~1.0.0: integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= bootstrap@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.3.1.tgz#280ca8f610504d99d7b6b4bfc4b68cec601704ac" - integrity sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag== + version "4.4.1" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.4.1.tgz#8582960eea0c5cd2bede84d8b0baf3789c3e8b01" + integrity sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA== brace-expansion@^1.1.7: version "1.1.11" @@ -1483,14 +1548,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.3, browserslist@^4.6.4, browserslist@^4.7.3: - version "4.8.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.0.tgz#6f06b0f974a7cc3a84babc2ccc56493668e3c789" - integrity sha512-HYnxc/oLRWvJ3TsGegR0SRL/UDnknGq2s/a8dYYEO+kOQ9m9apKoS5oiathLKZdh/e9uE+/J3j92qPlGD/vTqA== +browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.4, browserslist@^4.8.0, browserslist@^4.8.2: + version "4.8.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.2.tgz#b45720ad5fbc8713b7253c20766f701c9a694289" + integrity sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA== dependencies: - caniuse-lite "^1.0.30001012" - electron-to-chromium "^1.3.317" - node-releases "^1.1.41" + caniuse-lite "^1.0.30001015" + electron-to-chromium "^1.3.322" + node-releases "^1.1.42" buffer-from@^1.0.0: version "1.1.1" @@ -1508,9 +1573,9 @@ buffer-xor@^1.0.3: integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -1531,16 +1596,17 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^11.2.0: - version "11.3.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" - integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== +cacache@^12.0.2: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== dependencies: bluebird "^3.5.5" chownr "^1.1.1" figgy-pudding "^3.5.1" glob "^7.1.4" graceful-fs "^4.1.15" + infer-owner "^1.0.3" lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" @@ -1551,26 +1617,29 @@ cacache@^11.2.0: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^12.0.2: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== +cacache@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" + integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" + chownr "^1.1.2" figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" lru-cache "^5.1.1" - mississippi "^3.0.0" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" mkdirp "^0.5.1" move-concurrently "^1.0.1" + p-map "^3.0.0" promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" unique-filename "^1.1.1" - y18n "^4.0.0" cache-base@^1.0.1: version "1.0.1" @@ -1629,7 +1698,7 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= -camelcase@^5.0.0, camelcase@^5.2.0: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -1644,15 +1713,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30000981: - version "1.0.30001005" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001005.tgz#823054210be638c725521edcb869435dae46728d" - integrity sha512-g78miZm1Z5njjYR216a5812oPiLgV1ssndgGxITHWUopmjUrCswMisA0a2kSB7a0vZRox6JOKhM51+efmYN8Mg== - -caniuse-lite@^1.0.30001012: - version "1.0.30001012" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001012.tgz#653ec635e815b9e0fb801890923b0c2079eb34ec" - integrity sha512-7RR4Uh04t9K1uYRWzOJmzplgEOAXbfK72oVNokCdMzA67trrhPzy93ahKk1AWHiA0c58tD2P+NHqxrA8FZ+Trg== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001015: + version "1.0.30001016" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz#16ea48d7d6e8caf3cad3295c2d746fe38c4e7f66" + integrity sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA== case-sensitive-paths-webpack-plugin@^2.2.0: version "2.2.0" @@ -1684,15 +1748,23 @@ chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chart.js@^2.8.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.9.2.tgz#5f7397f2fc33ca406836dbaed3cc39943bbb9f80" - integrity sha512-AagP9h27gU7hhx8F64BOFpNZGV0R1Pz1nhsi0M1+KLhtniX6ElqLl0z0obKSiuGMl9tcRe6ZhruCGCJWmH6snQ== + version "2.9.3" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.9.3.tgz#ae3884114dafd381bc600f5b35a189138aac1ef7" + integrity sha512-+2jlOobSk52c1VU6fzkh3UwqHMdSlgH1xFv9FKMqHiNCpXsGPQa/+81AFa+i3jZ253Mq9aAycPwDjnn1XbRNNw== dependencies: chartjs-color "^2.1.0" moment "^2.10.2" @@ -1731,7 +1803,7 @@ chokidar@^2.0.2, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1: +chownr@^1.1.1, chownr@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== @@ -1761,6 +1833,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -1851,12 +1928,19 @@ color-convert@^1.9.0, color-convert@^1.9.1, color-convert@^1.9.3: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -1923,16 +2007,16 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.40.0 < 2" -compression-webpack-plugin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-2.0.0.tgz#46476350c1eb27f783dccc79ac2f709baa2cffbc" - integrity sha512-bDgd7oTUZC8EkRx8j0sjyCfeiO+e5sFcfgaFcjVhfQf5lLya7oY2BczxcJ7IUuVjz5m6fy8IECFmVFew3xLk8Q== +compression-webpack-plugin@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-3.1.0.tgz#9f510172a7b5fae5aad3b670652e8bd7997aeeca" + integrity sha512-iqTHj3rADN4yHwXMBrQa/xrncex/uEQy8QHlaTKxGchT/hC0SdlJlmL/5eRqffmWq2ep0/Romw6Ld39JjTR/ug== dependencies: - cacache "^11.2.0" - find-cache-dir "^2.0.0" + cacache "^13.0.1" + find-cache-dir "^3.0.0" neo-async "^2.5.0" - schema-utils "^1.0.0" - serialize-javascript "^1.4.0" + schema-utils "^2.6.1" + serialize-javascript "^2.1.2" webpack-sources "^1.0.1" compression@^1.7.4: @@ -1968,13 +2052,18 @@ connect-history-api-fallback@^1.6.0: resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== -console-browserify@1.1.x, console-browserify@^1.1.0: +console-browserify@1.1.x: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= dependencies: date-now "^0.1.4" +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -2002,7 +2091,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.1.0: +convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -2036,25 +2125,25 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.1.1: - version "3.4.5" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.5.tgz#f072059c0b98ad490eacac082296cfe241af1b58" - integrity sha512-rYVvzvKJDKoefdAC+q6VP63vp5hMmeVONCi9pVUbU1qRrtVrmAk/nPhnRg+i+XFd775m1hpG2Yd5RY3X45ccuw== +core-js-compat@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.0.tgz#4eb6cb69d03d99159ed7c860cd5fcf7d23a62ea9" + integrity sha512-Z3eCNjGgoYluH89Jt4wVkfYsc/VdLrA2/woX5lm0isO/pCT+P+Y+o65bOuEnjDJLthdwTBxbCVzptTXtc18fJg== dependencies: - browserslist "^4.7.3" - semver "^6.3.0" + browserslist "^4.8.2" + semver "7.0.0" -core-js@^3.1.3, core-js@^3.1.4: - version "3.4.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.4.5.tgz#3dda65611d95699b5eb7742ea451ea052d37aa65" - integrity sha512-OuvejWH6vIaUo59Ndlh89purNm4DCIy/v3QoYlcGnn+PkYI8BhNHfCuAESrWX+ZPfq9JccVJ+XXgOMy77PJexg== +core-js@^3.1.4, core-js@^3.3.4, core-js@^3.4.0: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" + integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.0.0, cosmiconfig@^5.2.0: +cosmiconfig@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -2064,6 +2153,17 @@ cosmiconfig@^5.0.0, cosmiconfig@^5.2.0: js-yaml "^3.13.1" parse-json "^4.0.0" +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" @@ -2159,22 +2259,23 @@ css-has-pseudo@^0.10.0: postcss "^7.0.6" postcss-selector-parser "^5.0.0-rc.4" -css-loader@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea" - integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w== +css-loader@^3.2.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.4.1.tgz#dfb7968aa9bffb26bd20375afdffe77d5a234b77" + integrity sha512-+ybmv7sVxxNEenQhkifQDvny/1iNQM7YooJbSfVUdQQvisyg1aKIqgGjCjoFSyVLJMp17z9rfZFQaR5HGHcMbw== dependencies: - camelcase "^5.2.0" - icss-utils "^4.1.0" + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" loader-utils "^1.2.3" normalize-path "^3.0.0" - postcss "^7.0.14" + postcss "^7.0.23" postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^2.0.6" - postcss-modules-scope "^2.1.0" - postcss-modules-values "^2.0.0" - postcss-value-parser "^3.3.0" - schema-utils "^1.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.1.1" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.0.2" + schema-utils "^2.6.0" css-prefers-color-scheme@^3.1.1: version "3.1.1" @@ -2198,21 +2299,13 @@ css-select@^2.0.0: domutils "^1.7.0" nth-check "^1.0.2" -css-tree@1.0.0-alpha.29: - version "1.0.0-alpha.29" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" - integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -css-tree@1.0.0-alpha.33: - version "1.0.0-alpha.33" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.33.tgz#970e20e5a91f7a378ddd0fc58d0b6c8d4f3be93e" - integrity sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w== +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== dependencies: mdn-data "2.0.4" - source-map "^0.5.3" + source-map "^0.6.1" css-unit-converter@^1.1.1: version "1.1.1" @@ -2315,12 +2408,12 @@ cssnano@^4.1.10: is-resolvable "^1.0.0" postcss "^7.0.0" -csso@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" - integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== +csso@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d" + integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg== dependencies: - css-tree "1.0.0-alpha.29" + css-tree "1.0.0-alpha.37" currently-unhandled@^0.4.1: version "0.4.1" @@ -2346,7 +2439,7 @@ date-now@^0.1.4: resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2378,9 +2471,9 @@ decode-uri-component@^0.2.0: integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= deep-equal@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745" - integrity sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== dependencies: is-arguments "^1.0.4" is-date-object "^1.0.1" @@ -2470,9 +2563,9 @@ depd@~1.1.2: integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -2617,15 +2710,15 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.317: - version "1.3.320" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.320.tgz#3b101b4ba1db2f97da72f187826b4e78c30f30fd" - integrity sha512-GVyRfGaKs/Vsf915WDaK5NG9vfud8nJFyapyQcrVS+sp8IeMpfml/YMvhthXsSOLlc0rzwdtnkNJE/+q4EPbTA== +electron-to-chromium@^1.3.322: + version "1.3.322" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" + integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== elliptic@^6.0.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" - integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -2704,23 +2797,24 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.0.tgz#d3a26dc9c3283ac9750dca569586e976d9dcc06d" - integrity sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg== +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0.tgz#f42a517d0036a5591dbb2c463591dc8bb50309b1" + integrity sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug== dependencies: - es-to-primitive "^1.2.0" + es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.0" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-inspect "^1.6.0" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" object-keys "^1.1.1" - string.prototype.trimleft "^2.1.0" - string.prototype.trimright "^2.1.0" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" -es-to-primitive@^1.2.0: +es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== @@ -2745,19 +2839,19 @@ eslint-config-standard@^14.1.0: integrity sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA== eslint-import-resolver-node@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + version "0.3.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" + integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== dependencies: debug "^2.6.9" - resolve "^1.5.0" + resolve "^1.13.1" -eslint-module-utils@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" - integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== +eslint-module-utils@^2.4.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz#cdf0b40d623032274ccd2abd7e64c4e524d6e19c" + integrity sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw== dependencies: - debug "^2.6.8" + debug "^2.6.9" pkg-dir "^2.0.0" eslint-plugin-es@^2.0.0: @@ -2769,21 +2863,22 @@ eslint-plugin-es@^2.0.0: regexpp "^3.0.0" eslint-plugin-import@^2.16.0: - version "2.18.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" - integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== + version "2.19.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz#5654e10b7839d064dd0d46cd1b88ec2133a11448" + integrity sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw== dependencies: array-includes "^3.0.3" + array.prototype.flat "^1.2.1" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.0" + eslint-module-utils "^2.4.1" has "^1.0.3" minimatch "^3.0.4" object.values "^1.1.0" read-pkg-up "^2.0.0" - resolve "^1.11.0" + resolve "^1.12.0" eslint-plugin-node@^10.0.0: version "10.0.0" @@ -2836,9 +2931,9 @@ eslint-visitor-keys@^1.1.0: integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== eslint@^6.7.2: - version "6.7.2" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.7.2.tgz#c17707ca4ad7b2d8af986a33feba71e18a9fecd1" - integrity sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng== + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -2927,9 +3022,9 @@ eventemitter3@^4.0.0: integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== eventsource@^1.0.7: version "1.0.7" @@ -3078,10 +3173,15 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@~2.0.6: version "2.0.6" @@ -3121,13 +3221,18 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -file-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" - integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== +file-loader@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" + integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== dependencies: - loader-utils "^1.0.2" - schema-utils "^1.0.0" + loader-utils "^1.2.3" + schema-utils "^2.5.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fill-range@^4.0.0: version "4.0.0" @@ -3161,6 +3266,15 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.0.0, find-cache-dir@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.2.0.tgz#e7fe44c1abc1299f516146e563108fd1006c1874" + integrity sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.0" + pkg-dir "^4.1.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -3183,6 +3297,14 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + findup-sync@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" @@ -3214,15 +3336,15 @@ flatpickr@^4.6.3: resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.3.tgz#15a8b76b6e34e3a072861250503a5995b9d3bc60" integrity sha512-007VucCkqNOMMb9ggRLNuJowwaJcyOh4sKAFcdGfahfGc7JQbf94zSzjdBq/wVyHWUEs5o3+idhFZ0wbZMRmVQ== -flatted@^2.0.0: +flatted@^2.0.0, flatted@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== flush-write-stream@^1.0.0: version "1.1.1" @@ -3295,6 +3417,13 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" +fs-minipass@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.0.0.tgz#a6415edab02fae4b9e9230bc87ee2e4472003cd1" + integrity sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A== + dependencies: + minipass "^3.0.0" + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -3311,12 +3440,13 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + version "1.2.11" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" + integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== dependencies: + bindings "^1.5.0" nan "^2.12.1" - node-pre-gyp "^0.12.0" + node-pre-gyp "*" fstream@^1.0.0, fstream@^1.0.12: version "1.0.12" @@ -3440,10 +3570,10 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1, glob@~7.1.2: - version "7.1.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" - integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ== +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1, glob@~7.1.2: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3512,15 +3642,15 @@ globby@^6.1.0: pinkie-promise "^2.0.0" globule@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" - integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== + version "1.3.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.0.tgz#41d0e9fb44afd4b80d93a23263714f90b3dec904" + integrity sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg== dependencies: glob "~7.1.1" lodash "~4.17.10" minimatch "~3.0.2" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -3560,6 +3690,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" @@ -3601,7 +3736,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.0, has@^1.0.1, has@^1.0.3: +has@^1.0.0, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -3791,12 +3926,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -icss-utils@^4.1.0: +icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== @@ -3845,10 +3975,10 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" - integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== +import-fresh@^3.0.0, import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -3885,12 +4015,17 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -infer-owner@^1.0.3: +infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== @@ -3924,9 +4059,9 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== inquirer@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" - integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ== + version "7.0.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.3.tgz#f9b4cd2dff58b9f73e8d43759436ace15bed4567" + integrity sha512-+OiOVeVydu4hnCGLCSX+wedovR/Yzskv9BFqUNNKq9uU2qg7LCcCo3R86S2E7WLo0y/x2pnEZfZe1CoYnORUAw== dependencies: ansi-escapes "^4.2.1" chalk "^2.4.2" @@ -3937,7 +4072,7 @@ inquirer@^7.0.0: lodash "^4.17.15" mute-stream "0.0.8" run-async "^2.2.0" - rxjs "^6.4.0" + rxjs "^6.5.3" string-width "^4.1.0" strip-ansi "^5.1.0" through "^2.3.6" @@ -3955,10 +4090,10 @@ interpret@1.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== -intl-tel-input@^16.0.7: - version "16.0.7" - resolved "https://registry.yarnpkg.com/intl-tel-input/-/intl-tel-input-16.0.7.tgz#e9d69b608978fec846f93369b4bf4c6880641e5f" - integrity sha512-Ufus9DzgxUGt5NNSO5CNATusIvUkvMvjE6s4z9g+oeOQolw8zOul5ktMc8xjqPfZsNaWC2YmfcSFjHFjFTcyhg== +intl-tel-input@^16.0.8: + version "16.0.8" + resolved "https://registry.yarnpkg.com/intl-tel-input/-/intl-tel-input-16.0.8.tgz#b723a10774e5c09a450a4ffef205a722b058a0fc" + integrity sha512-/6psSwgqI9WvbeBr6d9Ac8tcprboPJovk6qqLuSmAxQzzGaGmk4D/lwWeYpesW75DfWRnooMvM1L8YKK72U4mw== invariant@^2.2.2: version "2.2.4" @@ -4048,10 +4183,10 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== is-color-stop@^1.0.0: version "1.1.0" @@ -4080,9 +4215,9 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-descriptor@^0.1.0: version "0.1.6" @@ -4227,12 +4362,12 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= +is-regex@^1.0.4, is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== dependencies: - has "^1.0.1" + has "^1.0.3" is-resolvable@^1.0.0: version "1.1.0" @@ -4244,6 +4379,11 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + is-svg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" @@ -4310,6 +4450,14 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= +jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + jquery.maskedinput@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jquery.maskedinput/-/jquery.maskedinput-1.4.1.tgz#3ea8f4cdc4eafce7354c27b66a73d0f44defc327" @@ -4359,9 +4507,9 @@ jsesc@~0.5.0: integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= jshint@^2.9.6: - version "2.10.2" - resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.10.2.tgz#ed6626c4f8223c98e94aaea62767435427a49a3d" - integrity sha512-e7KZgCSXMJxznE/4WULzybCMNXNAd/bf5TSrvVEq78Q/K8ZwFpmBqQeDtNiHc3l49nV4E/+YeHU/JZjSUIrLAA== + version "2.11.0" + resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.11.0.tgz#7f3d99820b8b653eaaec7015a563b2d8101cbbc8" + integrity sha512-ooaD/hrBPhu35xXW4gn+o3SOuzht73gdBuffgJzrZBJZPGgGiiTvJEgTyxFvBO2nz0+X1G6etF8SzUODTlLY6Q== dependencies: cli "~1.0.0" console-browserify "1.1.x" @@ -4410,9 +4558,9 @@ json5@^1.0.1: minimist "^1.2.0" json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== dependencies: minimist "^1.2.0" @@ -4485,6 +4633,11 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + linkify-it@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" @@ -4543,6 +4696,13 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -4598,7 +4758,7 @@ lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.1 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -loglevel@^1.6.4: +loglevel@^1.6.6: version "1.6.6" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== @@ -4641,6 +4801,13 @@ make-dir@^2.0.0: pify "^4.0.1" semver "^5.6.0" +make-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" + integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== + dependencies: + semver "^6.0.0" + mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" @@ -4724,11 +4891,6 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== -mdn-data@~1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" - integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== - mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -4785,6 +4947,11 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -4817,22 +4984,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== - -"mime-db@>= 1.40.0 < 2": - version "1.41.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.41.0.tgz#9110408e1f6aa1b34aef51f2c9df3caddf46b6a0" - integrity sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw== +mime-db@1.43.0, "mime-db@>= 1.40.0 < 2": + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: - mime-db "1.40.0" + mime-db "1.43.0" mime@1.6.0: version "1.6.0" @@ -4849,10 +5011,10 @@ mimic-fn@^2.0.0, mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz#5ba8290fbb4179a43dd27cca444ba150bee743a0" - integrity sha512-RQIw6+7utTYn8DBGsf/LpRgZCJMpZt+kuawJ/fju0KiOL6nAaTBNmCJwS7HtwSCXfS47gCkmtBFS7HdsquhdxQ== +mini-css-extract-plugin@^0.8.0: + version "0.8.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161" + integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw== dependencies: loader-utils "^1.1.0" normalize-url "1.9.1" @@ -4886,6 +5048,27 @@ minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" + integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== + dependencies: + minipass "^3.0.0" + minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -4894,6 +5077,13 @@ minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" + integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== + dependencies: + yallist "^4.0.0" + minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -5085,10 +5275,10 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== +node-pre-gyp@*: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -5099,19 +5289,19 @@ node-pre-gyp@^0.12.0: rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" - tar "^4" + tar "^4.4.2" -node-releases@^1.1.41: - version "1.1.41" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.41.tgz#57674a82a37f812d18e3b26118aefaf53a00afed" - integrity sha512-+IctMa7wIs8Cfsa8iYzeaLTFwv5Y4r5jZud+4AnfymzeEXKBCavFX0KBgzVaPVqf0ywa6PrO8/b+bPqdwjGBSg== +node-releases@^1.1.42: + version "1.1.45" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.45.tgz#4cf7e9175d71b1317f15ffd68ce63bce1d53e9f2" + integrity sha512-cXvGSfhITKI8qsV116u2FTzH5EWZJfgG7d4cpqwF8I8+1tWpD6AsvvGRKq2onR0DNj1jfqsjkXZsm14JMS7Cyg== dependencies: semver "^6.3.0" -node-sass@^4.12.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" - integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== +node-sass@^4.13.0: + version "4.13.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz#9db5689696bb2eec2c32b98bfea4c7a2e992d0a3" + integrity sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -5120,7 +5310,7 @@ node-sass@^4.12.0: get-stdin "^4.0.1" glob "^7.0.3" in-publish "^2.0.0" - lodash "^4.17.11" + lodash "^4.17.15" meow "^3.7.0" mkdirp "^0.5.1" nan "^2.13.2" @@ -5189,14 +5379,21 @@ normalize-url@^3.0.0: integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== npm-packlist@^1.1.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" - integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== + version "1.4.7" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" + integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -5254,15 +5451,15 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.6.0: +object-inspect@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== object-is@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" - integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= + version "1.0.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" + integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -5287,12 +5484,12 @@ object.assign@^4.1.0: object-keys "^1.0.11" object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" object.pick@^1.3.0: version "1.3.0" @@ -5302,12 +5499,12 @@ object.pick@^1.3.0: isobject "^3.0.1" object.values@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== dependencies: define-properties "^1.1.3" - es-abstract "^1.12.0" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" has "^1.0.3" @@ -5354,7 +5551,7 @@ opn@^5.5.0: dependencies: is-wsl "^1.1.0" -optimize-css-assets-webpack-plugin@^5.0.1: +optimize-css-assets-webpack-plugin@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz#e2f1d4d94ad8c0af8967ebd7cf138dcb1ef14572" integrity sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA== @@ -5449,6 +5646,13 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" +p-limit@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -5463,11 +5667,25 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-retry@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" @@ -5548,6 +5766,16 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -5595,6 +5823,11 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -5636,6 +5869,11 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -5693,7 +5931,14 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pnp-webpack-plugin@^1.4.3: +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pnp-webpack-plugin@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz#62a1cd3068f46d564bb33c56eb250e4d586676eb" integrity sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg== @@ -6044,29 +6289,30 @@ postcss-modules-extract-imports@^2.0.0: dependencies: postcss "^7.0.5" -postcss-modules-local-by-default@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63" - integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA== +postcss-modules-local-by-default@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" + integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - postcss-value-parser "^3.3.1" + icss-utils "^4.1.1" + postcss "^7.0.16" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.0" -postcss-modules-scope@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" - integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== +postcss-modules-scope@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz#33d4fc946602eb5e9355c4165d68a10727689dba" + integrity sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ== dependencies: postcss "^7.0.6" postcss-selector-parser "^6.0.0" -postcss-modules-values@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64" - integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w== +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== dependencies: - icss-replace-symbols "^1.1.0" + icss-utils "^4.0.0" postcss "^7.0.6" postcss-nesting@^7.0.0: @@ -6188,7 +6434,7 @@ postcss-place@^4.0.1: postcss "^7.0.2" postcss-values-parser "^2.0.0" -postcss-preset-env@^6.6.0: +postcss-preset-env@^6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== @@ -6307,7 +6553,7 @@ postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.3, postcss-sel indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.0: +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== @@ -6335,12 +6581,12 @@ postcss-unique-selectors@^4.0.1: postcss "^7.0.0" uniqs "^2.0.0" -postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: +postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.0: +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== @@ -6354,10 +6600,10 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: indexes-of "^1.0.1" uniq "^1.0.1" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.23.tgz#9f9759fad661b15964f3cfc3140f66f1e05eadc1" - integrity sha512-hOlMf3ouRIFXD+j2VJecwssTwbvsPGJVMzupptg+85WA+i7MwyrydmQAgY3R+m0Bc0exunhbJmijy8u8+vufuQ== +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.26" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587" + integrity sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -6417,9 +6663,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24: - version "1.3.1" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.1.tgz#d5aa3873a35ec450bc7db9012ad5a7246f6fc8bd" - integrity sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA== + version "1.7.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" + integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== public-encrypt@^4.0.0: version "4.0.3" @@ -6592,10 +6838,10 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== +"readable-stream@1 || 2", readable-stream@^2.0.1, readable-stream@^2.0.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -6615,6 +6861,19 @@ readable-stream@1.1: isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + 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" + readable-stream@^3.0.6: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" @@ -6653,7 +6912,7 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== -regenerator-runtime@^0.13.2: +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== @@ -6673,17 +6932,13 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.13: - version "0.1.14" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.14.tgz#1abca3675f6cc4b0dee5c959c6c4554ed172dfae" - integrity sha512-59v5A90TAh4cAMyDQEOzcnsu4q7Wb10RsyTjngEnJIZsWYM4siVGu+JmLT1WsxHvOWhiu4YS20XiTuxWMeVoHQ== - regexp.prototype.flags@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" - integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== dependencies: - define-properties "^1.1.2" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" regexpp@^2.0.1: version "2.0.1" @@ -6695,10 +6950,10 @@ regexpp@^3.0.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== -regexpu-core@^4.5.4: - version "4.5.5" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.5.tgz#aaffe61c2af58269b3e516b61a73790376326411" - integrity sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ== +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.1.0" @@ -6708,14 +6963,14 @@ regexpu-core@^4.5.4: unicode-match-property-value-ecmascript "^1.1.0" regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== + version "0.6.2" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96" + integrity sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q== dependencies: jsesc "~0.5.0" @@ -6817,10 +7072,10 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.8.1: + version "1.14.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2" + integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ== dependencies: path-parse "^1.0.6" @@ -6852,7 +7107,7 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -6888,10 +7143,10 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.4.0: - version "6.5.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== +rxjs@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== dependencies: tslib "^1.9.0" @@ -6927,7 +7182,7 @@ sass-graph@^2.2.4: scss-tokenizer "^0.2.3" yargs "^7.0.0" -sass-loader@^7.1.0: +sass-loader@7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.3.1.tgz#a5bf68a04bcea1c13ff842d747150f7ab7d0d23f" integrity sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA== @@ -6952,6 +7207,14 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.1.tgz#eb78f0b945c7bcfa2082b3565e8db3548011dc4f" + integrity sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg== + dependencies: + ajv "^6.10.2" + ajv-keywords "^3.4.1" + scss-tokenizer@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" @@ -6982,7 +7245,12 @@ selfsigned@^1.10.7: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.1.0, semver@^6.1.2, semver@^6.3.0: +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -7011,10 +7279,10 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^1.4.0, serialize-javascript@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== serve-index@^1.9.1: version "1.9.1" @@ -7190,11 +7458,11 @@ source-list-map@^2.0.0: integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" @@ -7220,7 +7488,7 @@ source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -7318,6 +7586,14 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +ssri@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" + integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== + dependencies: + figgy-pudding "^3.5.1" + minipass "^3.1.1" + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -7371,9 +7647,9 @@ stream-http@^2.7.2: xtend "^4.0.0" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== strict-uri-encode@^1.0.0: version "1.1.0" @@ -7415,18 +7691,18 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.trimleft@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" - integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== +string.prototype.trimleft@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" + integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== dependencies: define-properties "^1.1.3" function-bind "^1.1.1" -string.prototype.trimright@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" - integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== +string.prototype.trimright@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== dependencies: define-properties "^1.1.3" function-bind "^1.1.1" @@ -7517,13 +7793,13 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== -style-loader@^0.23.1: - version "0.23.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" - integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== +style-loader@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.1.2.tgz#1b519c19faf548df6182b93e72ea1a4156022c2f" + integrity sha512-0Mpq1ZHFDCNq1F+6avNBgv+7q8V+mWRuzehxyJT+aKgzyN/yfKTwjYqaYwBgx+11UpQxL21zNQfzzlz+JcGURw== dependencies: - loader-utils "^1.1.0" - schema-utils "^1.0.0" + loader-utils "^1.2.3" + schema-utils "^2.0.1" stylehacks@^4.0.0: version "4.0.3" @@ -7553,17 +7829,24 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + svgo@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.0.tgz#bae51ba95ded9a33a36b7c46ce9c359ae9154313" - integrity sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== dependencies: chalk "^2.4.1" coa "^2.0.2" css-select "^2.0.0" css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.33" - csso "^3.5.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" js-yaml "^3.13.1" mkdirp "~0.5.1" object.values "^1.1.0" @@ -7596,7 +7879,7 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" -tar@^4: +tar@^4.4.2: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -7609,25 +7892,39 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -terser-webpack-plugin@^1.3.0, terser-webpack-plugin@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" - integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== +terser-webpack-plugin@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^1.7.0" + serialize-javascript "^2.1.2" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.1.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.1.tgz#f3a469c125d9a0eb52f1e6a7fdff587bd6e35902" - integrity sha512-e05giplw+8sIYh50qXYHZmr0b76O5dOSm9JwSDebGFLri4ItYzxsnumiAK+yuI56R+H7uIjT9KbVEKNkrprzHw== +terser-webpack-plugin@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.1.tgz#6a63c27debc15b25ffd2588562ee2eeabdcab923" + integrity sha512-dNxivOXmDgZqrGxOttBH6B4xaxT4zNC+Xd+2K8jwGDMK5q2CZI+KZMA1AAnSRT+BTRvuzKsDx+fpxzPAmAMVcA== + dependencies: + cacache "^13.0.1" + find-cache-dir "^3.2.0" + jest-worker "^24.9.0" + schema-utils "^2.6.1" + serialize-javascript "^2.1.2" + source-map "^0.6.1" + terser "^4.4.3" + webpack-sources "^1.4.3" + +terser@^4.1.2, terser@^4.4.3: + version "4.6.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.3.tgz#e33aa42461ced5238d352d2df2a67f21921f8d87" + integrity sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -7735,15 +8032,10 @@ trim-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -trix@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/trix/-/trix-1.2.0.tgz#b314101abd1d8d3d5da22ae5b866a719a73a6e21" - integrity sha512-gJ7edoWzcnc9DBjsgeGkmotVpyVhFQTlSOmUYjwFn71NlGixAhNgsu8pVIq/jkIkbk6om0PSetc9cRJm+qU3+A== +trix@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/trix/-/trix-1.2.2.tgz#bb2afacb981df9a6edb49bc66f57427b9728909d" + integrity sha512-xNWwKDa1PG5do/qV3FRESXjM17U5ACB9Ih+x4mylLYfAgmYYTA17ExVdrrA7vCJ5J9nS1tVZFyhVTPgPTtIFVg== "true-case-path@^1.0.2": version "1.0.3" @@ -7959,11 +8251,16 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.3.2: +uuid@^3.0.1: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + v8-compile-cache@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" @@ -8002,9 +8299,9 @@ verror@1.10.0: extsprintf "^1.2.0" vm-browserify@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" - integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== watchpack@^1.6.0: version "1.6.0" @@ -8035,7 +8332,7 @@ webpack-assets-manifest@^3.1.1: tapable "^1.0.0" webpack-sources "^1.0.0" -webpack-cli@^3.3.2: +webpack-cli@^3.3.10: version "3.3.10" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.10.tgz#17b279267e9b4fb549023fae170da8e6e766da13" integrity sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg== @@ -8064,9 +8361,9 @@ webpack-dev-middleware@^3.7.2: webpack-log "^2.0.0" webpack-dev-server@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz#27c3b5d0f6b6677c4304465ac817623c8b27b89c" - integrity sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw== + version "3.10.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz#1ff3e5cccf8e0897aa3f5909c654e623f69b1c0e" + integrity sha512-AGG4+XrrXn4rbZUueyNrQgO4KGnol+0wm3MPdqGLmmA+NofZl3blZQKxZ9BND6RDNuvAK9OMYClhjOSnxpWRoA== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -8083,7 +8380,7 @@ webpack-dev-server@^3.9.0: ip "^1.1.5" is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.4" + loglevel "^1.6.6" opn "^5.5.0" p-retry "^3.0.1" portfinder "^1.0.25" @@ -8110,7 +8407,7 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-sources@^1.0.0, webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: +webpack-sources@^1.0.0, webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -8118,10 +8415,10 @@ webpack-sources@^1.0.0, webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.32.2: - version "4.41.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" - integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== +webpack@^4.41.2: + version "4.41.5" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.5.tgz#3210f1886bce5310e62bb97204d18c263341b77c" + integrity sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" @@ -8143,7 +8440,7 @@ webpack@^4.32.2: node-libs-browser "^2.2.1" schema-utils "^1.0.0" tapable "^1.1.3" - terser-webpack-plugin "^1.4.1" + terser-webpack-plugin "^1.4.3" watchpack "^1.6.0" webpack-sources "^1.4.1" @@ -8263,6 +8560,18 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2" + integrity sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw== + dependencies: + "@babel/runtime" "^7.6.3" + yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"