From a9873f9fcf122c0ec1148eae854cd9f8a4f3b367 Mon Sep 17 00:00:00 2001 From: Justin Craig-Kuhn Date: Thu, 5 Oct 2023 13:42:26 -0700 Subject: [PATCH] Shakapacker (#323) * Migrate from Sprockets to Shakapacker * Refactor CoffeeScript * Travis config --- .gitignore | 6 + .travis.yml | 5 +- Gemfile | 12 +- Gemfile.lock | 75 +- app.json | 2 +- app/assets/config/manifest.js | 19 +- app/assets/images/logo.png | Bin 14485 -> 0 bytes app/assets/javascripts/application.js | 15 - app/controllers/playlists_controller.rb | 1 + app/helpers/playlist_helper.rb | 6 +- app/helpers/sort_helper.rb | 36 +- app/helpers/track_helper.rb | 14 +- .../images/icon-context.png | Bin .../images/icon-next.png | Bin .../images/icon-previous.png | Bin .../images/icon-relisten.png | Bin .../images/icon-search.png | Bin .../images/icon-splendor.png | Bin .../images/icons-heart-small.png | Bin .../images/icons-heart.png | Bin .../images/icons-playlist.png | Bin .../images/icons-playpause.png | Bin .../images/icons-volume.png | Bin .../images/logo-mask-og.png | Bin .../images/logo-mask.png | Bin app/{assets => javascript}/images/logo-og.png | Bin .../images/logo-twitter-card.png | Bin app/javascript/images/logo.png | Bin 0 -> 7297 bytes .../images/progress-bar.png | Bin .../packs}/application.css.scss | 160 +- app/javascript/packs/application.js | 12 + .../src/coffeescript/app.js.coffee} | 166 +- .../src/coffeescript}/detector.js.coffee | 6 +- .../src/coffeescript}/map.js.coffee | 9 +- .../src/coffeescript}/player.js.coffee | 16 +- .../src/coffeescript}/playlist.js.coffee | 29 +- .../src/coffeescript}/util.js.coffee | 49 +- .../stylesheets/bootstrap_and_overrides.css | 0 app/views/eras/index.html.slim | 4 +- app/views/layouts/_ajax_loading.html.slim | 2 + app/views/layouts/_ajax_overlay.html.slim | 15 - app/views/layouts/_global_nav.html.slim | 2 +- app/views/layouts/_meta.html.slim | 4 +- app/views/layouts/_player.html.slim | 2 +- app/views/layouts/_player_menu.html.slim | 2 +- app/views/layouts/application.html.slim | 14 +- app/views/playlists/_display_filter.html.slim | 12 +- app/views/playlists/active.html.slim | 16 +- .../_context_menu_for_playlist.html.slim | 19 +- .../shared/_context_menu_for_show.html.slim | 45 +- .../shared/_context_menu_for_track.html.slim | 85 +- app/views/shared/_lyrics_dialog.html.slim | 2 + app/views/shared/_lyrics_modal.html.slim | 7 - .../shared/_save_playlist_dialog.html.slim | 17 + .../shared/_save_playlist_modal.html.slim | 18 - app/views/shared/_sort_filter.html.slim | 8 +- .../_sort_songs_and_venues_filter.html.slim | 11 +- app/views/shared/_tag_dialog.html.slim | 2 + app/views/shared/_tag_modal.html.slim | 8 - .../shared/_taper_notes_dialog.html.slim | 2 + app/views/shared/_taper_notes_modal.html.slim | 8 - app/views/songs/show.html.slim | 8 +- app/views/tags/index.html.slim | 2 +- bin/shakapacker | 13 + bin/shakapacker-dev-server | 13 + bin/yarn | 18 + config/application.rb | 1 - config/environments/development.rb | 4 - config/environments/production.rb | 15 - config/shakapacker.yml | 47 + config/webpack/webpack.config.js | 6 + package.json | 46 + spec/features/show_context_menus_spec.rb | 3 +- vendor/assets/javascripts/jquery.cookie.js | 117 - vendor/assets/javascripts/native.history.js | 1 - vendor/assets/javascripts/spin.min.js | 1 - yarn.lock | 4110 +++++++++++++++++ 77 files changed, 4709 insertions(+), 639 deletions(-) delete mode 100644 app/assets/images/logo.png delete mode 100644 app/assets/javascripts/application.js rename app/{assets => javascript}/images/icon-context.png (100%) rename app/{assets => javascript}/images/icon-next.png (100%) rename app/{assets => javascript}/images/icon-previous.png (100%) rename app/{assets => javascript}/images/icon-relisten.png (100%) rename app/{assets => javascript}/images/icon-search.png (100%) rename app/{assets => javascript}/images/icon-splendor.png (100%) rename app/{assets => javascript}/images/icons-heart-small.png (100%) rename app/{assets => javascript}/images/icons-heart.png (100%) rename app/{assets => javascript}/images/icons-playlist.png (100%) rename app/{assets => javascript}/images/icons-playpause.png (100%) rename app/{assets => javascript}/images/icons-volume.png (100%) rename app/{assets => javascript}/images/logo-mask-og.png (100%) rename app/{assets => javascript}/images/logo-mask.png (100%) rename app/{assets => javascript}/images/logo-og.png (100%) rename app/{assets => javascript}/images/logo-twitter-card.png (100%) create mode 100644 app/javascript/images/logo.png rename app/{assets => javascript}/images/progress-bar.png (100%) rename app/{assets/stylesheets => javascript/packs}/application.css.scss (93%) create mode 100644 app/javascript/packs/application.js rename app/{assets/javascripts/app-main.js.coffee => javascript/src/coffeescript/app.js.coffee} (79%) rename app/{assets/javascripts/classes => javascript/src/coffeescript}/detector.js.coffee (94%) rename app/{assets/javascripts/classes => javascript/src/coffeescript}/map.js.coffee (96%) rename app/{assets/javascripts/classes => javascript/src/coffeescript}/player.js.coffee (97%) rename app/{assets/javascripts/classes => javascript/src/coffeescript}/playlist.js.coffee (91%) rename app/{assets/javascripts/classes => javascript/src/coffeescript}/util.js.coffee (82%) rename app/{assets => javascript}/stylesheets/bootstrap_and_overrides.css (100%) create mode 100644 app/views/layouts/_ajax_loading.html.slim delete mode 100644 app/views/layouts/_ajax_overlay.html.slim create mode 100644 app/views/shared/_lyrics_dialog.html.slim delete mode 100644 app/views/shared/_lyrics_modal.html.slim create mode 100644 app/views/shared/_save_playlist_dialog.html.slim delete mode 100644 app/views/shared/_save_playlist_modal.html.slim create mode 100644 app/views/shared/_tag_dialog.html.slim delete mode 100644 app/views/shared/_tag_modal.html.slim create mode 100644 app/views/shared/_taper_notes_dialog.html.slim delete mode 100644 app/views/shared/_taper_notes_modal.html.slim create mode 100755 bin/shakapacker create mode 100755 bin/shakapacker-dev-server create mode 100755 bin/yarn create mode 100644 config/shakapacker.yml create mode 100644 config/webpack/webpack.config.js create mode 100644 package.json delete mode 100644 vendor/assets/javascripts/jquery.cookie.js delete mode 100644 vendor/assets/javascripts/native.history.js delete mode 100644 vendor/assets/javascripts/spin.min.js create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index 154889f0..2f3ff9ab 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,9 @@ /public/assets /public/audio /tmp +/public/packs +/public/packs-test +/node_modules +/yarn-error.log +yarn-debug.log* +.yarn-integrity diff --git a/.travis.yml b/.travis.yml index c5b7eea1..59d80683 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,8 +29,11 @@ before_install: - psql -c 'create database phishin_test;' -U postgres - gem update --system --no-document - gem install bundler --no-document -install: bundle install +install: + - bundle install + - yarn install script: + - bundle exec rails assets:precompile - bundle exec rubocop - bundle exec rspec after_script: diff --git a/Gemfile b/Gemfile index e5a6850f..95de0f1e 100644 --- a/Gemfile +++ b/Gemfile @@ -4,18 +4,13 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '3.2.2' gem 'actionpack-action_caching' -gem 'bootstrap-will_paginate' gem 'chunky_png' -gem 'coffee-rails' gem 'dalli' gem 'devise' -gem 'execjs', '2.7.0' # 2.8 breaks coffeescript compilation gem 'friendly_id' gem 'geocoder' gem 'google-api-client' gem 'highline' -gem 'jquery-rails' -gem 'jquery-ui-rails', '< 6.0' # 6.0 breaks slider/scrubber gem 'nokogiri' gem 'pg' gem 'pg_search' @@ -23,16 +18,13 @@ gem 'puma' gem 'rails' gem 'ruby-mp3info' gem 'ruby-progressbar' -gem 'sass-rails' gem 'sentry-raven' +gem 'shakapacker' gem 'shrine' gem 'slim' -gem 'soundmanager2-rails' -gem 'twitter-bootstrap-rails', '2.2.8' gem 'typhoeus' -gem 'uglifier' gem 'waveformjson' -gem 'will_paginate', '< 4' # 4.0 breaks bootstrap-will_paginate +gem 'will_paginate' group :development do gem 'bullet' diff --git a/Gemfile.lock b/Gemfile.lock index cad785f5..1e2d02a5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -73,8 +73,6 @@ GEM ast (2.4.2) base64 (0.1.1) bcrypt (3.1.19) - bootstrap-will_paginate (1.0.0) - will_paginate builder (3.2.4) bullet (7.0.7) activesupport (>= 3.0.0) @@ -95,13 +93,6 @@ GEM capybara (>= 1.0, < 4) launchy chunky_png (1.4.0) - coffee-rails (5.0.0) - coffee-script (>= 2.2.0) - railties (>= 5.2.0) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.12.2) concurrent-ruby (1.2.2) content_disposition (1.0.0) crass (1.0.6) @@ -124,7 +115,6 @@ GEM erubi (1.12.0) ethon (0.16.0) ffi (>= 1.15.0) - execjs (2.7.0) factory_bot (6.2.1) activesupport (>= 5.0.0) factory_bot_rails (6.2.0) @@ -137,7 +127,7 @@ GEM faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) faraday-net_http (3.0.2) - ffi (1.16.2) + ffi (1.16.3) friendly_id (5.5.0) activerecord (>= 4.0.0) gems (1.2.0) @@ -174,12 +164,6 @@ GEM httpclient (2.8.3) i18n (1.14.1) concurrent-ruby (~> 1.0) - jquery-rails (4.6.0) - rails-dom-testing (>= 1, < 3) - railties (>= 4.2.0) - thor (>= 0.14, < 2.0) - jquery-ui-rails (5.0.5) - railties (>= 3.2.16) json (2.6.3) jwt (2.7.1) language_server-protocol (3.17.0.3) @@ -199,7 +183,7 @@ GEM mini_mime (1.1.5) minitest (5.20.0) multi_json (1.15.0) - net-imap (0.3.7) + net-imap (0.4.0) date net-protocol net-pop (0.1.2) @@ -216,7 +200,7 @@ GEM orm_adapter (0.5.0) os (1.1.4) parallel (1.23.0) - parser (3.2.2.3) + parser (3.2.2.4) ast (~> 2.4.1) racc pg (1.5.4) @@ -228,6 +212,8 @@ GEM nio4r (~> 2.0) racc (1.7.1) rack (2.2.8) + rack-proxy (0.7.7) + rack rack-test (2.1.0) rack (>= 1.3) rails (7.0.8) @@ -308,7 +294,7 @@ GEM rubocop-performance (1.19.1) rubocop (>= 1.7.0, < 2.0) rubocop-ast (>= 0.4.0) - rubocop-rails (2.21.1) + rubocop-rails (2.21.2) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) @@ -323,22 +309,18 @@ GEM ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) rubyzip (2.3.2) - sass-rails (6.0.0) - sassc-rails (~> 2.1, >= 2.1.1) - sassc (2.4.0) - ffi (~> 1.9) - sassc-rails (2.1.2) - railties (>= 4.0.0) - sassc (>= 2.0) - sprockets (> 3.0) - sprockets-rails - tilt selenium-webdriver (4.13.1) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) + semantic_range (3.0.0) sentry-raven (3.1.2) faraday (>= 1.0) + shakapacker (7.1.0) + activesupport (>= 5.2) + rack-proxy (>= 0.6.1) + railties (>= 5.2) + semantic_range (>= 2.3.0) shoulda-matchers (5.3.0) activesupport (>= 5.2.0) shrine (3.5.0) @@ -352,32 +334,17 @@ GEM slim (5.1.1) temple (~> 0.10.0) tilt (>= 2.1.0) - soundmanager2-rails (2.97.20170601) - sprockets (4.2.1) - concurrent-ruby (~> 1.0) - rack (>= 2.2.4, < 4) - sprockets-rails (3.4.2) - actionpack (>= 5.2) - activesupport (>= 5.2) - sprockets (>= 3.0.0) - temple (0.10.2) + temple (0.10.3) thor (1.2.2) tilt (2.3.0) timeout (0.4.0) trailblazer-option (0.1.2) - twitter-bootstrap-rails (2.2.8) - actionpack (>= 3.1) - execjs - rails (>= 3.1) - railties (>= 3.1) typhoeus (1.4.0) ethon (>= 0.9.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) - uglifier (4.2.0) - execjs (>= 0.3.0, < 3) - unicode-display_width (2.4.2) + unicode-display_width (2.5.0) uniform_notifier (1.16.0) warden (1.2.9) rack (>= 2.0.9) @@ -388,7 +355,7 @@ GEM websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - will_paginate (3.3.1) + will_paginate (4.0.0) xpath (3.2.0) nokogiri (~> 1.8) zeitwerk (2.6.12) @@ -400,25 +367,20 @@ PLATFORMS DEPENDENCIES actionpack-action_caching - bootstrap-will_paginate bullet capybara capybara-email capybara-screenshot chunky_png - coffee-rails dalli devise dotenv-rails - execjs (= 2.7.0) factory_bot_rails faker friendly_id geocoder google-api-client highline - jquery-rails - jquery-ui-rails (< 6.0) nokogiri pg pg_search @@ -433,18 +395,15 @@ DEPENDENCIES rubocop-rspec ruby-mp3info ruby-progressbar - sass-rails selenium-webdriver sentry-raven + shakapacker shoulda-matchers shrine slim - soundmanager2-rails - twitter-bootstrap-rails (= 2.2.8) typhoeus - uglifier waveformjson - will_paginate (< 4) + will_paginate RUBY VERSION ruby 3.2.2p53 diff --git a/app.json b/app.json index 57db98e8..39a2a3c0 100644 --- a/app.json +++ b/app.json @@ -1,7 +1,7 @@ { "scripts": { "dokku": { - "predeploy": "bundle exec rails db:migrate && bundle exec rake assets:precompile", + "predeploy": "bundle exec rails db:migrate && bundle exec rails assets:precompile", "postdeploy": "if [ -n \"$DISCORD_WEBHOOK_URL\" ]; then JSON_STRING=\"{\\\"content\\\":\\\"[$GIT_REV](https://github.com/jcraigk/phishin/commit/$GIT_REV) successfully deployed\\\"}\"; curl -X POST -H 'Content-Type: application/json' --data \"$JSON_STRING\" $DISCORD_WEBHOOK_URL; fi" } } diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js index e4926304..0967ef42 100644 --- a/app/assets/config/manifest.js +++ b/app/assets/config/manifest.js @@ -1,18 +1 @@ -//= link application.css -// -//= link application.js -// -//= link icon-context.png -//= link icon-next.png -//= link icon-previous.png -//= link icon-relisten.png -//= link icon-splendor.png -//= link icon-search.png -//= link icons-heart-small.png -//= link icons-heart.png -//= link icons-playlist.png -//= link icons-playpause.png -//= link icons-volume.png -//= link logo.png -//= link logo-og.png -//= link logo-twitter-card.png +{} diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png deleted file mode 100644 index 85a65881424fd446a4aced94702a8866aecad83b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14485 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 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js deleted file mode 100644 index aa1d1a66..00000000 --- a/app/assets/javascripts/application.js +++ /dev/null @@ -1,15 +0,0 @@ -//= require jquery -//= require jquery_ujs -//= require jquery-ui/slider -//= require jquery-ui/sortable -//= require jquery.cookie -//= require native.history -//= require soundmanager2 -//= require spin.min -//= require twitter/bootstrap -//= require classes/detector -//= require classes/map -//= require classes/player -//= require classes/playlist -//= require classes/util -//= require app-main diff --git a/app/controllers/playlists_controller.rb b/app/controllers/playlists_controller.rb index 48aafd00..33c484dd 100644 --- a/app/controllers/playlists_controller.rb +++ b/app/controllers/playlists_controller.rb @@ -11,6 +11,7 @@ class PlaylistsController < ApplicationController shuffle: false }.freeze + skip_before_action :verify_authenticity_token before_action :init_session before_action :authenticate_user!, only: %i[save destroy bookmark unbookmark] diff --git a/app/helpers/playlist_helper.rb b/app/helpers/playlist_helper.rb index 4baa2dbd..de1c0037 100644 --- a/app/helpers/playlist_helper.rb +++ b/app/helpers/playlist_helper.rb @@ -1,9 +1,9 @@ module PlaylistHelper def playlist_filter_hash { - ' All' => 'all', - ' Only Mine' => 'mine', - ' Only Phriends\'' => 'phriends' + ' All' => 'all', + ' Only Mine' => 'mine', + ' Only Phriends\'' => 'phriends' } end diff --git a/app/helpers/sort_helper.rb b/app/helpers/sort_helper.rb index 718c21c6..b5084ee7 100644 --- a/app/helpers/sort_helper.rb +++ b/app/helpers/sort_helper.rb @@ -52,52 +52,52 @@ def sort_songs_title(items) def show_sort_items { - ' Reverse Date' => 'date desc', - ' Date' => 'date', - ' Likes' => 'likes', - ' Duration' => 'duration' + ' Reverse Date' => 'date desc', + ' Date' => 'date', + ' Likes' => 'likes', + ' Duration' => 'duration' } end def my_track_sort_items - { ' Title' => 'title' }.merge(track_sort_items) + { ' Title' => 'title' }.merge(track_sort_items) end def track_sort_items { - ' Reverse Date' => 'shows.date desc', - ' Date' => 'shows.date asc', - ' Likes' => 'likes', - ' Duration' => 'duration' + ' Reverse Date' => 'shows.date desc', + ' Date' => 'shows.date asc', + ' Likes' => 'likes', + ' Duration' => 'duration' } end def songs_and_venues_sort_items { - ' Title' => 'title', - ' Track Count' => 'performances' + ' Title' => 'title', + ' Track Count' => 'performances' } end def tag_sort_items { - ' Name' => 'name', - ' Track Count' => 'tracks_count', - ' Show Count' => 'shows_count' + ' Name' => 'name', + ' Track Count' => 'tracks_count', + ' Show Count' => 'shows_count' } end def venues_sort_items { - ' Name' => 'name', - ' Show Count' => 'performances' + ' Name' => 'name', + ' Show Count' => 'performances' } end def stored_playlist_sort_items { - ' Name' => 'name', - ' Duration' => 'duration' + ' Name' => 'name', + ' Duration' => 'duration' } end end diff --git a/app/helpers/track_helper.rb b/app/helpers/track_helper.rb index 73dfff8b..dc07becf 100644 --- a/app/helpers/track_helper.rb +++ b/app/helpers/track_helper.rb @@ -14,10 +14,9 @@ def next_gap_link(song, date) # rubocop:disable Metrics/AbcSize, Metrics/MethodL Show.published .where('date BETWEEN ? AND ?', date, next_show.date) .count - link_to( - "#{tag.i(class: 'icon-forward')} Next Performance (gap: #{gap})".html_safe, - "/#{next_show.date}/#{track.slug}" - ) + text = 'Next Performance' + text = "#{tag.i(class: 'glyphicon glyphicon-forward')}  #{text}(gap: #{gap})" + link_to(text.html_safe, "/#{next_show.date}/#{track.slug}") end def previous_gap_link(song, date) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength @@ -35,9 +34,8 @@ def previous_gap_link(song, date) # rubocop:disable Metrics/AbcSize, Metrics/Met Show.published .where('date BETWEEN ? AND ?', prev_show.date, date) .count - link_to( - "#{tag.i(class: 'icon-backward')} Previous Performance (gap: #{gap})".html_safe, - "/#{prev_show.date}/#{track.slug}" - ) + text = 'Previous Performance' + text = "#{tag.i(class: 'glyphicon glyphicon-backward')}  #{text} (gap: #{gap})" + link_to(text.html_safe, "/#{prev_show.date}/#{track.slug}") end end diff --git a/app/assets/images/icon-context.png b/app/javascript/images/icon-context.png similarity index 100% rename from app/assets/images/icon-context.png rename to app/javascript/images/icon-context.png diff --git a/app/assets/images/icon-next.png b/app/javascript/images/icon-next.png similarity index 100% rename from app/assets/images/icon-next.png rename to app/javascript/images/icon-next.png diff --git a/app/assets/images/icon-previous.png b/app/javascript/images/icon-previous.png similarity index 100% rename from app/assets/images/icon-previous.png rename to app/javascript/images/icon-previous.png diff --git a/app/assets/images/icon-relisten.png b/app/javascript/images/icon-relisten.png similarity index 100% rename from app/assets/images/icon-relisten.png rename to app/javascript/images/icon-relisten.png diff --git a/app/assets/images/icon-search.png b/app/javascript/images/icon-search.png similarity index 100% rename from app/assets/images/icon-search.png rename to app/javascript/images/icon-search.png diff --git a/app/assets/images/icon-splendor.png b/app/javascript/images/icon-splendor.png similarity index 100% rename from app/assets/images/icon-splendor.png rename to app/javascript/images/icon-splendor.png diff --git a/app/assets/images/icons-heart-small.png b/app/javascript/images/icons-heart-small.png similarity index 100% rename from app/assets/images/icons-heart-small.png rename to app/javascript/images/icons-heart-small.png diff --git a/app/assets/images/icons-heart.png b/app/javascript/images/icons-heart.png similarity index 100% rename from app/assets/images/icons-heart.png rename to app/javascript/images/icons-heart.png diff --git a/app/assets/images/icons-playlist.png b/app/javascript/images/icons-playlist.png similarity index 100% rename from app/assets/images/icons-playlist.png rename to app/javascript/images/icons-playlist.png diff --git a/app/assets/images/icons-playpause.png b/app/javascript/images/icons-playpause.png similarity index 100% rename from app/assets/images/icons-playpause.png rename to app/javascript/images/icons-playpause.png diff --git a/app/assets/images/icons-volume.png b/app/javascript/images/icons-volume.png similarity index 100% rename from app/assets/images/icons-volume.png rename to app/javascript/images/icons-volume.png diff --git a/app/assets/images/logo-mask-og.png b/app/javascript/images/logo-mask-og.png similarity index 100% rename from app/assets/images/logo-mask-og.png rename to app/javascript/images/logo-mask-og.png diff --git a/app/assets/images/logo-mask.png b/app/javascript/images/logo-mask.png similarity index 100% rename from app/assets/images/logo-mask.png rename to app/javascript/images/logo-mask.png diff --git a/app/assets/images/logo-og.png b/app/javascript/images/logo-og.png similarity index 100% rename from app/assets/images/logo-og.png rename to app/javascript/images/logo-og.png diff --git a/app/assets/images/logo-twitter-card.png b/app/javascript/images/logo-twitter-card.png similarity index 100% rename from app/assets/images/logo-twitter-card.png rename to app/javascript/images/logo-twitter-card.png diff --git a/app/javascript/images/logo.png b/app/javascript/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ce2f1e789a15036af65d894a1215466dcaecaaf5 GIT binary patch literal 7297 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 bT;TrzmW images(name, true) + +// Global dependencies +import 'jquery/src/jquery'; +import 'jquery-ujs' +import 'bootstrap/dist/js/bootstrap'; +import 'soundmanager2' + +// App logic (legacy CoffeeScript) +import '../src/coffeescript/app.js.coffee'; diff --git a/app/assets/javascripts/app-main.js.coffee b/app/javascript/src/coffeescript/app.js.coffee similarity index 79% rename from app/assets/javascripts/app-main.js.coffee rename to app/javascript/src/coffeescript/app.js.coffee index 23832ea6..085b4aae 100644 --- a/app/assets/javascripts/app-main.js.coffee +++ b/app/javascript/src/coffeescript/app.js.coffee @@ -1,5 +1,16 @@ -# Generic namespace -@App = {} +import $ from 'jquery' +import 'jquery-ui/ui/widgets/slider' +import 'jquery-ui/ui/widgets/tooltip' +import 'jquery-ui/ui/widgets/dialog' + +import Detector from './detector.js' +import Map from './map.js' +import Player from './player.js' +import Playlist from './playlist.js' +import Util from './util.js' + +App = {} +export default App $ -> @@ -19,62 +30,79 @@ $ -> $notice = $ '.feedback_notice' $alert = $ '.feedback_alert' - $ajax_overlay = $ '#ajax_overlay' + $ajax_loading = $ '#ajax_loading' $page = $ '#page' ############################################### # Helpers ############################################### - handleHistory = -> - state = window.History.getState() - if state.data.href != undefined and !App.Util.page_init - $ajax_overlay.css 'visibility', 'visible' + handleNavigation = -> + state = window.history.state + if state?.href && !App.Util.page_init + $ajax_loading.css 'visibility', 'visible' $page.html '' - $page.load( - state.data.href, (response, status, xhr) -> - App.Util.showHTMLError(response) if status is 'error' - - $ajax_overlay.css 'visibility', 'hidden' - - # Scroll to proper position (not currently working) - window.scrollTo 0, App.Util.historyScrollStates[state.id] if App.Util.historyScrollStates[state.id] - - # Tooltips - $('a[title]').tooltip() - $('.tag_label[title]').tooltip() - - # Auto-scroll and highlight track anchor if present - if state.data.href.substr(0,6) != '/play/' and path = state.data.href.split("/")[2] - match = /^([^\?]+)\??(.+)?$/.exec(path) - $('body').attr 'data-anchor', match[1] - else - $('body').attr 'data-anchor', '' - App.Player.onReady() # For scrolling to and auto-playing a track - App.Player.highlightActiveTrack(true) # For highlighting current track in a list, scrollTo = true - - # For detecting browsers/platforms - App.Detector = new Detector - - # Map - if state.data.href.substr(0,4) is '/map' - App.Map.initMap() - term = $('#map_search_term').val() - distance = $('#map_search_distance').val() - App.Map.handleSearch(term, distance) if term and distance - - # Playlist - else if state.data.href.substr(0,9) is '/playlist' or state.data.href.substr(0,6) is '/play/' - App.Playlist.initPlaylist() - ) + + fetch(state.href, { + headers: { + 'X-Requested-With': 'XMLHttpRequest' + } + }) + .then (response) -> + if response.ok + response.text() + else + throw new Error('Network response was not ok') + + .then (html) -> + $page.html html + $ajax_loading.css 'visibility', 'hidden' + + # Scroll to proper position + window.scrollTo(0, App.Util.historyScrollStates[state.id]) if App.Util.historyScrollStates[state.id] + + # Tooltips + $('a[title]').each -> $(this).tooltip() + $('.tag_label[title]').each -> $(this).tooltip() + + # Auto-scroll and highlight track anchor if present + path = state.href.split('/')[2] + if state.href.substr(0,6) != '/play/' and path + match = /^([^\?]+)\??(.+)?$/.exec(path) + $('body').attr 'data-anchor', match[1] + else + $('body').attr 'data-anchor', '' + App.Player.onReady() # For scrolling to and auto-playing a track + App.Player.highlightActiveTrack(true) # For highlighting current track in a list, scrollTo = true + + # For detecting browsers/platforms + App.Detector = new Detector + + # Map + if state.href.substr(0,4) is '/map' + App.Map.initMap() + term = $('#map_search_term').val() + distance = $('#map_search_distance').val() + App.Map.handleSearch(term, distance) if term and distance + + # Playlist + else if state.href.substr(0,9) is '/playlist' or state.href.substr(0,6) is '/play/' + App.Playlist.initPlaylist() + + .catch (error) -> + console.log('Navigation fetch error: ', error.message) ############################################### # Prepare history.js ############################################### - History = window.History - return false if !History.enabled - History.Adapter.bind window, 'statechange', -> - handleHistory() + + # User clicks back button + window.addEventListener 'popstate', (e) -> + handleNavigation() + + # Result of user clicking a link + window.addEventListener 'navigation', (e) -> + handleNavigation() ############################################### # Load initial page if not an exempt route @@ -85,7 +113,7 @@ $ -> match = /^(http|https):\/\/(.+)$/.exec(window.location) href = match[2].substr(match[2].indexOf('/'), match[2].length - 1) App.Util.navigateTo(href) - handleHistory() # Need to call this explicitly on page load (to keep Firefox in the mix) + handleNavigation() # Need to call this explicitly on page load (to keep Firefox in the mix) ############################################### # Handle feedback on DOM load (for Devise) @@ -120,9 +148,14 @@ $ -> # DOM interactions ############################################### - # Scroll to top of modals when displayed - $('.modal').on 'shown', -> - $('.modal-body').scrollTop(0) + # Initialize all dialogs (jQUery UI) + $('.dialog').dialog({ + autoOpen: false, + height: 400, + width: 350, + modal: true, + draggable: false + }) # Click Phish On Demand app callout $(document).on 'click', '#relisten_callout', -> @@ -132,6 +165,10 @@ $ -> $(document).on 'click', '#splendor_callout', -> window.location = 'https://play.google.com/store/apps/details?id=never.ending.splendor' + # Prevent context menu clicks from playing parent track + .on 'click', 'button', (e) -> + e.stopPropagation() + # Click a link to load page via ajax .on 'click', 'a', -> unless $(this).hasClass('non-remote') @@ -186,9 +223,9 @@ $ -> .on 'blur', '#playlist_name_input', (e) -> $('#playlist_slug_input').val App.Util.stringToSlug($(this).val()) .on 'click', '#save_playlist_btn', (e) -> - App.Playlist.handleSaveModal() + App.Playlist.handleSaveDialog() .on 'click', '#duplicate_playlist_btn', (e) -> - App.Playlist.handleDuplicateModal() + App.Playlist.handleDuplicateDialog() .on 'click', '#save_playlist_submit', (e) -> App.Playlist.savePlaylist() .on 'click', '#delete_playlist_btn', (e) -> @@ -347,15 +384,12 @@ $ -> className = 'spinner_likes_small' else if $(this).parent().hasClass('likes_large') className = 'spinner_likes_large' - spinner = App.Util.newSpinner className - $(this).parent().append spinner.el $.ajax({ type: 'post', url: '/toggle-like', data: { 'likable_type': $this.data('type'), 'likable_id': $this.data('id') } dataType: 'json', success: (r) -> - spinner.stop() if r.success App.Util.feedback({ notice: r.msg }) if r.liked then $this.addClass('liked') else $this.removeClass('liked') @@ -402,24 +436,22 @@ $ -> .on 'click', '#random_song_track_btn', (e) -> App.Player.playRandomSongTrack $(this).data('song-id') - # Taper Notes link opens a modal + # Taper Notes link opens a dialog .on 'click', '.show_taper_notes', -> $('#taper_notes_content').html $(this).data('taper-notes') - $('#taper_notes_date').html $(this).data('show-date') - $('#taper_notes_modal').modal('show') + $('#taper_notes_dialog').dialog('open') - # View Lyrics button opens a modal + # View Lyrics button opens a dialog .on 'click', '.song_lyrics', -> + $('#lyrics_dialog').attr('title', $(this).data('title')) $('#lyrics_content').html $(this).data('lyrics') - $('#lyrics_title').html $(this).data('title') - $('#lyrics_modal').modal('show') + $('#lyrics_dialog').dialog('open') - # Tag instance click opens a modal - .on 'click', '.tag_label:not(.no-modal)', -> - $('#tag_detail_title').html $(this).data('detail-title') + # Tag instance click opens a dialog + .on 'click', '.tag_label:not(.no-dialog)', -> + $('#tag_dialog').attr('title', $(this).data('detail-title')) $('#tag_detail').html $(this).data('detail') - $('#tag_modal').animate({ scrollTop: 0 }, 'slow'); - $('#tag_modal').modal('show') + $('#tag_dialog').dialog('open') # Keyboard shortcuts $(window).keydown (e) -> diff --git a/app/assets/javascripts/classes/detector.js.coffee b/app/javascript/src/coffeescript/detector.js.coffee similarity index 94% rename from app/assets/javascripts/classes/detector.js.coffee rename to app/javascript/src/coffeescript/detector.js.coffee index 4b561891..6e5861c3 100644 --- a/app/assets/javascripts/classes/detector.js.coffee +++ b/app/javascript/src/coffeescript/detector.js.coffee @@ -1,5 +1,7 @@ -class @Detector +import $ from 'jquery' +import 'jquery.cookie' +class Detector constructor: -> @detectPlatform() @@ -41,3 +43,5 @@ class @Detector unsupportedBrowser: -> window.location.href = '/browser-unsupported' + +export default Detector diff --git a/app/assets/javascripts/classes/map.js.coffee b/app/javascript/src/coffeescript/map.js.coffee similarity index 96% rename from app/assets/javascripts/classes/map.js.coffee rename to app/javascript/src/coffeescript/map.js.coffee index e03ca53b..d2ba4c93 100644 --- a/app/assets/javascripts/classes/map.js.coffee +++ b/app/javascript/src/coffeescript/map.js.coffee @@ -1,12 +1,15 @@ -class @Map +import $ from 'jquery' +import Util from './util.js' + +class Map constructor: -> @init = true @markers = [] @popups = [] @map = {} @view_circle = {} - @util = App.Util + @util = new Util @default_lng = -73.21 # Burlington, VT @default_lat = 44.47 # Burlington, VT @mapbox_token = 'pk.eyJ1IjoicGhpc2hpbiIsImEiOiJjanE0cWlzYmIxd245NDNzYjR1MHV2aGExIn0.UeKqNVoqRBqYKjfLshbShw' @@ -102,3 +105,5 @@ class @Map marker.remove() @popups = [] @markers = [] + +export default Map diff --git a/app/assets/javascripts/classes/player.js.coffee b/app/javascript/src/coffeescript/player.js.coffee similarity index 97% rename from app/assets/javascripts/classes/player.js.coffee rename to app/javascript/src/coffeescript/player.js.coffee index 69250531..ca763731 100644 --- a/app/assets/javascripts/classes/player.js.coffee +++ b/app/javascript/src/coffeescript/player.js.coffee @@ -1,7 +1,14 @@ -class @Player +import $ from 'jquery' +import 'jquery-ui/ui/widgets/slider' +import 'jquery-ui/ui/widgets/tooltip' + +import Util from './util.js' +import App from './app.js' + +class Player constructor: -> - @Util = App.Util + @Util = new Util @sm = soundManager @sm_sound = {} @preload_time = 5000 @@ -18,6 +25,7 @@ class @Player @time_marker = @Util.timeToMS $('body').data('time-marker') @$playpause = $ '#control_playpause' @$scrubber = $ '#scrubber' + @$scrubber.slider() @$scrubber_ctrl = $ '#scrubber_controls' @$waveform = $ '#waveform' @$volume_icon = $ '#volume_icon' @@ -130,7 +138,7 @@ class @Player this._updatePlayButton() this.highlightActiveTrack() else - # @Util.feedback { notice: 'That is already the current track' } + @Util.feedback { notice: 'That is already the current track' } togglePause: -> if @sm_sound.paused @@ -375,3 +383,5 @@ class @Player _hidePlayTooltip: -> $('#playpause_tooltip').tooltip('destroy') + +export default Player diff --git a/app/assets/javascripts/classes/playlist.js.coffee b/app/javascript/src/coffeescript/playlist.js.coffee similarity index 91% rename from app/assets/javascripts/classes/playlist.js.coffee rename to app/javascript/src/coffeescript/playlist.js.coffee index 65c6fa5c..73d926bf 100644 --- a/app/assets/javascripts/classes/playlist.js.coffee +++ b/app/javascript/src/coffeescript/playlist.js.coffee @@ -1,9 +1,16 @@ -class @Playlist +import $ from 'jquery' +import 'jquery-ui/ui/widgets/sortable' +import 'jquery-ui/ui/widgets/dialog' + +import Util from './util.js' +import Player from './player.js' + +class Playlist constructor: -> - @Util = App.Util - @Player = App.Player - @$save_modal = $ '#save_playlist_modal' + @Util = new Util + @Player = Player + @$save_dialog = $ '#save_playlist_dialog' @$save_action_dropdown = $ '#save_action_dropdown' @$save_action_new = $ '#save_action_new' @$save_action_existing = $ '#save_action_existing' @@ -16,7 +23,7 @@ class @Playlist $('#active_playlist').sortable({ placeholder: "ui-state-highlight", update: => - this.updatePlaylist() + this.updatePlaylist('Track repositioned in playlist') }) updatePlaylist: (success_msg) -> @@ -141,7 +148,7 @@ class @Playlist @Util.feedback { alert: r.msg } }) - handleSaveModal: -> + handleSaveDialog: -> if name = $('#playlist_data').attr 'data-name' @$save_action_existing.attr 'disabled', false @$save_action_existing.attr 'selected', true @@ -151,16 +158,16 @@ class @Playlist @$save_action_existing.attr 'disabled', true @$playlist_name_input.val '' @$playlist_slug_input.val '' - @$save_modal.modal 'show' + @$save_dialog.dialog 'open' - handleDuplicateModal: -> + handleDuplicateDialog: -> @$save_action_existing.attr 'disabled', true @$playlist_name_input.val '' @$playlist_slug_input.val '' - @$save_modal.modal 'show' + @$save_dialog.dialog 'open' savePlaylist: -> - @$save_modal.modal 'hide' + @$save_dialog.dialog 'close' $('#duplicate_playlist_btn').hide() $('#unbookmark_playlist_btn').hide() $('#bookmark_playlist_btn').hide() @@ -212,3 +219,5 @@ class @Playlist _updatePlaylistStats: (num_tracks=0, duration=0) -> $('#active_playlist_tracks_label').html "Tracks: #{num_tracks}" $('#active_playlist_duration_label').html "Length: #{@Util.readableDuration(duration, 'letters')}" + +export default Playlist diff --git a/app/assets/javascripts/classes/util.js.coffee b/app/javascript/src/coffeescript/util.js.coffee similarity index 82% rename from app/assets/javascripts/classes/util.js.coffee rename to app/javascript/src/coffeescript/util.js.coffee index 72d47837..e668e810 100644 --- a/app/assets/javascripts/classes/util.js.coffee +++ b/app/javascript/src/coffeescript/util.js.coffee @@ -1,8 +1,11 @@ -class @Util +import $ from 'jquery' + +class Util historyScrollStates: [] # Need to store scroll states outside history.js based on the way that library works constructor: -> + @page_init = true @page_init = true @$feedback = $ '#feedback' @@ -10,13 +13,15 @@ class @Util if feedback.alert msg = feedback.alert css = 'feedback_alert' - icon = 'icon-exclamation-sign' + icon = 'exclamation-sign' else msg = feedback.notice css = 'feedback_notice' - icon = 'icon-ok-sign' - id = this._uniqueID() - @$feedback.append "

#{msg}

" + icon = 'ok-sign' + id = "" + id += Math.random().toString(36).substr 2 while id.length < length + id.substr 0, length + @$feedback.append "

#{msg}

" setTimeout( -> $("##{id}").hide 'slide' , 3000) @@ -26,11 +31,19 @@ class @Util navigateTo: (href) -> @page_init = false - this.historyScrollStates[History.savedStates[History.savedStates.length-1].id] = $('body').scrollTop() + + # Save the current scroll position to the state + scrollPosition = window.scrollY || document.documentElement.scrollTop || document.body.scrollTop || 0 + history.replaceState { href: window.location.href, scroll: scrollPosition }, document.title, window.location.href + + # Push the new state title = document.title - History.pushState { href: href, scroll: 0 }, $('body').data('app-name'), href + history.pushState { href: href, scroll: 0 }, $('body').data('app-name'), href document.title = title + # Manually trigger a popstate event + window.dispatchEvent(new CustomEvent('navigation')) + navigateToRefreshMap: -> url = "/map?map_term=#{$('#map_search_term').val().replace /\s/g, '+' }" url += "&distance=#{$('#map_search_distance').val()}" @@ -88,21 +101,6 @@ class @Util stringToSlug: (str) -> str.toLowerCase().trim().replace(/[^a-z0-9\-\s]/g, '').replace(/[\s]/g, '-') - newSpinner: (className = 'spinner_likes_small') -> - new Spinner({ - lines: 9, - length: 4, - width: 2, - radius: 3, - corners: 1.0, - rotate: 0, - direction: -1, - color: '#000', - speed: 1.0, - trail: 50, - className: className - }).spin() - truncate: (string, length=40) -> if string.length > length then string.substring(0, length) + '...' else string @@ -114,13 +112,10 @@ class @Util el.val(text) el.select() document.execCommand('copy') - App.Util.feedback({ notice: 'Link copied to clipboard' }) + this.feedback({ notice: 'Link copied to clipboard' }) _findMatch: (href) -> match = /^([^\?]+)\??(.+)?$/.exec(href.split("/")[1]) match[1] if match - _uniqueID: (length=8) -> - id = "" - id += Math.random().toString(36).substr 2 while id.length < length - id.substr 0, length +export default Util diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css b/app/javascript/stylesheets/bootstrap_and_overrides.css similarity index 100% rename from app/assets/stylesheets/bootstrap_and_overrides.css rename to app/javascript/stylesheets/bootstrap_and_overrides.css diff --git a/app/views/eras/index.html.slim b/app/views/eras/index.html.slim index dd0bf616..1fc606ea 100644 --- a/app/views/eras/index.html.slim +++ b/app/views/eras/index.html.slim @@ -8,13 +8,13 @@ br #relisten_callout.app_callout - = image_tag 'icon-relisten.png', alt: 'Relisten iOS app' + = image_pack_tag 'static/images/icon-relisten.png', alt: 'Relisten iOS app' h2 Relisten h3 iOS app = clear_both #splendor_callout.app_callout - = image_tag 'icon-splendor.png', alt: 'Never Ending Splendor app' + = image_pack_tag 'static/images/icon-splendor.png', alt: 'Never Ending Splendor app' h2 Never Ending Splendor h3 Android app = clear_both diff --git a/app/views/layouts/_ajax_loading.html.slim b/app/views/layouts/_ajax_loading.html.slim new file mode 100644 index 00000000..099131e6 --- /dev/null +++ b/app/views/layouts/_ajax_loading.html.slim @@ -0,0 +1,2 @@ +#ajax_loading + span.spinner.glyphicon.glyphicon-refresh aria-hidden='true' diff --git a/app/views/layouts/_ajax_overlay.html.slim b/app/views/layouts/_ajax_overlay.html.slim deleted file mode 100644 index ec1aa1b4..00000000 --- a/app/views/layouts/_ajax_overlay.html.slim +++ /dev/null @@ -1,15 +0,0 @@ -#ajax_overlay - -javascript: - new Spinner({ - lines: 13, - length: 20, - width: 10, - radius: 30, - corners: 1.0, - rotate: 0, - direction: -1, - color: '#000', - speed: 1.0, - trail: 50 - }).spin($('#ajax_overlay').get(0)); diff --git a/app/views/layouts/_global_nav.html.slim b/app/views/layouts/_global_nav.html.slim index b073b425..8ff3682a 100644 --- a/app/views/layouts/_global_nav.html.slim +++ b/app/views/layouts/_global_nav.html.slim @@ -4,7 +4,7 @@ = global_nav(@ambiguity_controller) #search_box - = image_tag 'icon-search.png', alt: 'search icon' + = image_pack_tag 'static/images/icon-search.png', alt: 'search icon' input#search_term type='text' name='term' value=params[:term] .divider diff --git a/app/views/layouts/_meta.html.slim b/app/views/layouts/_meta.html.slim index e30d2202..f7f06f90 100644 --- a/app/views/layouts/_meta.html.slim +++ b/app/views/layouts/_meta.html.slim @@ -6,7 +6,7 @@ meta name='viewport' content='width=device-width, initial-scale=1' / Open Graph Protocol (embed previews) meta property='og:type' content='music.playlist' meta property='og:url' content=request.original_url -meta property='og:image' content=asset_url('logo-og.png') +meta property='og:image' content=image_pack_path('static/images/logo-og.png') meta property='og:image:alt' content='Phish.in logo' - if @ogp_title.present? meta property='og:title' content=@ogp_title @@ -18,5 +18,5 @@ meta name='twitter:card' content='summary' meta name='twitter:site' content=TWITTER_USER meta name='twitter:title' content="#{@ogp_title.presence || APP_NAME}" meta name='twitter:description' content=DESCRIPTION -meta name='twitter:image' content=asset_url('logo-twitter-card.png') +meta name='twitter:image' content=asset_pack_path('static/images/logo-twitter-card.png') meta name='twitter:image:alt' content='Phish.in logo' diff --git a/app/views/layouts/_player.html.slim b/app/views/layouts/_player.html.slim index bb1b5e20..eb227c77 100644 --- a/app/views/layouts/_player.html.slim +++ b/app/views/layouts/_player.html.slim @@ -14,7 +14,7 @@ #playlist_mode_notice PLAYLIST EDIT MODE #logo - a href=root_path = image_tag 'logo.png', alt: 'Logo' + a href=root_path = image_pack_tag 'static/images/logo.png', alt: 'Logo' #player_controls #control_previous diff --git a/app/views/layouts/_player_menu.html.slim b/app/views/layouts/_player_menu.html.slim index 578f0be0..3f8df67b 100644 --- a/app/views/layouts/_player_menu.html.slim +++ b/app/views/layouts/_player_menu.html.slim @@ -1,7 +1,7 @@ #player_menu .btn-group a.btn.dropdown-toggle.btn-round.btn_invisible data-toggle='dropdown' href='null' - i.icon-cog + i.glyphicon.glyphicon-cog ul.dropdown-menu li.nolink = check_box_tag('loop_checkbox', 1, session[:loop], class: 'playback_loop') + ' Loop' li.nolink = check_box_tag('shuffle_checkbox', 1, session[:shuffle], class: 'playback_shuffle') + ' Shuffle' diff --git a/app/views/layouts/application.html.slim b/app/views/layouts/application.html.slim index 25e8a79c..eea88308 100644 --- a/app/views/layouts/application.html.slim +++ b/app/views/layouts/application.html.slim @@ -7,8 +7,8 @@ html = stylesheet_link_tag 'https://fonts.googleapis.com/css?family=Marck+Script|Open+Sans+Condensed:300,700|Molle' = javascript_include_tag 'https://api.mapbox.com/mapbox-gl-js/v2.2.0/mapbox-gl.js' = stylesheet_link_tag 'https://api.mapbox.com/mapbox-gl-js/v2.2.0/mapbox-gl.css' - = stylesheet_link_tag 'application', media: :all - = javascript_include_tag 'application' + = stylesheet_pack_tag 'application', media: :all + = javascript_pack_tag 'application' = csrf_meta_tags body[ @@ -18,14 +18,14 @@ html data-time-marker=(params[:t] || 0) ] - = render partial: 'layouts/ajax_overlay' + = render partial: 'layouts/ajax_loading' = render partial: 'layouts/feedback' = render partial: 'layouts/page_header' = render partial: 'shared/clipboard' - = render partial: 'shared/lyrics_modal' - = render partial: 'shared/save_playlist_modal' - = render partial: 'shared/tag_modal' - = render partial: 'shared/taper_notes_modal' + = render partial: 'shared/lyrics_dialog' + = render partial: 'shared/save_playlist_dialog' + = render partial: 'shared/tag_dialog' + = render partial: 'shared/taper_notes_dialog' #page = yield if xhr_exempt_controller diff --git a/app/views/playlists/_display_filter.html.slim b/app/views/playlists/_display_filter.html.slim index 8cb1444f..0384a5e2 100644 --- a/app/views/playlists/_display_filter.html.slim +++ b/app/views/playlists/_display_filter.html.slim @@ -1,7 +1,5 @@ -h3 - | Display  - .btn-group - a.btn.dropdown-toggle data-toggle='dropdown' href='null' - = selected_playlist_filter - span.caret< - ul.dropdown-menu = playlist_filters +.btn-group + button.btn.btn-default.dropdown-toggle type='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false' + |> Display + span.caret + ul.dropdown-menu = playlist_filters diff --git a/app/views/playlists/active.html.slim b/app/views/playlists/active.html.slim index 0f5498c3..96ac5228 100644 --- a/app/views/playlists/active.html.slim +++ b/app/views/playlists/active.html.slim @@ -17,46 +17,46 @@ | to create and share custom playlists! button#playlist_mode_btn.btn.btn-success type='button' - i.icon-white.icon-edit> + i.glyphicon.glyphicon-white.icon-edit> span#playlist_mode_label EDIT br - if user_signed_in? - if session[:playlist][:id].positive? && session[:playlist][:user_id] != current_user.id button#duplicate_playlist_btn.btn type='button' - i.icon-file + i.glyphicon.glyphicon-file | DUPLICATE br - else button#save_playlist_btn.btn type='button' - i.icon-file + i.glyphicon.glyphicon-file | SAVE br - if session[:playlist][:id].positive? - if current_user.id == session[:playlist][:user_id] button#delete_playlist_btn.btn type='button' - i.icon-remove + i.glyphicon.glyphicon-remove | DELETE br - else - if session[:playlist_is_bookmarked] button#unbookmark_playlist_btn.btn type='button' - i.icon-remove + i.glyphicon.glyphicon-remove | UNBOOKMARK br - else button#bookmark_playlist_btn.btn type='button' - i.icon-bookmark + i.glyphicon.glyphicon-bookmark | BOOKMARK br - else button#clear_playlist_btn.btn type='button' - i.icon-eject + i.glyphicon.glyphicon-eject | EMPTY br @@ -74,7 +74,7 @@ - @tracks.each_with_index do |track, idx| li.playable_track data-id=track.id data-track-duration=track.duration .drag_arrows_vertical - i.icon-resize-vertical + i.glyphicon.glyphicon-resize-vertical h2.position_num = idx + 1 h2.wider = track.title h5.narrower diff --git a/app/views/shared/_context_menu_for_playlist.html.slim b/app/views/shared/_context_menu_for_playlist.html.slim index 4fbe83a2..b11b5c83 100644 --- a/app/views/shared/_context_menu_for_playlist.html.slim +++ b/app/views/shared/_context_menu_for_playlist.html.slim @@ -1,13 +1,14 @@ -.btn_context - .btn-group - a.btn.dropdown-toggle.btn-round data-toggle='dropdown' href='null' - = image_tag 'icon-context.png', alt: 'Icon: context menu' - ul.dropdown-menu +.btn-group.btn_context + button.btn.btn-default.dropdown-toggle type='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false' + span.caret + ul.dropdown-menu li a href="/play/#{playlist.slug}" - i.icon-play - | Activate + i.glyphicon.glyphicon-play + |>   + | Activate li a.share href='null' data-url="/play/#{playlist.slug}" - i.icon-share-alt - | Share + i.glyphicon.glyphicon-share-alt + |>   + | Share diff --git a/app/views/shared/_context_menu_for_show.html.slim b/app/views/shared/_context_menu_for_show.html.slim index 980eab98..194bd5a0 100644 --- a/app/views/shared/_context_menu_for_show.html.slim +++ b/app/views/shared/_context_menu_for_show.html.slim @@ -1,22 +1,25 @@ -.btn_context.show-context-dropdown class=(viewing_this_show ? 'btn_context_for_show' : '') - .btn-group - a.btn.dropdown-toggle.btn-round data-toggle='dropdown' href='null' - = image_tag 'icon-context.png', alt: 'Icon: context menu' - ul.dropdown-menu - - unless viewing_this_show - li - a href="/#{show.date}" - i.icon-arrow-right - | Go to show +.btn-group.show-context-dropdown.btn_context + button.btn.btn-default.dropdown-toggle type='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false' + span.caret + ul.dropdown-menu + - unless viewing_this_show li - a.playlist_add_show href='null' data-id=show.id - i.icon-plus-sign - | Add to playlist - li - a.share href='null' data-url="/#{show.date}" - i.icon-share-alt - | Share - li - a.non-remote target='_blank' href="https://phish.net/setlists/?d=#{show.date}" - i.icon-search - |  Lookup at phish.net + a href="/#{show.date}" + i.glyphicon.glyphicon-arrow-right + |>   + |< Go to show + li + a.playlist_add_show href='null' data-id=show.id + i.glyphicon.glyphicon-plus-sign + |>   + |< Add to playlist + li + a.share href='null' data-url="/#{show.date}" + i.glyphicon.glyphicon-share-alt + |>   + | Share + li + a.non-remote target='_blank' href="https://phish.net/setlists/?d=#{show.date}" + i.glyphicon.glyphicon-search + |>   + |< Lookup at phish.net diff --git a/app/views/shared/_context_menu_for_track.html.slim b/app/views/shared/_context_menu_for_track.html.slim index 822cf352..00e0a2a0 100644 --- a/app/views/shared/_context_menu_for_track.html.slim +++ b/app/views/shared/_context_menu_for_track.html.slim @@ -1,44 +1,49 @@ -.btn_context.track-context-dropdown - .btn-group - a.btn.dropdown-toggle.btn-round data-toggle='dropdown' href='null' - = image_tag 'icon-context.png', alt: 'Icon: context menu' - ul.dropdown-menu - li - a.context_play_track href='null' data-id=track.id - i.icon-play - |  Play - - - if playlist - li - a.playlist_remove_track href='null' - i.icon-remove - | Remove from playlist - - - else - li - a.playlist_add_track href='null' data-id=track.id - i.icon-plus-sign - | Add to playlist +.btn-group.track-context-dropdown.btn_context + button.btn.btn-default.dropdown-toggle type='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false' + span.caret + ul.dropdown-menu + li + a.context_play_track href='null' data-id=track.id + i.glyphicon.glyphicon-play + |>   + | Play + - if playlist li - a.share.share_track href='null' data-url="/#{show ? show.date : track.show.date}/#{track.slug}" - i.icon-share-alt - |  Share + a.playlist_remove_track href='null' + i.glyphicon.glyphicon-remove + |>   + | Remove from playlist + + - else li - a.share_with_timestamp.share_track href='null' data-url="/#{show ? show.date : track.show.date}/#{track.slug}" - i.icon-share-alt - |  Share with timestamp + a.playlist_add_track href='null' data-id=track.id + i.glyphicon.glyphicon-plus-sign + |>   + | Add to playlist + + li + a.share.share_track href='null' data-url="/#{show ? show.date : track.show.date}/#{track.slug}" + i.glyphicon.glyphicon-share-alt + |>   + | Share + li + a.share_with_timestamp.share_track href='null' data-url="/#{show ? show.date : track.show.date}/#{track.slug}" + i.glyphicon.glyphicon-share-alt + |>   + | Share with timestamp + li + a.download href='null' data-url=download_track_path(track.id) + i.glyphicon.glyphicon-download + |>   + | Download MP3 + - track.songs.sort_by(&:title).each do |song| li - a.download href='null' data-url=download_track_path(track.id) - i.icon-download - | Download MP3 - - track.songs.sort_by(&:title).each do |song| - li - a href="/#{song.slug}" - i.icon-book - |   - = "#{song.title}..." - - if (show && link = next_gap_link(song, show.date)) - li = link - - if (show && link = previous_gap_link(song, show.date)) - li = link + a href="/#{song.slug}" + i.glyphicon.glyphicon-book + |>   + = "#{song.title}..." + - if (show && link = next_gap_link(song, show.date)) + li = link + - if (show && link = previous_gap_link(song, show.date)) + li = link diff --git a/app/views/shared/_lyrics_dialog.html.slim b/app/views/shared/_lyrics_dialog.html.slim new file mode 100644 index 00000000..4d71c4dc --- /dev/null +++ b/app/views/shared/_lyrics_dialog.html.slim @@ -0,0 +1,2 @@ +#lyrics_dialog.dialog title='' style='display:none;' + #lyrics_content diff --git a/app/views/shared/_lyrics_modal.html.slim b/app/views/shared/_lyrics_modal.html.slim deleted file mode 100644 index 9a498192..00000000 --- a/app/views/shared/_lyrics_modal.html.slim +++ /dev/null @@ -1,7 +0,0 @@ -#lyrics_modal.modal.hide.fade - .modal-header - button.close type='button' data-dismiss='modal' aria-hidden='true' × - h3 - span#lyrics_title< [song] - .modal-body - p#lyrics_content diff --git a/app/views/shared/_save_playlist_dialog.html.slim b/app/views/shared/_save_playlist_dialog.html.slim new file mode 100644 index 00000000..fa903635 --- /dev/null +++ b/app/views/shared/_save_playlist_dialog.html.slim @@ -0,0 +1,17 @@ +#save_playlist_dialog.dialog title='Save Your Current Playlist' style='display:none;' + + .form-group + label[for="save_action_dropdown"] Action + select.form-control#save_action_dropdown + option#save_action_new[value="new"] Save as new playlist + option#save_action_existing[value="existing"] Update existing playlist + + .form-group + label[for="playlist_name_input"] Name + input.form-control#playlist_name_input[type="text" placeholder="Carini's Lumpy List"] + + .form-group + label[for="playlist_slug_input"] phish.in/play/ + input.form-control#playlist_slug_input[type="text" placeholder="carinis-lumpy-list"] + + button#save_playlist_submit.btn Save diff --git a/app/views/shared/_save_playlist_modal.html.slim b/app/views/shared/_save_playlist_modal.html.slim deleted file mode 100644 index f0126f37..00000000 --- a/app/views/shared/_save_playlist_modal.html.slim +++ /dev/null @@ -1,18 +0,0 @@ -#save_playlist_modal.modal.hide.fade - .modal-header - button.close type='button' data-dismiss='modal' aria-hidden='true' × - h3 Save Your Active Playlist - .modal-body - .field_label Action - .field_content - select#save_action_dropdown - option#save_action_new value='new' Save as new playlist - option#save_action_existing value='existing' Update existing playlist - .field_label Name - .field_content - input#playlist_name_input type='text' placeholder="Carini's Lumpy List" - .field_label phish.in/play/ - .field_content - input#playlist_slug_input type='text' placeholder='carinis-lumpy-list' - .modal-footer - button#save_playlist_submit.btn Save diff --git a/app/views/shared/_sort_filter.html.slim b/app/views/shared/_sort_filter.html.slim index 55206e48..e2b906bd 100644 --- a/app/views/shared/_sort_filter.html.slim +++ b/app/views/shared/_sort_filter.html.slim @@ -1,7 +1,7 @@ h3 - | Sort by  + |> Sort by .btn-group - a.btn.dropdown-toggle data-toggle='dropdown' href='null' - = sort_filter_link_title(item_hash) - span.caret< + button.btn.btn-default.dropdown-toggle type='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false' + => sort_filter_link_title(item_hash) + span.caret ul.dropdown-menu = sort_filter(item_hash) diff --git a/app/views/shared/_sort_songs_and_venues_filter.html.slim b/app/views/shared/_sort_songs_and_venues_filter.html.slim index f438fab0..48686d98 100644 --- a/app/views/shared/_sort_songs_and_venues_filter.html.slim +++ b/app/views/shared/_sort_songs_and_venues_filter.html.slim @@ -1,8 +1,7 @@ h3 - | Sort by  + |> Sort by .btn-group - a.btn.dropdown-toggle data-toggle='dropdown' href='null' - = sort_songs_title(item_hash) - span.caret< - ul.dropdown-menu - = sort_songs_and_venues_links(item_hash) + button.btn.btn-default.dropdown-toggle type='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false' + => sort_songs_title(item_hash) + span.caret + ul.dropdown-menu = sort_songs_and_venues_links(item_hash) diff --git a/app/views/shared/_tag_dialog.html.slim b/app/views/shared/_tag_dialog.html.slim new file mode 100644 index 00000000..5a613e17 --- /dev/null +++ b/app/views/shared/_tag_dialog.html.slim @@ -0,0 +1,2 @@ +#tag_dialog.dialog title='' style='display:none;' + #tag_detail diff --git a/app/views/shared/_tag_modal.html.slim b/app/views/shared/_tag_modal.html.slim deleted file mode 100644 index e3c608d2..00000000 --- a/app/views/shared/_tag_modal.html.slim +++ /dev/null @@ -1,8 +0,0 @@ -#tag_modal.modal.hide.fade - .modal-header - button.close type='button' data-dismiss='modal' aria-hidden='true' × - h3#tag_detail_title [title] - .modal-body - p#tag_detail - .modal-footer - a href='/tags' class='btn' data-dismiss='modal' View All Tags diff --git a/app/views/shared/_taper_notes_dialog.html.slim b/app/views/shared/_taper_notes_dialog.html.slim new file mode 100644 index 00000000..954ad410 --- /dev/null +++ b/app/views/shared/_taper_notes_dialog.html.slim @@ -0,0 +1,2 @@ +#taper_notes_dialog.dialog title='Taper Notes' style='display:none;' + #taper_notes_content diff --git a/app/views/shared/_taper_notes_modal.html.slim b/app/views/shared/_taper_notes_modal.html.slim deleted file mode 100644 index e8b10d49..00000000 --- a/app/views/shared/_taper_notes_modal.html.slim +++ /dev/null @@ -1,8 +0,0 @@ -#taper_notes_modal.modal.hide.fade - .modal-header - button.close type='button' data-dismiss='modal' aria-hidden='true' × - h3 - | Taper Notes for - span#taper_notes_date< [date] - .modal-body - pre#taper_notes_content diff --git a/app/views/songs/show.html.slim b/app/views/songs/show.html.slim index caf3183d..5cc0cfb3 100644 --- a/app/views/songs/show.html.slim +++ b/app/views/songs/show.html.slim @@ -21,16 +21,16 @@ br - if @song.lyrics.present? - = link_to "#{tag.i(class: 'icon-book')}  Lyrics".html_safe, '#', class: 'song_lyrics btn', data: { title: @song.title, lyrics: lyrics_for(@song) } + = link_to "#{tag.i(class: 'glyphicon glyphicon-book')}  Lyrics".html_safe, '#', class: 'song_lyrics btn btn-default', data: { title: @song.title, lyrics: lyrics_for(@song) } br - a.btn href="http://phish.net/song/#{@song.slug}/history" target='_blank' - i.icon.icon-share + a.btn.btn-default href="http://phish.net/song/#{@song.slug}/history" target='_blank' + i.glyphicon.glyphicon-share |   History br button#random_song_track_btn.btn type='button' data-song-id=@song.id - i.icon.icon-play + i.glyphicon.glyphicon-play |  Random Track .hr diff --git a/app/views/tags/index.html.slim b/app/views/tags/index.html.slim index b8b87869..3c830d0e 100644 --- a/app/views/tags/index.html.slim +++ b/app/views/tags/index.html.slim @@ -25,7 +25,7 @@ li h2 a href="/tags/#{tag.slug}" - .tag_container_small = tag_label(tag, 'no-modal') + .tag_container_small = tag_label(tag, 'no-dialog') h2.wider.small-font = truncate(tag.description, length: 70) h3.alt = tag.tracks_count.positive? ? pluralize_with_delimiter(tag.tracks_count, 'track') : '' h3.alt = tag.shows_count.positive? ? pluralize_with_delimiter(tag.shows_count, 'show') : '' diff --git a/bin/shakapacker b/bin/shakapacker new file mode 100755 index 00000000..13a008dc --- /dev/null +++ b/bin/shakapacker @@ -0,0 +1,13 @@ +#!/usr/bin/env ruby + +ENV["RAILS_ENV"] ||= "development" +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__) + +require "bundler/setup" +require "shakapacker" +require "shakapacker/webpack_runner" + +APP_ROOT = File.expand_path("..", __dir__) +Dir.chdir(APP_ROOT) do + Shakapacker::WebpackRunner.run(ARGV) +end diff --git a/bin/shakapacker-dev-server b/bin/shakapacker-dev-server new file mode 100755 index 00000000..5ae88979 --- /dev/null +++ b/bin/shakapacker-dev-server @@ -0,0 +1,13 @@ +#!/usr/bin/env ruby + +ENV["RAILS_ENV"] ||= "development" +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__) + +require "bundler/setup" +require "shakapacker" +require "shakapacker/dev_server_runner" + +APP_ROOT = File.expand_path("..", __dir__) +Dir.chdir(APP_ROOT) do + Shakapacker::DevServerRunner.run(ARGV) +end diff --git a/bin/yarn b/bin/yarn new file mode 100755 index 00000000..fe733862 --- /dev/null +++ b/bin/yarn @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby + +APP_ROOT = File.expand_path("..", __dir__) +Dir.chdir(APP_ROOT) do + yarn = ENV["PATH"].split(File::PATH_SEPARATOR). + select { |dir| File.expand_path(dir) != __dir__ }. + product(["yarn", "yarnpkg", "yarn.cmd", "yarn.ps1"]). + map { |dir, file| File.expand_path(file, dir) }. + find { |file| File.executable?(file) } + + if yarn + exec yarn, *ARGV + else + $stderr.puts "Yarn executable was not detected in the system." + $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install" + exit 1 + end +end diff --git a/config/application.rb b/config/application.rb index 8cb608fb..3f9bd5d4 100644 --- a/config/application.rb +++ b/config/application.rb @@ -5,7 +5,6 @@ require 'action_mailer/railtie' require 'action_view/railtie' require 'active_record/railtie' -require 'sprockets/railtie' Bundler.require(*Rails.groups) diff --git a/config/environments/development.rb b/config/environments/development.rb index 60d35020..f7ad283f 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -25,10 +25,6 @@ # Only use best-standards-support built into browsers config.action_dispatch.best_standards_support = :builtin - # Expands the lines which load the assets - config.assets.debug = true - config.assets.check_precompiled_asset = false - config.action_mailer.default_url_options = { host: 'localhost:3000' } config.action_mailer.smtp_settings = { user_name: ENV.fetch('SMTP_USERNAME', nil), diff --git a/config/environments/production.rb b/config/environments/production.rb index 062a251b..fdca9815 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -11,18 +11,6 @@ # Disable Rails's static asset server (Apache or nginx will already do this) config.serve_static_assets = false - # Compress JavaScripts and CSS - config.assets.js_compressor = :uglifier - - # Fallback to assets pipeline if a precompiled asset is missed - config.assets.compile = true - - # Generate digests for assets URLs - config.assets.digest = true - - # Defaults to nil and saved in location specified by config.assets.prefix - # config.assets.manifest = YOUR_PATH - # Specifies the header that your server uses for sending files # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx @@ -47,9 +35,6 @@ # Enable serving of images, stylesheets, and JavaScripts from an asset server # config.action_controller.asset_host = "http://assets.example.com" - # Precompile additional assets - # config.assets.precompile += %w( search.js ) - # Disable delivery errors, bad email addresses will be ignored # config.action_mailer.raise_delivery_errors = false diff --git a/config/shakapacker.yml b/config/shakapacker.yml new file mode 100644 index 00000000..c248b842 --- /dev/null +++ b/config/shakapacker.yml @@ -0,0 +1,47 @@ +default: &default + source_path: app/javascript + source_entry_path: packs + nested_entries: true + css_extract_ignore_order_warnings: false + public_root_path: public + public_output_path: packs + cache_path: tmp/shakapacker + webpack_compile_output: true + shakapacker_precompile: true + additional_paths: ['vendor/assets/javascripts'] + cache_manifest: false + webpack_loader: 'babel' + ensure_consistent_versioning: false + compiler_strategy: digest + useContentHash: false + +development: + <<: *default + compile: true + compiler_strategy: mtime + dev_server: + host: localhost + port: 3035 + hmr: false + inline_css: true + client: + overlay: true + compress: true + allowed_hosts: 'auto' + pretty: true + headers: + 'Access-Control-Allow-Origin': '*' + static: + watch: + ignored: '**/node_modules/**' + +test: + <<: *default + compile: true + public_output_path: packs-test + +production: + <<: *default + compile: false + useContentHash: true + cache_manifest: true diff --git a/config/webpack/webpack.config.js b/config/webpack/webpack.config.js new file mode 100644 index 00000000..0d89c29f --- /dev/null +++ b/config/webpack/webpack.config.js @@ -0,0 +1,6 @@ +// See the shakacode/shakapacker README and docs directory for advice on customizing your webpackConfig. +const { generateWebpackConfig } = require('shakapacker') + +const webpackConfig = generateWebpackConfig() + +module.exports = webpackConfig diff --git a/package.json b/package.json new file mode 100644 index 00000000..d12346f7 --- /dev/null +++ b/package.json @@ -0,0 +1,46 @@ +{ + "name": "app", + "private": true, + "dependencies": { + "@babel/core": "7", + "@babel/plugin-transform-runtime": "7", + "@babel/preset-env": "7", + "@babel/runtime": "7", + "@types/babel__core": "7", + "@types/webpack": "5", + "babel-loader": "8", + "bootstrap": "3.4.1", + "coffee-loader": "^4.0.0", + "coffeescript": "^2.7.0", + "compression-webpack-plugin": "9", + "css-loader": "^6.8.1", + "css-minimizer-webpack-plugin": "^5.0.1", + "jquery": "^3.7.1", + "jquery-ui": "^1.13.2", + "jquery-ujs": "^1.2.3", + "jquery.cookie": "^1.4.1", + "mini-css-extract-plugin": "^2.7.6", + "sass": "^1.68.0", + "sass-loader": "^13.3.2", + "shakapacker": "7.1.0", + "soundmanager2": "^2.97.20170602", + "style-loader": "^3.3.3", + "terser-webpack-plugin": "5", + "webpack": "5", + "webpack-assets-manifest": "5", + "webpack-cli": "4", + "webpack-merge": "5" + }, + "version": "0.1.0", + "babel": { + "presets": [ + "./node_modules/shakapacker/package/babel/preset.js" + ] + }, + "browserslist": [ + "defaults" + ], + "devDependencies": { + "webpack-dev-server": "4" + } +} diff --git a/spec/features/show_context_menus_spec.rb b/spec/features/show_context_menus_spec.rb index 05747c09..6c430639 100644 --- a/spec/features/show_context_menus_spec.rb +++ b/spec/features/show_context_menus_spec.rb @@ -9,12 +9,11 @@ sleep(1) first('.show-context-dropdown').click - expect_content('Lookup at phish.net') - click_link('Add to playlist') expect_content('Tracks from show added to playlist') + first('.show-context-dropdown').click click_link('Share') expect_content('Link copied to clipboard') end diff --git a/vendor/assets/javascripts/jquery.cookie.js b/vendor/assets/javascripts/jquery.cookie.js deleted file mode 100644 index a845cd5c..00000000 --- a/vendor/assets/javascripts/jquery.cookie.js +++ /dev/null @@ -1,117 +0,0 @@ -/*! - * jQuery Cookie Plugin v1.4.1 - * https://github.com/carhartl/jquery-cookie - * - * Copyright 2013 Klaus Hartl - * Released under the MIT license - */ -(function (factory) { - if (typeof define === 'function' && define.amd) { - // AMD - define(['jquery'], factory); - } else if (typeof exports === 'object') { - // CommonJS - factory(require('jquery')); - } else { - // Browser globals - factory(jQuery); - } -}(function ($) { - - var pluses = /\+/g; - - function encode(s) { - return config.raw ? s : encodeURIComponent(s); - } - - function decode(s) { - return config.raw ? s : decodeURIComponent(s); - } - - function stringifyCookieValue(value) { - return encode(config.json ? JSON.stringify(value) : String(value)); - } - - function parseCookieValue(s) { - if (s.indexOf('"') === 0) { - // This is a quoted cookie as according to RFC2068, unescape... - s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); - } - - try { - // Replace server-side written pluses with spaces. - // If we can't decode the cookie, ignore it, it's unusable. - // If we can't parse the cookie, ignore it, it's unusable. - s = decodeURIComponent(s.replace(pluses, ' ')); - return config.json ? JSON.parse(s) : s; - } catch(e) {} - } - - function read(s, converter) { - var value = config.raw ? s : parseCookieValue(s); - return $.isFunction(converter) ? converter(value) : value; - } - - var config = $.cookie = function (key, value, options) { - - // Write - - if (value !== undefined && !$.isFunction(value)) { - options = $.extend({}, config.defaults, options); - - if (typeof options.expires === 'number') { - var days = options.expires, t = options.expires = new Date(); - t.setTime(+t + days * 864e+5); - } - - return (document.cookie = [ - encode(key), '=', stringifyCookieValue(value), - options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE - options.path ? '; path=' + options.path : '', - options.domain ? '; domain=' + options.domain : '', - options.secure ? '; secure' : '' - ].join('')); - } - - // Read - - var result = key ? undefined : {}; - - // To prevent the for loop in the first place assign an empty array - // in case there are no cookies at all. Also prevents odd result when - // calling $.cookie(). - var cookies = document.cookie ? document.cookie.split('; ') : []; - - for (var i = 0, l = cookies.length; i < l; i++) { - var parts = cookies[i].split('='); - var name = decode(parts.shift()); - var cookie = parts.join('='); - - if (key && key === name) { - // If second argument (value) is a function it's a converter... - result = read(cookie, value); - break; - } - - // Prevent storing a cookie that we couldn't decode. - if (!key && (cookie = read(cookie)) !== undefined) { - result[name] = cookie; - } - } - - return result; - }; - - config.defaults = {}; - - $.removeCookie = function (key, options) { - if ($.cookie(key) === undefined) { - return false; - } - - // Must not alter options, thus extending a fresh object... - $.cookie(key, '', $.extend({}, options, { expires: -1 })); - return !$.cookie(key); - }; - -})); diff --git a/vendor/assets/javascripts/native.history.js b/vendor/assets/javascripts/native.history.js deleted file mode 100644 index bb23acd4..00000000 --- a/vendor/assets/javascripts/native.history.js +++ /dev/null @@ -1 +0,0 @@ -(function(e,t){"use strict";var n=e.History=e.History||{};if(typeof n.Adapter!="undefined")throw new Error("History.js Adapter has already been loaded...");n.Adapter={handlers:{},_uid:1,uid:function(e){return e._uid||(e._uid=n.Adapter._uid++)},bind:function(e,t,r){var i=n.Adapter.uid(e);n.Adapter.handlers[i]=n.Adapter.handlers[i]||{},n.Adapter.handlers[i][t]=n.Adapter.handlers[i][t]||[],n.Adapter.handlers[i][t].push(r),e["on"+t]=function(e,t){return function(r){n.Adapter.trigger(e,t,r)}}(e,t)},trigger:function(e,t,r){r=r||{};var i=n.Adapter.uid(e),s,o;n.Adapter.handlers[i]=n.Adapter.handlers[i]||{},n.Adapter.handlers[i][t]=n.Adapter.handlers[i][t]||[];for(s=0,o=n.Adapter.handlers[i][t].length;s")&&n[0]);return e>4?e:!1}();return e},h.isInternetExplorer=function(){var e=h.isInternetExplorer.cached=typeof h.isInternetExplorer.cached!="undefined"?h.isInternetExplorer.cached:Boolean(h.getInternetExplorerMajorVersion());return e},h.options.html4Mode?h.emulated={pushState:!0,hashChange:!0}:h.emulated={pushState:!Boolean(e.history&&e.history.pushState&&e.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(i.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(i.userAgent)),hashChange:Boolean(!("onhashchange"in e||"onhashchange"in r)||h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8)},h.enabled=!h.emulated.pushState,h.bugs={setHash:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),safariPoll:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),ieDoubleCheck:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<7)},h.isEmptyObject=function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},h.cloneObject=function(e){var t,n;return e?(t=l.stringify(e),n=l.parse(t)):n={},n},h.getRootUrl=function(){var e=r.location.protocol+"//"+(r.location.hostname||r.location.host);if(r.location.port||!1)e+=":"+r.location.port;return e+="/",e},h.getBaseHref=function(){var e=r.getElementsByTagName("base"),t=null,n="";return e.length===1&&(t=e[0],n=t.href.replace(/[^\/]+$/,"")),n=n.replace(/\/+$/,""),n&&(n+="/"),n},h.getBaseUrl=function(){var e=h.getBaseHref()||h.getBasePageUrl()||h.getRootUrl();return e},h.getPageUrl=function(){var e=h.getState(!1,!1),t=(e||{}).url||h.getLocationHref(),n;return n=t.replace(/\/+$/,"").replace(/[^\/]+$/,function(e,t,n){return/\./.test(e)?e:e+"/"}),n},h.getBasePageUrl=function(){var e=h.getLocationHref().replace(/[#\?].*/,"").replace(/[^\/]+$/,function(e,t,n){return/[^\/]$/.test(e)?"":e}).replace(/\/+$/,"")+"/";return e},h.getFullUrl=function(e,t){var n=e,r=e.substring(0,1);return t=typeof t=="undefined"?!0:t,/[a-z]+\:\/\//.test(e)||(r==="/"?n=h.getRootUrl()+e.replace(/^\/+/,""):r==="#"?n=h.getPageUrl().replace(/#.*/,"")+e:r==="?"?n=h.getPageUrl().replace(/[\?#].*/,"")+e:t?n=h.getBaseUrl()+e.replace(/^(\.\/)+/,""):n=h.getBasePageUrl()+e.replace(/^(\.\/)+/,"")),n.replace(/\#$/,"")},h.getShortUrl=function(e){var t=e,n=h.getBaseUrl(),r=h.getRootUrl();return h.emulated.pushState&&(t=t.replace(n,"")),t=t.replace(r,"/"),h.isTraditionalAnchor(t)&&(t="./"+t),t=t.replace(/^(\.\/)+/g,"./").replace(/\#$/,""),t},h.getLocationHref=function(e){return e=e||r,e.URL===e.location.href?e.location.href:e.location.href===decodeURIComponent(e.URL)?e.URL:e.location.hash&&decodeURIComponent(e.location.href.replace(/^[^#]+/,""))===e.location.hash?e.location.href:e.URL.indexOf("#")==-1&&e.location.href.indexOf("#")!=-1?e.location.href:e.URL||e.location.href},h.store={},h.idToState=h.idToState||{},h.stateToId=h.stateToId||{},h.urlToId=h.urlToId||{},h.storedStates=h.storedStates||[],h.savedStates=h.savedStates||[],h.normalizeStore=function(){h.store.idToState=h.store.idToState||{},h.store.urlToId=h.store.urlToId||{},h.store.stateToId=h.store.stateToId||{}},h.getState=function(e,t){typeof e=="undefined"&&(e=!0),typeof t=="undefined"&&(t=!0);var n=h.getLastSavedState();return!n&&t&&(n=h.createStateObject()),e&&(n=h.cloneObject(n),n.url=n.cleanUrl||n.url),n},h.getIdByState=function(e){var t=h.extractId(e.url),n;if(!t){n=h.getStateString(e);if(typeof h.stateToId[n]!="undefined")t=h.stateToId[n];else if(typeof h.store.stateToId[n]!="undefined")t=h.store.stateToId[n];else{for(;;){t=(new Date).getTime()+String(Math.random()).replace(/\D/g,"");if(typeof h.idToState[t]=="undefined"&&typeof h.store.idToState[t]=="undefined")break}h.stateToId[n]=t,h.idToState[t]=e}}return t},h.normalizeState=function(e){var t,n;if(!e||typeof e!="object")e={};if(typeof e.normalized!="undefined")return e;if(!e.data||typeof e.data!="object")e.data={};return t={},t.normalized=!0,t.title=e.title||"",t.url=h.getFullUrl(e.url?e.url:h.getLocationHref()),t.hash=h.getShortUrl(t.url),t.data=h.cloneObject(e.data),t.id=h.getIdByState(t),t.cleanUrl=t.url.replace(/\??\&_suid.*/,""),t.url=t.cleanUrl,n=!h.isEmptyObject(t.data),(t.title||n)&&h.options.disableSuid!==!0&&(t.hash=h.getShortUrl(t.url).replace(/\??\&_suid.*/,""),/\?/.test(t.hash)||(t.hash+="?"),t.hash+="&_suid="+t.id),t.hashedUrl=h.getFullUrl(t.hash),(h.emulated.pushState||h.bugs.safariPoll)&&h.hasUrlDuplicate(t)&&(t.url=t.hashedUrl),t},h.createStateObject=function(e,t,n){var r={data:e,title:t,url:n};return r=h.normalizeState(r),r},h.getStateById=function(e){e=String(e);var n=h.idToState[e]||h.store.idToState[e]||t;return n},h.getStateString=function(e){var t,n,r;return t=h.normalizeState(e),n={data:t.data,title:e.title,url:e.url},r=l.stringify(n),r},h.getStateId=function(e){var t,n;return t=h.normalizeState(e),n=t.id,n},h.getHashByState=function(e){var t,n;return t=h.normalizeState(e),n=t.hash,n},h.extractId=function(e){var t,n,r,i;return e.indexOf("#")!=-1?i=e.split("#")[0]:i=e,n=/(.*)\&_suid=([0-9]+)$/.exec(i),r=n?n[1]||e:e,t=n?String(n[2]||""):"",t||!1},h.isTraditionalAnchor=function(e){var t=!/[\/\?\.]/.test(e);return t},h.extractState=function(e,t){var n=null,r,i;return t=t||!1,r=h.extractId(e),r&&(n=h.getStateById(r)),n||(i=h.getFullUrl(e),r=h.getIdByUrl(i)||!1,r&&(n=h.getStateById(r)),!n&&t&&!h.isTraditionalAnchor(e)&&(n=h.createStateObject(null,null,i))),n},h.getIdByUrl=function(e){var n=h.urlToId[e]||h.store.urlToId[e]||t;return n},h.getLastSavedState=function(){return h.savedStates[h.savedStates.length-1]||t},h.getLastStoredState=function(){return h.storedStates[h.storedStates.length-1]||t},h.hasUrlDuplicate=function(e){var t=!1,n;return n=h.extractState(e.url),t=n&&n.id!==e.id,t},h.storeState=function(e){return h.urlToId[e.url]=e.id,h.storedStates.push(h.cloneObject(e)),e},h.isLastSavedState=function(e){var t=!1,n,r,i;return h.savedStates.length&&(n=e.id,r=h.getLastSavedState(),i=r.id,t=n===i),t},h.saveState=function(e){return h.isLastSavedState(e)?!1:(h.savedStates.push(h.cloneObject(e)),!0)},h.getStateByIndex=function(e){var t=null;return typeof e=="undefined"?t=h.savedStates[h.savedStates.length-1]:e<0?t=h.savedStates[h.savedStates.length+e]:t=h.savedStates[e],t},h.getCurrentIndex=function(){var e=null;return h.savedStates.length<1?e=0:e=h.savedStates.length-1,e},h.getHash=function(e){var t=h.getLocationHref(e),n;return n=h.getHashByUrl(t),n},h.unescapeHash=function(e){var t=h.normalizeHash(e);return t=decodeURIComponent(t),t},h.normalizeHash=function(e){var t=e.replace(/[^#]*#/,"").replace(/#.*/,"");return t},h.setHash=function(e,t){var n,i;return t!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.setHash,args:arguments,queue:t}),!1):(h.busy(!0),n=h.extractState(e,!0),n&&!h.emulated.pushState?h.pushState(n.data,n.title,n.url,!1):h.getHash()!==e&&(h.bugs.setHash?(i=h.getPageUrl(),h.pushState(null,null,i+"#"+e,!1)):r.location.hash=e),h)},h.escapeHash=function(t){var n=h.normalizeHash(t);return n=e.encodeURIComponent(n),h.bugs.hashEscape||(n=n.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),n},h.getHashByUrl=function(e){var t=String(e).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return t=h.unescapeHash(t),t},h.setTitle=function(e){var t=e.title,n;t||(n=h.getStateByIndex(0),n&&n.url===e.url&&(t=n.title||h.options.initialTitle));try{r.getElementsByTagName("title")[0].innerHTML=t.replace("<","<").replace(">",">").replace(" & "," & ")}catch(i){}return r.title=t,h},h.queues=[],h.busy=function(e){typeof e!="undefined"?h.busy.flag=e:typeof h.busy.flag=="undefined"&&(h.busy.flag=!1);if(!h.busy.flag){u(h.busy.timeout);var t=function(){var e,n,r;if(h.busy.flag)return;for(e=h.queues.length-1;e>=0;--e){n=h.queues[e];if(n.length===0)continue;r=n.shift(),h.fireQueueItem(r),h.busy.timeout=o(t,h.options.busyDelay)}};h.busy.timeout=o(t,h.options.busyDelay)}return h.busy.flag},h.busy.flag=!1,h.fireQueueItem=function(e){return e.callback.apply(e.scope||h,e.args||[])},h.pushQueue=function(e){return h.queues[e.queue||0]=h.queues[e.queue||0]||[],h.queues[e.queue||0].push(e),h},h.queue=function(e,t){return typeof e=="function"&&(e={callback:e}),typeof t!="undefined"&&(e.queue=t),h.busy()?h.pushQueue(e):h.fireQueueItem(e),h},h.clearQueue=function(){return h.busy.flag=!1,h.queues=[],h},h.stateChanged=!1,h.doubleChecker=!1,h.doubleCheckComplete=function(){return h.stateChanged=!0,h.doubleCheckClear(),h},h.doubleCheckClear=function(){return h.doubleChecker&&(u(h.doubleChecker),h.doubleChecker=!1),h},h.doubleCheck=function(e){return h.stateChanged=!1,h.doubleCheckClear(),h.bugs.ieDoubleCheck&&(h.doubleChecker=o(function(){return h.doubleCheckClear(),h.stateChanged||e(),!0},h.options.doubleCheckInterval)),h},h.safariStatePoll=function(){var t=h.extractState(h.getLocationHref()),n;if(!h.isLastSavedState(t))return n=t,n||(n=h.createStateObject()),h.Adapter.trigger(e,"popstate"),h;return},h.back=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.back,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.back(!1)}),p.go(-1),!0)},h.forward=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.forward,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.forward(!1)}),p.go(1),!0)},h.go=function(e,t){var n;if(e>0)for(n=1;n<=e;++n)h.forward(t);else{if(!(e<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(n=-1;n>=e;--n)h.back(t)}return h};if(h.emulated.pushState){var v=function(){};h.pushState=h.pushState||v,h.replaceState=h.replaceState||v}else h.onPopState=function(t,n){var r=!1,i=!1,s,o;return h.doubleCheckComplete(),s=h.getHash(),s?(o=h.extractState(s||h.getLocationHref(),!0),o?h.replaceState(o.data,o.title,o.url,!1):(h.Adapter.trigger(e,"anchorchange"),h.busy(!1)),h.expectedStateId=!1,!1):(r=h.Adapter.extractEventData("state",t,n)||!1,r?i=h.getStateById(r):h.expectedStateId?i=h.getStateById(h.expectedStateId):i=h.extractState(h.getLocationHref()),i||(i=h.createStateObject(null,null,h.getLocationHref())),h.expectedStateId=!1,h.isLastSavedState(i)?(h.busy(!1),!1):(h.storeState(i),h.saveState(i),h.setTitle(i),h.Adapter.trigger(e,"statechange"),h.busy(!1),!0))},h.Adapter.bind(e,"popstate",h.onPopState),h.pushState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.pushState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.pushState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0},h.replaceState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.replaceState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.replaceState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0};if(s){try{h.store=l.parse(s.getItem("History.store"))||{}}catch(m){h.store={}}h.normalizeStore()}else h.store={},h.normalizeStore();h.Adapter.bind(e,"unload",h.clearAllIntervals),h.saveState(h.storeState(h.extractState(h.getLocationHref(),!0))),s&&(h.onUnload=function(){var e,t,n;try{e=l.parse(s.getItem("History.store"))||{}}catch(r){e={}}e.idToState=e.idToState||{},e.urlToId=e.urlToId||{},e.stateToId=e.stateToId||{};for(t in h.idToState){if(!h.idToState.hasOwnProperty(t))continue;e.idToState[t]=h.idToState[t]}for(t in h.urlToId){if(!h.urlToId.hasOwnProperty(t))continue;e.urlToId[t]=h.urlToId[t]}for(t in h.stateToId){if(!h.stateToId.hasOwnProperty(t))continue;e.stateToId[t]=h.stateToId[t]}h.store=e,h.normalizeStore(),n=l.stringify(e);try{s.setItem("History.store",n)}catch(i){if(i.code!==DOMException.QUOTA_EXCEEDED_ERR)throw i;s.length&&(s.removeItem("History.store"),s.setItem("History.store",n))}},h.intervalList.push(a(h.onUnload,h.options.storeInterval)),h.Adapter.bind(e,"beforeunload",h.onUnload),h.Adapter.bind(e,"unload",h.onUnload));if(!h.emulated.pushState){h.bugs.safariPoll&&h.intervalList.push(a(h.safariStatePoll,h.options.safariPollInterval));if(i.vendor==="Apple Computer, Inc."||(i.appCodeName||"")==="Mozilla")h.Adapter.bind(e,"hashchange",function(){h.Adapter.trigger(e,"popstate")}),h.getHash()&&h.Adapter.onDomLoad(function(){h.Adapter.trigger(e,"hashchange")})}},(!h.options||!h.options.delayInit)&&h.init()}(window) \ No newline at end of file diff --git a/vendor/assets/javascripts/spin.min.js b/vendor/assets/javascripts/spin.min.js deleted file mode 100644 index 7fc8fa6b..00000000 --- a/vendor/assets/javascripts/spin.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(t,e){if(typeof exports=="object")module.exports=e();else if(typeof define=="function"&&define.amd)define(e);else t.Spinner=e()})(this,function(){"use strict";var t=["webkit","Moz","ms","O"],e={},i;function o(t,e){var i=document.createElement(t||"div"),o;for(o in e)i[o]=e[o];return i}function n(t){for(var e=1,i=arguments.length;e>1):parseInt(n.left,10)+s)+"px",top:(n.top=="auto"?l.y-a.y+(t.offsetHeight>>1):parseInt(n.top,10)+s)+"px"})}r.setAttribute("role","progressbar");e.lines(r,e.opts);if(!i){var u=0,p=(n.lines-1)*(1-n.direction)/2,c,h=n.fps,m=h/n.speed,y=(1-n.opacity)/(m*n.trail/100),g=m/n.lines;(function v(){u++;for(var t=0;t>1)+"px"})}for(;r',e)}r.addRule(".spin-vml","behavior:url(#default#VML)");p.prototype.lines=function(e,i){var o=i.length+i.width,r=2*o;function s(){return f(t("group",{coordsize:r+" "+r,coordorigin:-o+" "+-o}),{width:r,height:r})}var a=-(i.width+i.length)*2+"px",l=f(s(),{position:"absolute",top:a,left:a}),d;function u(e,r,a){n(l,n(f(s(),{rotation:360/i.lines*e+"deg",left:~~r}),n(f(t("roundrect",{arcsize:i.corners}),{width:o,height:i.width,left:i.radius,top:-i.width>>1,filter:a}),t("fill",{color:i.color,opacity:i.opacity}),t("stroke",{opacity:0}))))}if(i.shadow)for(d=1;d<=i.lines;d++)u(d,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(d=1;d<=i.lines;d++)u(d);return n(e,l)};p.prototype.opacity=function(t,e,i,o){var n=t.firstChild;o=o.shadow&&o.lines||0;if(n&&e+o=3.0.0 <4.0.0", chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +coffee-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/coffee-loader/-/coffee-loader-4.0.0.tgz#85284b489b0a63963da2b52e372111edf0565617" + integrity sha512-RvgC8c0JwRew5lq3x2J+P4z9Cvan/v91muEvV90VJXcTuJbJQN20taZxfj6/XC4yysA8PInPGpxdB1J9LphLuQ== + +coffeescript@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.7.0.tgz#a43ec03be6885d6d1454850ea70b9409c391279c" + integrity sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + 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 sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +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== + +colord@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^2.0.10, colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^7.0.0, commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression-webpack-plugin@9: + version "9.2.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz#57fd539d17c5907eebdeb4e83dcfe2d7eceb9ef6" + integrity sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw== + dependencies: + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-js-compat@^3.31.0, core-js-compat@^3.32.2: + version "3.33.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.0.tgz#24aa230b228406450b2277b7c8bfebae932df966" + integrity sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw== + dependencies: + browserslist "^4.22.1" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-declaration-sorter@^6.3.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" + integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== + +css-loader@^6.8.1: + version "6.8.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" + integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.21" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.3" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.8" + +css-minimizer-webpack-plugin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565" + integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + cssnano "^6.0.1" + jest-worker "^29.4.3" + postcss "^8.4.24" + schema-utils "^4.0.1" + serialize-javascript "^6.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz#2a93247140d214ddb9f46bc6a3562fa9177fe301" + integrity sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ== + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^4.0.0" + postcss-calc "^9.0.0" + postcss-colormin "^6.0.0" + postcss-convert-values "^6.0.0" + postcss-discard-comments "^6.0.0" + postcss-discard-duplicates "^6.0.0" + postcss-discard-empty "^6.0.0" + postcss-discard-overridden "^6.0.0" + postcss-merge-longhand "^6.0.0" + postcss-merge-rules "^6.0.1" + postcss-minify-font-values "^6.0.0" + postcss-minify-gradients "^6.0.0" + postcss-minify-params "^6.0.0" + postcss-minify-selectors "^6.0.0" + postcss-normalize-charset "^6.0.0" + postcss-normalize-display-values "^6.0.0" + postcss-normalize-positions "^6.0.0" + postcss-normalize-repeat-style "^6.0.0" + postcss-normalize-string "^6.0.0" + postcss-normalize-timing-functions "^6.0.0" + postcss-normalize-unicode "^6.0.0" + postcss-normalize-url "^6.0.0" + postcss-normalize-whitespace "^6.0.0" + postcss-ordered-values "^6.0.0" + postcss-reduce-initial "^6.0.0" + postcss-reduce-transforms "^6.0.0" + postcss-svgo "^6.0.0" + postcss-unique-selectors "^6.0.0" + +cssnano-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.0.tgz#d1da885ec04003ab19505ff0e62e029708d36b08" + integrity sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw== + +cssnano@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.0.1.tgz#87c38c4cd47049c735ab756d7e77ac3ca855c008" + integrity sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg== + dependencies: + cssnano-preset-default "^6.0.1" + lilconfig "^2.1.0" + +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + +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== + dependencies: + ms "2.0.0" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deepmerge@^4.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.535: + version "1.4.540" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.540.tgz#c685f2f035e93eb21dd6a9cfe2c735bad8f77401" + integrity sha512-aoCqgU6r9+o9/S7wkcSbmPRFi7OWZWiXS9rtjEd+Ouyu/Xyw5RSq2XN8s5Qp8IaFOLiRrhQCphCIjAxgG3eCAg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +enhanced-resolve@^5.15.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +envinfo@^7.7.3: + version "7.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" + integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== + +es-module-lexer@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.1.tgz#c1b0dd5ada807a3b3155315911f364dc4e909db1" + integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +express@^4.17.3: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + 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== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.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" + +follow-redirects@^1.0.0: + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-monkey@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" + integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.1.3, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +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-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" + integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +immutable@^4.0.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^29.4.3: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jquery-ui@^1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.13.2.tgz#de03580ae6604773602f8d786ad1abfb75232034" + integrity sha512-wBZPnqWs5GaYJmo1Jj0k/mrSkzdQzKDwhXNtHKcBdAcKVxMM3KNYFq+iJ2i1rwiG53Z8M4mTn3Qxrm17uH1D4Q== + dependencies: + jquery ">=1.8.0 <4.0.0" + +jquery-ujs@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jquery-ujs/-/jquery-ujs-1.2.3.tgz#dcac6026ab7268e5ee41faf9d31c997cd4ddd603" + integrity sha512-59wvfx5vcCTHMeQT1/OwFiAj+UffLIwjRIoXdpO7Z7BCFGepzq9T9oLVeoItjTqjoXfUrHJvV7QU6pUR+UzOoA== + +jquery.cookie@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jquery.cookie/-/jquery.cookie-1.4.1.tgz#d63dce209eab691fe63316db08ca9e47e0f9385b" + integrity sha512-c/hZOOL+8VSw/FkTVH637gS1/6YzMSCROpTZ2qBYwJ7s7sHajU7uBkSSiE5+GXWwrfCCyO+jsYjUQ7Hs2rIxAA== + +"jquery@>=1.8.0 <4.0.0", jquery@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" + integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^2.1.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +launch-editor@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" + integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.7.3" + +lilconfig@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +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" + +lockfile@^1.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.get@^4.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + +lodash.has@^4.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" + integrity sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.4.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== + dependencies: + fs-monkey "^1.0.4" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +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" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "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@^2.7.6: + version "2.7.6" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" + integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== + dependencies: + schema-utils "^4.0.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-releases@^2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^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-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-complete-extname@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-complete-extname/-/path-complete-extname-1.0.0.tgz#f889985dc91000c815515c0bfed06c5acda0752b" + integrity sha512-CVjiWcMRdGU8ubs08YQVzhutOR5DEfO97ipRIlOGMK5Bek5nQySknBpuxVAVJ36hseTNs+vdIcv57ZrWxH7zvg== + +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" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.1.0, pkg-dir@^4.2.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" + +postcss-calc@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" + integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== + dependencies: + postcss-selector-parser "^6.0.11" + postcss-value-parser "^4.2.0" + +postcss-colormin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.0.0.tgz#d4250652e952e1c0aca70c66942da93d3cdeaafe" + integrity sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz#ec94a954957e5c3f78f0e8f65dfcda95280b8996" + integrity sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz#9ca335e8b68919f301b24ba47dde226a42e535fe" + integrity sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw== + +postcss-discard-duplicates@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz#c26177a6c33070922e67e9a92c0fd23d443d1355" + integrity sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA== + +postcss-discard-empty@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz#06c1c4fce09e22d2a99e667c8550eb8a3a1b9aee" + integrity sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ== + +postcss-discard-overridden@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz#49c5262db14e975e349692d9024442de7cd8e234" + integrity sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw== + +postcss-merge-longhand@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz#6f627b27db939bce316eaa97e22400267e798d69" + integrity sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^6.0.0" + +postcss-merge-rules@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz#39f165746404e646c0f5c510222ccde4824a86aa" + integrity sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + cssnano-utils "^4.0.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz#68d4a028f9fa5f61701974724b2cc9445d8e6070" + integrity sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz#22b5c88cc63091dadbad34e31ff958404d51d679" + integrity sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA== + dependencies: + colord "^2.9.1" + cssnano-utils "^4.0.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz#2b3a85a9e3b990d7a16866f430f5fd1d5961b539" + integrity sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ== + dependencies: + browserslist "^4.21.4" + cssnano-utils "^4.0.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz#5046c5e8680a586e5a0cad52cc9aa36d6be5bda2" + integrity sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" + integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz#36cc12457259064969fb96f84df491652a4b0975" + integrity sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ== + +postcss-normalize-display-values@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz#8d2961415078644d8c6bbbdaf9a2fdd60f546cd4" + integrity sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz#25b96df99a69f8925f730eaee0be74416865e301" + integrity sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz#ddf30ad8762feb5b1eb97f39f251acd7b8353299" + integrity sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz#948282647a51e409d69dde7910f0ac2ff97cb5d8" + integrity sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz#5f13e650b8c43351989fc5de694525cc2539841c" + integrity sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz#741b3310f874616bdcf07764f5503695d3604730" + integrity sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz#d0a31e962a16401fb7deb7754b397a323fb650b4" + integrity sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz#accb961caa42e25ca4179b60855b79b1f7129d4d" + integrity sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz#374704cdff25560d44061d17ba3c6308837a3218" + integrity sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg== + dependencies: + cssnano-utils "^4.0.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz#7d16e83e60e27e2fa42f56ec0b426f1da332eca7" + integrity sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz#28ff2601a6d9b96a2f039b3501526e1f4d584a46" + integrity sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5: + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.0.tgz#7b18742d38d4505a0455bbe70d52b49f00eaf69d" + integrity sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^3.0.2" + +postcss-unique-selectors@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz#c94e9b0f7bffb1203894e42294b5a1b3fb34fbe1" + integrity sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.4.21, postcss@^8.4.24: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.14.2, resolve@^1.9.0: + version "1.22.6" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" + integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-loader@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-13.3.2.tgz#460022de27aec772480f03de17f5ba88fa7e18c6" + integrity sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg== + dependencies: + neo-async "^2.6.2" + +sass@^1.68.0: + version "1.68.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.68.0.tgz#0034b0cc9a50248b7d1702ac166fd25990023669" + integrity sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0, schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0, schema-utils@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + dependencies: + node-forge "^1" + +semver@^6.0.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.8: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shakapacker@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/shakapacker/-/shakapacker-7.1.0.tgz#95bd37db60702ffa21f9ea29a88f438de3db25b2" + integrity sha512-xKfF4LKrFQdMLYeIi/uBV6pfkPTO4lgCAIMx3W5+MHW61ENOXu4WeQ50qVR9u5hV6XXzi7AiS7C6dWO2GFnYAg== + dependencies: + glob "^7.2.0" + js-yaml "^4.1.0" + path-complete-extname "^1.0.0" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +soundmanager2@^2.97.20170602: + version "2.97.20170602" + resolved "https://registry.yarnpkg.com/soundmanager2/-/soundmanager2-2.97.20170602.tgz#fe3bc731bfc4d54c1364e71980263e6816981879" + integrity sha512-2ee7ES9SJ++WkD7PGHMeT4QUuJr7uC3wacD6RoCDlKjdSp9lpEOaKm3lKWKld119DLILjS2l9U6xpXJN6U0KPQ== + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +style-loader@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" + integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== + +stylehacks@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.0.0.tgz#9fdd7c217660dae0f62e14d51c89f6c01b3cb738" + integrity sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw== + dependencies: + browserslist "^4.21.4" + postcss-selector-parser "^6.0.4" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svgo@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a" + integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.2.1" + csso "^5.0.5" + picocolors "^1.0.0" + +tapable@^2.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@5, terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.8" + +terser@^5.16.8: + version "5.21.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.21.0.tgz#d2b27e92b5e56650bc83b6defa00a110f0b124b2" + integrity sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webpack-assets-manifest@5: + version "5.1.0" + resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-5.1.0.tgz#5af328f6c8fa760cb9a62af631a83da2b478b791" + integrity sha512-kPuTMEjBrqZQVJ5M6yXNBCEdFbQQn7p+loNXt8NOeDFaAbsNFWqqwR0YL1mfG5LbwhK5FLXWXpuK3GuIIZ46rg== + dependencies: + chalk "^4.0" + deepmerge "^4.0" + lockfile "^1.0" + lodash.get "^4.0" + lodash.has "^4.0" + schema-utils "^3.0" + tapable "^2.0" + +webpack-cli@4: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" + colorette "^2.0.14" + commander "^7.0.0" + cross-spawn "^7.0.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@4: + version "4.15.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" + integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.5" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + +webpack-merge@5, webpack-merge@^5.7.3: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@5, webpack@^5: + version "5.88.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" + integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.15.0" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.7" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.13.0: + version "8.14.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== + +yallist@^3.0.2: + version "3.1.1" + 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==