diff --git a/.circleci/config.yml b/.circleci/config.yml
index 8c929a74133..82ce51fb0fc 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -5,6 +5,7 @@
version: 2.1
orbs:
+ browser-tools: circleci/browser-tools@1.1
jq: circleci/jq@2.2.0
slack: circleci/slack@3.4.2
executors:
@@ -12,7 +13,7 @@ executors:
ruby_browsers:
docker:
# Specify the Ruby version you desire here
- - image: circleci/ruby:2.7.3-node-browsers
+ - image: cimg/ruby:2.7.3-browsers
environment:
CIRCLE_CI: 'true'
RAILS_ENV: test
@@ -49,26 +50,26 @@ commands:
steps:
- restore_cache:
keys:
- - v1-identity-idp-yarn-{{ checksum "yarn.lock" }}
- - v1-identity-idp-yarn-
+ - v2-identity-idp-yarn-{{ checksum "yarn.lock" }}
+ - v2-identity-idp-yarn-
- run:
name: Install Yarn
command: yarn install --frozen-lockfile --ignore-engines --cache-folder ~/.cache/yarn
- save_cache:
- key: v1-identity-idp-yarn-{{ checksum "yarn.lock" }}
+ key: v2-identity-idp-yarn-{{ checksum "yarn.lock" }}
paths:
- ~/.cache/yarn
yarn-production-install:
steps:
- restore_cache:
keys:
- - v1-identity-idp-yarn-production-{{ checksum "yarn.lock" }}
- - v1-identity-idp-yarn-production
+ - v2-identity-idp-yarn-production-{{ checksum "yarn.lock" }}
+ - v2-identity-idp-yarn-production
- run:
name: Install Yarn
command: yarn install --production --frozen-lockfile --ignore-engines --cache-folder ~/.cache/yarn
- save_cache:
- key: v1-identity-idp-yarn-production-{{ checksum "yarn.lock" }}
+ key: v2-identity-idp-yarn-production-{{ checksum "yarn.lock" }}
paths:
- ~/.cache/yarn
@@ -77,13 +78,13 @@ commands:
- run: gem install bundler --version $BUNDLER_VERSION
- restore_cache:
keys:
- - v2-identity-idp-bundle-{{ checksum "Gemfile.lock" }}
+ - v3-identity-idp-bundle-{{ checksum "Gemfile.lock" }}
- run:
name: Install dependencies
command: |
bundle check || bundle install --deployment --jobs=4 --retry=3 --without deploy development doc production --path vendor/bundle
- save_cache:
- key: v2-identity-idp-bundle-{{ checksum "Gemfile.lock" }}
+ key: v3-identity-idp-bundle-{{ checksum "Gemfile.lock" }}
paths:
- vendor/bundle
# Custom version of "checkout" that checks out a SHA deployed to sha_url param
@@ -180,6 +181,7 @@ jobs:
working_directory: ~/identity-idp
steps:
+ - browser-tools/install-browser-tools
- checkout
- node-install
- yarn-install
@@ -188,7 +190,7 @@ jobs:
name: Install AWS CLI
command: |
sudo apt-get update
- sudo apt-get install python-pip python-dev jq
+ sudo apt-get install python3-pip python-dev jq
sudo pip install awscli
- run:
name: Install Code Climate Test Reporter
@@ -246,6 +248,7 @@ jobs:
working_directory: ~/identity-idp
executor: ruby_browsers
steps:
+ - browser-tools/install-browser-tools
- checkout
- node-install
- yarn-install
@@ -285,6 +288,7 @@ jobs:
environment:
MONITOR_ENV: DEV
steps:
+ - browser-tools/install-browser-tools
- jq/install
- checkout-deployed-sha:
sha_url: https://idp.dev.identitysandbox.gov/api/deploy.json
@@ -303,6 +307,7 @@ jobs:
environment:
MONITOR_ENV: INT
steps:
+ - browser-tools/install-browser-tools
- jq/install
- checkout-deployed-sha:
sha_url: https://idp.int.identitysandbox.gov/api/deploy.json
@@ -321,6 +326,7 @@ jobs:
environment:
MONITOR_ENV: STAGING
steps:
+ - browser-tools/install-browser-tools
- jq/install
- checkout-deployed-sha:
sha_url: https://idp.staging.login.gov/api/deploy.json
@@ -339,6 +345,7 @@ jobs:
environment:
MONITOR_ENV: PROD
steps:
+ - browser-tools/install-browser-tools
- checkout
- node-install
- yarn-install
diff --git a/Gemfile b/Gemfile
index b2071d4e144..2ae1fac3c20 100644
--- a/Gemfile
+++ b/Gemfile
@@ -25,8 +25,8 @@ gem 'aws-sdk-ses', '~> 1.6'
gem 'base32-crockford'
gem 'bootsnap', '~> 1.9.0', require: false
gem 'blueprinter', '~> 0.25.3'
+gem 'browser'
gem 'connection_pool'
-gem 'device_detector'
gem 'devise', '~> 4.8'
gem 'dotiw', '>= 4.0.1'
gem 'faraday'
@@ -38,6 +38,7 @@ gem 'http_accept_language'
gem 'jwt'
gem 'local_time'
gem 'lograge', '>= 0.11.2'
+gem 'lru_redux'
gem 'maxminddb'
gem 'net-sftp'
gem 'newrelic_rpm', '~> 7.0'
@@ -67,7 +68,6 @@ gem 'stringex', require: false
gem 'strong_migrations', '>= 0.4.2'
gem 'subprocess', require: false
gem 'uglifier', '~> 4.2'
-gem 'user_agent_parser'
gem 'valid_email', '>= 0.1.3'
gem 'view_component', '~> 2.40.0', require: 'view_component/engine'
gem 'webauthn', '~> 2.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index 4a5e744291e..9f3717fde32 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -181,6 +181,7 @@ GEM
bootsnap (1.9.1)
msgpack (~> 1.0)
brakeman (5.1.1)
+ browser (5.3.1)
builder (3.2.4)
bullet (6.1.5)
activesupport (>= 3.0.0)
@@ -357,6 +358,7 @@ GEM
loofah (2.12.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
+ lru_redux (1.1.0)
lumberjack (1.2.8)
macaddr (1.7.2)
systemu (~> 2.6.5)
@@ -421,7 +423,7 @@ GEM
pry (>= 0.10.4)
psych (3.2.1)
public_suffix (4.0.6)
- puma (5.3.2)
+ puma (5.5.1)
nio4r (~> 2.0)
raabro (1.4.0)
racc (1.5.2)
@@ -630,7 +632,6 @@ GEM
execjs (>= 0.3.0, < 3)
unicode-display_width (2.0.0)
uniform_notifier (1.14.2)
- user_agent_parser (2.7.0)
uuid (2.3.9)
macaddr (~> 1.0)
valid_email (0.1.3)
@@ -703,13 +704,13 @@ DEPENDENCIES
blueprinter (~> 0.25.3)
bootsnap (~> 1.9.0)
brakeman
+ browser
bullet (>= 6.0.2)
bundler-audit
capybara-screenshot (>= 1.0.23)
capybara-selenium (>= 0.0.6)
connection_pool
derailed_benchmarks (~> 1.8)
- device_detector
devise (~> 4.8)
dotiw (>= 4.0.1)
email_spec
@@ -734,6 +735,7 @@ DEPENDENCIES
knapsack
local_time
lograge (>= 0.11.2)
+ lru_redux
maxminddb
net-sftp
newrelic_rpm (~> 7.0)
@@ -789,7 +791,6 @@ DEPENDENCIES
strong_migrations (>= 0.4.2)
subprocess
uglifier (~> 4.2)
- user_agent_parser
valid_email (>= 0.1.3)
view_component (~> 2.40.0)
webauthn (~> 2.1)
diff --git a/Makefile b/Makefile
index e166803defe..ff7a5b1cc8c 100644
--- a/Makefile
+++ b/Makefile
@@ -51,7 +51,7 @@ lint:
bundle exec scss-lint
lint_erb:
- bundle exec erblint app/views
+ bundle exec erblint app/views app/components
lint_yaml: normalize_yaml
(! git diff --name-only | grep "^config/.*\.yml$$") || (echo "Error: Run 'make normalize_yaml' to normalize YAML"; exit 1)
diff --git a/app/assets/stylesheets/components/_file-input.scss b/app/assets/stylesheets/components/_file-input.scss
index 4f8403aca0d..85b951eb7c8 100644
--- a/app/assets/stylesheets/components/_file-input.scss
+++ b/app/assets/stylesheets/components/_file-input.scss
@@ -37,6 +37,7 @@
.usa-form-group--success .usa-file-input .usa-file-input__target {
border-color: color('success');
+ border-style: solid;
&:hover {
border-color: color('success-dark');
diff --git a/app/assets/stylesheets/components/_form.scss b/app/assets/stylesheets/components/_form.scss
index 30e31afa9f2..7d772cb2ae3 100644
--- a/app/assets/stylesheets/components/_form.scss
+++ b/app/assets/stylesheets/components/_form.scss
@@ -96,7 +96,12 @@ input::-webkit-inner-spin-button {
.usa-success-message {
@include u-padding-y(.5);
+ background-image: url(image-path('alert/success.svg'));
+ background-position: 0 center;
+ background-repeat: no-repeat;
+ background-size: 1rem;
color: color('success');
display: block;
font-weight: font-weight('bold');
+ padding-left: 1.5rem;
}
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index bf0adcdc009..f9075929691 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -395,7 +395,6 @@ def add_sp_cost(token)
end
def mobile?
- client = DeviceDetector.new(request.user_agent)
- client.device_type != 'desktop'
+ BrowserCache.parse(request.user_agent).mobile?
end
end
diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb
index b57e8649a23..c7b6e6f885f 100644
--- a/app/controllers/events_controller.rb
+++ b/app/controllers/events_controller.rb
@@ -22,9 +22,13 @@ def show
def device_and_events
user_id = current_user.id
- @events = DeviceTracking::ListDeviceEvents.call(user_id, device_id, 0, EVENTS_PAGE_SIZE).
- map(&:decorate)
- @device = Device.where(user_id: user_id).find(device_id)
+ device = Device.where(user_id: user_id).find(device_id)
+ return if !device
+
+ @events = Event.where(user_id: user_id, device_id: device.id).order(created_at: :desc).
+ limit(EVENTS_PAGE_SIZE).
+ map(&:decorate)
+ @device = device.decorate
end
def device_id
diff --git a/app/controllers/idv/confirmations_controller.rb b/app/controllers/idv/confirmations_controller.rb
index 91e46090ae9..46969fa1618 100644
--- a/app/controllers/idv/confirmations_controller.rb
+++ b/app/controllers/idv/confirmations_controller.rb
@@ -94,7 +94,7 @@ def generate_personal_key
end
def pending_profile?
- current_user.decorate.pending_profile?
+ current_user.pending_profile?
end
end
end
diff --git a/app/controllers/idv/gpo_controller.rb b/app/controllers/idv/gpo_controller.rb
index fa2244c56cd..ba417aeeec9 100644
--- a/app/controllers/idv/gpo_controller.rb
+++ b/app/controllers/idv/gpo_controller.rb
@@ -115,7 +115,7 @@ def confirmation_maker_perform
confirmation_maker = GpoConfirmationMaker.new(
pii: Pii::Cacher.new(current_user, user_session).fetch,
issuer: sp_session[:issuer],
- profile: current_user.decorate.pending_profile,
+ profile: current_user.pending_profile,
)
confirmation_maker.perform
confirmation_maker
diff --git a/app/controllers/users/forget_all_browsers_controller.rb b/app/controllers/users/forget_all_browsers_controller.rb
index ab8e41e12bf..544bfa3cfeb 100644
--- a/app/controllers/users/forget_all_browsers_controller.rb
+++ b/app/controllers/users/forget_all_browsers_controller.rb
@@ -7,7 +7,7 @@ def show
end
def destroy
- DeviceTracking::ForgetAllBrowsers.new(current_user).call
+ ForgetAllBrowsers.new(current_user).call
analytics.track_event(Analytics::FORGET_ALL_BROWSERS_SUBMITTED)
diff --git a/app/decorators/device_decorator.rb b/app/decorators/device_decorator.rb
index 491a4cd39b8..6b5b0bd56fa 100644
--- a/app/decorators/device_decorator.rb
+++ b/app/decorators/device_decorator.rb
@@ -1,5 +1,5 @@
DeviceDecorator = Struct.new(:device) do
- delegate :nice_name, :last_used_at, :id, to: :device
+ delegate :last_used_at, :id, to: :device
def last_sign_in_location_and_ip
I18n.t('account.index.sign_in_location_and_ip', location: last_location, ip: device.last_ip)
@@ -12,4 +12,13 @@ def last_location
def happened_at
device.last_used_at.utc
end
+
+ def nice_name
+ browser = BrowserCache.parse(device.user_agent)
+ I18n.t(
+ 'account.index.device',
+ browser: "#{browser.name} #{browser.version}",
+ os: "#{browser.platform.name} #{browser.platform.version.split('.').first}",
+ )
+ end
end
diff --git a/app/decorators/user_decorator.rb b/app/decorators/user_decorator.rb
index 6ec0cf2d5a8..3a7422f39e5 100644
--- a/app/decorators/user_decorator.rb
+++ b/app/decorators/user_decorator.rb
@@ -1,6 +1,8 @@
class UserDecorator
include ActionView::Helpers::DateHelper
+ delegate :pending_profile, to: :user
+
attr_reader :user
MAX_RECENT_EVENTS = 5
@@ -81,14 +83,6 @@ def pending_profile_requires_verification?
true
end
- def pending_profile?
- pending_profile.present?
- end
-
- def pending_profile
- user.profiles.verification_pending.order(created_at: :desc).first
- end
-
def identity_not_verified?
!identity_verified?
end
@@ -143,7 +137,8 @@ def identity_events
end
def recent_devices
- DeviceTracking::ListDevices.call(user.id, 0, MAX_RECENT_DEVICES).map(&:decorate)
+ @recent_devices ||= user.devices.order(last_used_at: :desc).limit(MAX_RECENT_DEVICES).
+ map(&:decorate)
end
def devices?
diff --git a/app/forms/openid_connect_token_form.rb b/app/forms/openid_connect_token_form.rb
index f7918dcfc62..17cc4b92187 100644
--- a/app/forms/openid_connect_token_form.rb
+++ b/app/forms/openid_connect_token_form.rb
@@ -22,6 +22,7 @@ class OpenidConnectTokenForm
in: [CLIENT_ASSERTION_TYPE],
if: :private_key_jwt?
+ validate :validate_expired
validate :validate_code
validate :validate_pkce_or_private_key_jwt
validate :validate_code_verifier, if: :pkce?
@@ -31,6 +32,7 @@ def initialize(params)
ATTRS.each do |key|
instance_variable_set(:"@#{key}", params[key])
end
+ @session_expiration = IdentityConfig.store.session_timeout_in_minutes.minutes.ago
@identity = find_identity_with_code
end
@@ -61,14 +63,12 @@ def url_options
private
- attr_reader :identity
+ attr_reader :identity, :session_expiration
def find_identity_with_code
return if code.blank? || code.include?("\x00")
- session_expiration = IdentityConfig.store.session_timeout_in_minutes.minutes.ago
@identity = ServiceProviderIdentity.where(session_uuid: code).
- where('updated_at >= ?', session_expiration).
order(updated_at: :desc).first
end
@@ -94,6 +94,12 @@ def validate_pkce_or_private_key_jwt
errors.add :code, t('openid_connect.token.errors.invalid_authentication')
end
+ def validate_expired
+ if identity&.updated_at && identity.updated_at < session_expiration
+ errors.add :code, t('openid_connect.token.errors.expired_code')
+ end
+ end
+
def validate_code
errors.add :code, t('openid_connect.token.errors.invalid_code') if identity.blank? ||
!identity.user
diff --git a/app/forms/verify_account_form.rb b/app/forms/verify_account_form.rb
index cadc3ce22f7..57b634c0df2 100644
--- a/app/forms/verify_account_form.rb
+++ b/app/forms/verify_account_form.rb
@@ -33,7 +33,7 @@ def submit
protected
def pending_profile
- @_pending_profile ||= user.decorate.pending_profile
+ @_pending_profile ||= user.pending_profile
end
def gpo_confirmation_code
@@ -66,6 +66,6 @@ def reset_sensitive_fields
end
def activate_profile
- Idv::ProfileActivator.new(user: user).call
+ user.pending_profile&.activate
end
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 51feb6c50ba..dae70e5e341 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -45,6 +45,6 @@ def cancel_link_text
end
def desktop_device?
- DeviceDetector.new(request.user_agent)&.device_type == 'desktop'
+ !BrowserCache.parse(request.user_agent).mobile?
end
end
diff --git a/app/models/device.rb b/app/models/device.rb
index 6ab102061b7..89941e00b1a 100644
--- a/app/models/device.rb
+++ b/app/models/device.rb
@@ -13,7 +13,11 @@ def decorate
DeviceDecorator.new(self)
end
- def device_name
- DeviceTracking::DeviceName.call(UserAgentParser::Parser.new, self)
+ # @return [Device]
+ def update_last_used_ip(remote_ip, now: Time.zone.now)
+ self.last_used_at = now
+ self.last_ip = remote_ip
+ save
+ self
end
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 4004cdb476c..e52f1a8e733 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -88,6 +88,14 @@ def active_profile
@_active_profile ||= profiles.verified.find(&:active?)
end
+ def pending_profile?
+ pending_profile.present?
+ end
+
+ def pending_profile
+ profiles.verification_pending.order(created_at: :desc).first
+ end
+
def default_phone_configuration
phone_configurations.order('made_default_at DESC NULLS LAST, created_at').first
end
diff --git a/app/presenters/idv/gpo_presenter.rb b/app/presenters/idv/gpo_presenter.rb
index 6c0e7fcf5fa..745a527b115 100644
--- a/app/presenters/idv/gpo_presenter.rb
+++ b/app/presenters/idv/gpo_presenter.rb
@@ -48,7 +48,7 @@ def letter_already_sent?
end
def user_needs_address_otp_verification?
- current_user.decorate.pending_profile?
+ current_user.pending_profile?
end
end
end
diff --git a/app/presenters/two_factor_options_presenter.rb b/app/presenters/two_factor_options_presenter.rb
index c38996d98a2..f5abd0c8f04 100644
--- a/app/presenters/two_factor_options_presenter.rb
+++ b/app/presenters/two_factor_options_presenter.rb
@@ -73,7 +73,7 @@ def backup_code_option
end
def current_device_is_desktop?
- DeviceDetector.new(@user_agent)&.device_type == 'desktop'
+ !BrowserCache.parse(@user_agent).mobile?
end
def piv_cac_required?
diff --git a/app/services/analytics.rb b/app/services/analytics.rb
index 25b2acd8fd1..635d8ef11be 100644
--- a/app/services/analytics.rb
+++ b/app/services/analytics.rb
@@ -87,7 +87,7 @@ def request_attributes
end
def browser
- @browser ||= DeviceDetector.new(request.user_agent)
+ @browser ||= BrowserCache.parse(request.user_agent)
end
def browser_attributes
@@ -95,10 +95,10 @@ def browser_attributes
user_agent: request.user_agent,
browser_name: browser.name,
browser_version: browser.full_version,
- browser_platform_name: browser.os_name,
- browser_platform_version: browser.os_full_version,
- browser_device_name: browser.device_name,
- browser_device_type: browser.device_type,
+ browser_platform_name: browser.platform.name,
+ browser_platform_version: browser.platform.version,
+ browser_device_name: browser.device.name,
+ browser_mobile: browser.device.mobile?,
browser_bot: browser.bot?,
}
end
diff --git a/app/services/browser_cache.rb b/app/services/browser_cache.rb
new file mode 100644
index 00000000000..26c8f4223ef
--- /dev/null
+++ b/app/services/browser_cache.rb
@@ -0,0 +1,14 @@
+class BrowserCache
+ @cache = LruRedux::Cache.new(1_000)
+
+ # @param [String] user_agent
+ # @return [Browser]
+ def self.parse(user_agent)
+ @cache.getset(user_agent) { Browser.new(user_agent) }
+ end
+
+ # Should probably only be used in tests
+ def self.clear
+ @cache.clear
+ end
+end
diff --git a/app/services/completions_decider.rb b/app/services/completions_decider.rb
index 11835b3a288..33d8abee8d3 100644
--- a/app/services/completions_decider.rb
+++ b/app/services/completions_decider.rb
@@ -14,11 +14,11 @@ def go_back_to_mobile_app?
attr_reader :user_agent, :request_url
def desktop_and_app_redirect_uri?
- client.device_type == 'desktop' && !redirect_uri.start_with?('http')
+ !client.mobile? && !redirect_uri.start_with?('http')
end
def client
- @client ||= DeviceDetector.new(user_agent)
+ @client ||= BrowserCache.parse(user_agent)
end
def redirect_uri
diff --git a/app/services/device_tracking/create_device.rb b/app/services/device_tracking/create_device.rb
deleted file mode 100644
index 4ae66eb4a8f..00000000000
--- a/app/services/device_tracking/create_device.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-module DeviceTracking
- class CreateDevice
- COOKIE_LENGTH = 128
-
- def self.call(user_id, remote_ip, user_agent, uuid)
- Device.create!(
- user_id: user_id,
- user_agent: user_agent.to_s,
- cookie_uuid: uuid.presence || SecureRandom.hex(COOKIE_LENGTH / 2),
- last_used_at: Time.zone.now,
- last_ip: remote_ip,
- )
- end
- end
-end
diff --git a/app/services/device_tracking/device_name.rb b/app/services/device_tracking/device_name.rb
deleted file mode 100644
index 5a53649bcca..00000000000
--- a/app/services/device_tracking/device_name.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-module DeviceTracking
- class DeviceName
- def self.call(parser, device)
- device_user_agent = device.user_agent
- user_agent = parser.parse(device_user_agent)
- I18n.t(
- 'account.index.device',
- browser: browser(user_agent),
- os: os(user_agent),
- )
- end
-
- def self.browser(user_agent)
- version = user_agent.version
- "#{user_agent.family} #{version ? version.major : ''}"
- end
- private_class_method :browser
-
- def self.os(user_agent)
- user_agent_os = user_agent.os
- version = user_agent_os.version
- "#{user_agent_os.family} #{version ? version.major : ''}"
- end
- private_class_method :os
- end
-end
diff --git a/app/services/device_tracking/forget_all_browsers.rb b/app/services/device_tracking/forget_all_browsers.rb
deleted file mode 100644
index 2fb47b21a9e..00000000000
--- a/app/services/device_tracking/forget_all_browsers.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-module DeviceTracking
- class ForgetAllBrowsers
- attr_reader :user, :remember_device_revoked_at
-
- def initialize(user, remember_device_revoked_at: nil)
- @user = user
- @remember_device_revoked_at = remember_device_revoked_at || Time.zone.now
- end
-
- def call
- UpdateUser.new(
- user: user,
- attributes: {
- remember_device_revoked_at: remember_device_revoked_at,
- },
- ).call
- end
- end
-end
diff --git a/app/services/device_tracking/list_device_events.rb b/app/services/device_tracking/list_device_events.rb
deleted file mode 100644
index 3b1e6cc6b8a..00000000000
--- a/app/services/device_tracking/list_device_events.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module DeviceTracking
- class ListDeviceEvents
- def self.call(user_id, device_id, offset, limit)
- return [] unless Device.where(user_id: user_id, id: device_id)
- Event.where(user_id: user_id, device_id: device_id).order(created_at: :desc).
- offset(offset).limit(limit)
- end
- end
-end
diff --git a/app/services/device_tracking/list_devices.rb b/app/services/device_tracking/list_devices.rb
deleted file mode 100644
index 0b03a669d48..00000000000
--- a/app/services/device_tracking/list_devices.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-module DeviceTracking
- class ListDevices
- def self.call(user_id, offset, limit)
- devices = Device.where(user_id: user_id).order(last_used_at: :desc).offset(offset).
- limit(limit)
- # heavy cost to load; instantiate once and parse in bulk
- parser = UserAgentParser::Parser.new
- devices.each { |device| device.nice_name = DeviceName.call(parser, device) }
- end
- end
-end
diff --git a/app/services/device_tracking/lookup_device_for_user.rb b/app/services/device_tracking/lookup_device_for_user.rb
deleted file mode 100644
index 6c3d6554502..00000000000
--- a/app/services/device_tracking/lookup_device_for_user.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-module DeviceTracking
- class LookupDeviceForUser
- def self.call(user_id, cookie_guid)
- Device.find_by(user_id: user_id, cookie_uuid: cookie_guid)
- end
- end
-end
diff --git a/app/services/device_tracking/update_device.rb b/app/services/device_tracking/update_device.rb
deleted file mode 100644
index 492a0ab684c..00000000000
--- a/app/services/device_tracking/update_device.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-module DeviceTracking
- class UpdateDevice
- def self.call(device, remote_ip)
- device.last_used_at = Time.zone.now
- device.last_ip = remote_ip
- device.save
- device
- end
- end
-end
diff --git a/app/services/forget_all_browsers.rb b/app/services/forget_all_browsers.rb
new file mode 100644
index 00000000000..2b992ea8a25
--- /dev/null
+++ b/app/services/forget_all_browsers.rb
@@ -0,0 +1,17 @@
+class ForgetAllBrowsers
+ attr_reader :user, :remember_device_revoked_at
+
+ def initialize(user, remember_device_revoked_at: nil)
+ @user = user
+ @remember_device_revoked_at = remember_device_revoked_at || Time.zone.now
+ end
+
+ def call
+ UpdateUser.new(
+ user: user,
+ attributes: {
+ remember_device_revoked_at: remember_device_revoked_at,
+ },
+ ).call
+ end
+end
diff --git a/app/services/idv/profile_activator.rb b/app/services/idv/profile_activator.rb
deleted file mode 100644
index ea1c9d8d692..00000000000
--- a/app/services/idv/profile_activator.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-module Idv
- class ProfileActivator
- def initialize(user:)
- @user = user
- end
-
- def call
- user.decorate.pending_profile&.activate
- end
-
- private
-
- attr_reader :user
- end
-end
diff --git a/app/services/idv/session.rb b/app/services/idv/session.rb
index 81e963e04bc..8c68067797f 100644
--- a/app/services/idv/session.rb
+++ b/app/services/idv/session.rb
@@ -81,7 +81,7 @@ def complete_session
end
def complete_profile
- ProfileActivator.new(user: current_user).call
+ current_user.pending_profile&.activate
move_pii_to_user_session
end
diff --git a/app/services/idv/steps/upload_step.rb b/app/services/idv/steps/upload_step.rb
index debdd740f1c..23b96854881 100644
--- a/app/services/idv/steps/upload_step.rb
+++ b/app/services/idv/steps/upload_step.rb
@@ -60,10 +60,7 @@ def bypass_send_link_steps
end
def mobile_device?
- return @mobile_device if defined?(@mobile_device)
-
- client = DeviceDetector.new(request.user_agent)
- @mobile_device = client.device_type != 'desktop'
+ BrowserCache.parse(request.user_agent).mobile?
end
end
end
diff --git a/app/services/reset_user_password.rb b/app/services/reset_user_password.rb
index 81522acc0db..0ef7277eb2d 100644
--- a/app/services/reset_user_password.rb
+++ b/app/services/reset_user_password.rb
@@ -20,7 +20,7 @@ def reset_user_password
end
def forget_all_browsers
- DeviceTracking::ForgetAllBrowsers.new(
+ ForgetAllBrowsers.new(
user,
remember_device_revoked_at: remember_device_revoked_at,
).call
diff --git a/app/services/user_event_creator.rb b/app/services/user_event_creator.rb
index 78be4f358df..ac35072381f 100644
--- a/app/services/user_event_creator.rb
+++ b/app/services/user_event_creator.rb
@@ -1,4 +1,6 @@
class UserEventCreator
+ COOKIE_LENGTH = 128
+
attr_reader :request, :current_user
def initialize(current_user:, request: nil)
@@ -8,7 +10,7 @@ def initialize(current_user:, request: nil)
def create_user_event(event_type, user = current_user)
return unless user&.id
- existing_device = DeviceTracking::LookupDeviceForUser.call(user.id, cookies[:device])
+ existing_device = Device.find_by(user_id: user.id, cookie_uuid: cookies[:device])
if existing_device.present?
create_event_for_existing_device(event_type: event_type, user: user, device: existing_device)
else
@@ -30,7 +32,7 @@ def create_user_event_with_disavowal(event_type, user = current_user)
private
def create_event_for_existing_device(event_type:, user:, device:)
- DeviceTracking::UpdateDevice.call(device, request.remote_ip)
+ device.update_last_used_ip(request.remote_ip)
create_event_for_device(event_type: event_type, user: user, device: device)
end
@@ -47,8 +49,14 @@ def create_event_for_new_device(event_type:, user:)
end
def create_device_for_user(user)
- device = DeviceTracking::CreateDevice.call(
- user.id, request.remote_ip, request.user_agent, cookies[:device]
+ cookie_uuid = cookies[:device].presence || SecureRandom.hex(COOKIE_LENGTH / 2)
+
+ device = Device.create!(
+ user: user,
+ user_agent: request.user_agent.to_s,
+ cookie_uuid: cookie_uuid,
+ last_used_at: Time.zone.now,
+ last_ip: request.remote_ip,
)
assign_device_cookie(device.cookie_uuid)
device
diff --git a/app/views/events/show.html.erb b/app/views/events/show.html.erb
index b52a9eecf64..f2f12b2a75f 100644
--- a/app/views/events/show.html.erb
+++ b/app/views/events/show.html.erb
@@ -11,7 +11,7 @@
- <%= @device.device_name %>
+ <%= @device.nice_name %>
<% @events.each do |event| %>
diff --git a/babel.config.js b/babel.config.js
index 9b42969b91f..b886251164e 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -42,14 +42,6 @@ module.exports = function (api) {
},
],
].filter(Boolean),
- plugins: [
- [
- '@babel/plugin-proposal-class-properties',
- {
- loose: true,
- },
- ],
- ],
// For third-party dependencies compiled using Babel, don't assume module source type. Use
// "unambiguous" for best-effort attempt to identify source type by patterns.
overrides: [
diff --git a/config/country_dialing_codes.yml b/config/country_dialing_codes.yml
index 23866f10ceb..b2ab8081478 100644
--- a/config/country_dialing_codes.yml
+++ b/config/country_dialing_codes.yml
@@ -981,7 +981,7 @@ TJ:
TL:
country_code: '670'
name: Timor-Leste
- supports_sms: true
+ supports_sms: false
supports_voice: false
TM:
country_code: '993'
diff --git a/config/initializers/ahoy.rb b/config/initializers/ahoy.rb
index 6e2f32221d1..ebbcfb5ffb9 100644
--- a/config/initializers/ahoy.rb
+++ b/config/initializers/ahoy.rb
@@ -5,7 +5,8 @@
Ahoy.visit_duration = IdentityConfig.store.session_timeout_in_minutes.minutes
Ahoy.server_side_visits = false
Ahoy.geocode = false
-Ahoy.user_agent_parser = :device_detector
+Ahoy.user_agent_parser = :browser
+Ahoy.track_bots = true
module Ahoy
class Store < Ahoy::BaseStore
diff --git a/config/initializers/browser.rb b/config/initializers/browser.rb
new file mode 100644
index 00000000000..cb1e61937e6
--- /dev/null
+++ b/config/initializers/browser.rb
@@ -0,0 +1,2 @@
+require 'browser/aliases'
+Browser::Base.include(Browser::Aliases)
diff --git a/config/locales/idv/en.yml b/config/locales/idv/en.yml
index 0be11f67a96..010ffac82c3 100644
--- a/config/locales/idv/en.yml
+++ b/config/locales/idv/en.yml
@@ -49,7 +49,7 @@ en:
fail_html: 'Please try again in %{timeout}. For your security,
we limit the number of times you can attempt to verify your phone
number online.'
- heading: We could not match your name and address to this phone number
+ heading: We could not match this phone number to other records
jobfail: Something went wrong and we cannot process your request at this time.
Please try again.
timeout: Our request to verify your information timed out. Please try again.
@@ -114,7 +114,8 @@ en:
typically take 3 to 7 business days.
mail_sent: Your letter is on its way
otp_delivery_method:
- phone_number_html: We’ll send a code to %{phone}
+ phone_number_html: We’ll send a code to %{phone} to verify that
+ the phone number belongs to you.
personal_key: This is your new personal key. Write it down and keep it in a safe
place. You will need it if you ever lose your password.
phone:
diff --git a/config/locales/idv/es.yml b/config/locales/idv/es.yml
index 8fba1f3d01d..2354296d798 100644
--- a/config/locales/idv/es.yml
+++ b/config/locales/idv/es.yml
@@ -52,7 +52,8 @@ es:
fail_html: 'Por favor, inténtelo de nuevo en %{timeout}. Por su
seguridad, limitamos el número de veces que puede intentar verificar
su número de teléfono en línea.'
- heading: No hemos podido asociar su nombre y dirección a este número de teléfono
+ heading: No pudimos encontrar coincidencias entre este número de teléfono y
+ otros registros
jobfail: Algo ha fallado y no podemos procesar tu solicitud en este momento.
Vuelve a intentarlo.
timeout: Nuestra solicitud para verificar tu información ha caducado. Vuelve a
@@ -119,7 +120,8 @@ es:
clase de USPS y por lo general tardan entre 3 y 7 días laborables.
mail_sent: Su carta está en camino
otp_delivery_method:
- phone_number_html: Te enviaremos un código a %{phone}
+ phone_number_html: Enviaremos un código a %{phone} para
+ verificar que el número de teléfono le pertenece.
personal_key: Esta es su nueva clave personal. Escríbala y guárdela en un lugar
seguro. La necesitará si pierde su contraseña.
phone:
diff --git a/config/locales/idv/fr.yml b/config/locales/idv/fr.yml
index 3eba5fd2544..24b51d53364 100644
--- a/config/locales/idv/fr.yml
+++ b/config/locales/idv/fr.yml
@@ -55,8 +55,8 @@ fr:
fail_html: 'Veuillez réessayer dans %{timeout}. Pour votre
sécurité, nous limitons le nombre de fois où vous pouvez tenter de
vérifier votre numéro de téléphone en ligne.'
- heading: Nous n’avons pas pu associer votre nom et votre adresse à ce numéro de
- téléphone
+ heading: Nous n'avons pas pu faire correspondre ce numéro de téléphone à
+ d'autres enregistrements
jobfail: Un problème s’est produit et nous ne pouvons pas traiter votre demande
pour le moment. Veuillez réessayer.
timeout: Notre demande de vérification de vos renseignements a expiré. Veuillez
@@ -129,7 +129,8 @@ fr:
ouvrables.
mail_sent: Votre lettre est en route
otp_delivery_method:
- phone_number_html: Nous enverrons un code au %{phone}
+ phone_number_html: Nous enverrons un code à %{phone} pour
+ vérifier que le numéro de téléphone vous appartient.
personal_key: Il s’agit de votre nouvelle clé personnelle. Notez-la et
conservez-la dans un endroit sécuritaire. Vous en aurez besoin si vous
perdez votre mot de passe.
diff --git a/config/locales/openid_connect/en.yml b/config/locales/openid_connect/en.yml
index 80d99d89b74..4b64a5e9439 100644
--- a/config/locales/openid_connect/en.yml
+++ b/config/locales/openid_connect/en.yml
@@ -22,12 +22,12 @@ en:
id_token_hint: id_token_hint was not recognized
token:
errors:
+ expired_code: is expired
invalid_aud: Invalid audience claim, expected %{url}
invalid_authentication: Client must authenticate via PKCE or private_key_jwt,
missing either code_challenge or client_assertion
- invalid_code: is invalid either because it expired, or it doesn’t match any
- user. Please see our documentation at
- https://developers.login.gov/oidc/#token
+ invalid_code: is invalid because doesn’t match any user. Please see our
+ documentation at https://developers.login.gov/oidc/#token
invalid_code_verifier: code_verifier did not match code_challenge
invalid_iat: iat must be an integer or floating point Unix timestamp
representing a time in the past
diff --git a/config/locales/openid_connect/es.yml b/config/locales/openid_connect/es.yml
index 986d0c114ca..caf9b6527d2 100644
--- a/config/locales/openid_connect/es.yml
+++ b/config/locales/openid_connect/es.yml
@@ -22,12 +22,12 @@ es:
id_token_hint: Id_token_hint no fue reconocido
token:
errors:
+ expired_code: ha expirado
invalid_aud: Solicitud de audiencia no válida, esperada %{url}
invalid_authentication: El cliente debe autenticarse a través de PKCE o
private_key_jwt, faltando code_challenge o client_assertion
- invalid_code: no es válido porque ha caducado o no coincide con ningún usuario.
- Consulte nuestra documentación en
- https://developers.login.gov/oidc/#token
+ invalid_code: no es válido porque no coincide con ningún usuario. Consulte
+ nuestra documentación en https://developers.login.gov/oidc/#token
invalid_code_verifier: code_verifier no coincide con code_challenge
invalid_iat: iat debe ser una marca de tiempo Unix de punto flotante o entero
que represente un tiempo en el pasado
diff --git a/config/locales/openid_connect/fr.yml b/config/locales/openid_connect/fr.yml
index 5495dd1bd3b..84b20776555 100644
--- a/config/locales/openid_connect/fr.yml
+++ b/config/locales/openid_connect/fr.yml
@@ -22,12 +22,13 @@ fr:
id_token_hint: id_token_hint n’a pas été reconnu
token:
errors:
+ expired_code: est expiré
invalid_aud: Affirmation liée à l’auditoire non valide, attendu %{url}
invalid_authentication: Le client doit s’authentifier par PKCE ou
private_key_jwt, code_challenge ou client_assertion manquant
- invalid_code: est non valide soit parce qu’il est périmé, soit parce qu’il ne
- correspond à aucun utilisateur. Veuillez consulter notre documentation
- à https://developers.login.gov/oidc/#token
+ invalid_code: n’est pas valide, car il ne correspond à aucun utilisateur.
+ Veuillez consulter notre documentation à
+ https://developers.login.gov/oidc/#token
invalid_code_verifier: code_verifier ne correspondait pas à code_challenge
invalid_iat: iat doit être un horodatage Unix entier ou à virgule flottante
représentant une heure dans le passé
diff --git a/config/pinpoint_overrides.yml b/config/pinpoint_overrides.yml
index 0187ab4821a..42df9fdfd06 100644
--- a/config/pinpoint_overrides.yml
+++ b/config/pinpoint_overrides.yml
@@ -178,6 +178,8 @@ TH:
supports_voice_unconfirmed: false
TJ:
supports_voice: false
+TL:
+ supports_sms: false
TT:
supports_voice: false
TW:
diff --git a/package.json b/package.json
index 60abdd5fdd0..aad8c2d3b60 100644
--- a/package.json
+++ b/package.json
@@ -18,11 +18,10 @@
"build": "true"
},
"dependencies": {
- "@babel/core": "^7.13.1",
- "@babel/plugin-proposal-class-properties": "^7.13.0",
- "@babel/preset-env": "^7.13.5",
- "@babel/preset-react": "^7.12.13",
- "@babel/register": "^7.13.0",
+ "@babel/core": "^7.15.5",
+ "@babel/preset-env": "^7.15.6",
+ "@babel/preset-react": "^7.14.5",
+ "@babel/register": "^7.15.3",
"@rails/webpacker": "^5.3.0",
"basscss-sass": "^3.0.0",
"classlist-polyfill": "^1.2.0",
diff --git a/spec/controllers/users/two_factor_authentication_controller_spec.rb b/spec/controllers/users/two_factor_authentication_controller_spec.rb
index 79b4a28cc7a..77900d32631 100644
--- a/spec/controllers/users/two_factor_authentication_controller_spec.rb
+++ b/spec/controllers/users/two_factor_authentication_controller_spec.rb
@@ -69,7 +69,7 @@ def index
describe '#show' do
context 'when user is piv/cac enabled' do
it 'renders the piv/cac entry screen' do
- allow_any_instance_of(DeviceDetector).to receive(:device_type).and_return('desktop')
+ allow_any_instance_of(Browser).to receive(:mobile?).and_return(true)
user = build(:user)
stub_sign_in_before_2fa(user)
allow_any_instance_of(
diff --git a/spec/decorators/device_decorator_spec.rb b/spec/decorators/device_decorator_spec.rb
new file mode 100644
index 00000000000..81ad17e80e6
--- /dev/null
+++ b/spec/decorators/device_decorator_spec.rb
@@ -0,0 +1,12 @@
+require 'rails_helper'
+
+RSpec.describe DeviceDecorator do
+ let(:device) { create(:device) }
+ subject(:decorator) { DeviceDecorator.new(device) }
+
+ describe '#nice_name' do
+ it 'gives a shortened os and browser name' do
+ expect(decorator.nice_name).to eq('Chrome 58 on Windows 10')
+ end
+ end
+end
diff --git a/spec/decorators/user_decorator_spec.rb b/spec/decorators/user_decorator_spec.rb
index ad5ae40a5ef..06ab69e8d1a 100644
--- a/spec/decorators/user_decorator_spec.rb
+++ b/spec/decorators/user_decorator_spec.rb
@@ -156,48 +156,6 @@
end
end
- describe '#pending_profile' do
- context 'when a profile with a verification_pending deactivation_reason exists' do
- it 'returns the most recent profile' do
- user = User.new
- _old_profile = create(
- :profile,
- deactivation_reason: :verification_pending,
- created_at: 1.day.ago,
- user: user,
- )
- new_profile = create(
- :profile,
- deactivation_reason: :verification_pending,
- user: user,
- )
- user_decorator = UserDecorator.new(user)
-
- expect(user_decorator.pending_profile).to eq new_profile
- end
- end
-
- context 'when a verification_pending profile does not exist' do
- it 'returns nil' do
- user = User.new
- create(
- :profile,
- deactivation_reason: :password_reset,
- created_at: 1.day.ago,
- user: user,
- )
- create(
- :profile,
- deactivation_reason: :encryption_error,
- user: user,
- )
- user_decorator = UserDecorator.new(user)
-
- expect(user_decorator.pending_profile).to be_nil
- end
- end
- end
-
describe '#identity_not_verified?' do
it 'returns true if identity_verified returns false' do
user = User.new
diff --git a/spec/features/account/device_spec.rb b/spec/features/account/device_spec.rb
index 4d699b2991e..ecba13fcf6b 100644
--- a/spec/features/account/device_spec.rb
+++ b/spec/features/account/device_spec.rb
@@ -18,6 +18,6 @@
end
scenario 'viewing devices' do
- expect(page).to have_content('Chrome 71 on Mac OS X 10')
+ expect(page).to have_content('Chrome 71 on macOS 10')
end
end
diff --git a/spec/features/idv/doc_auth/upload_step_spec.rb b/spec/features/idv/doc_auth/upload_step_spec.rb
index d563eb3740e..d79c63b56cb 100644
--- a/spec/features/idv/doc_auth/upload_step_spec.rb
+++ b/spec/features/idv/doc_auth/upload_step_spec.rb
@@ -11,7 +11,7 @@
context 'on a mobile device' do
before do
- allow_any_instance_of(DeviceDetector).to receive(:device_type).and_return('mobile')
+ allow(BrowserCache).to receive(:parse).and_return(mobile_device)
end
it 'is on the correct page' do
@@ -30,10 +30,6 @@
end
context 'on a desktop device' do
- before do
- allow_any_instance_of(DeviceDetector).to receive(:device_type).and_return('desktop')
- end
-
it 'is on the correct page' do
expect(page).to have_current_path(idv_doc_auth_upload_step)
end
diff --git a/spec/features/idv/doc_capture/capture_complete_step_spec.rb b/spec/features/idv/doc_capture/capture_complete_step_spec.rb
index 3f4c752b6e4..24b8bf135f2 100644
--- a/spec/features/idv/doc_capture/capture_complete_step_spec.rb
+++ b/spec/features/idv/doc_capture/capture_complete_step_spec.rb
@@ -7,7 +7,7 @@
before do
complete_doc_capture_steps_before_capture_complete_step
- allow_any_instance_of(DeviceDetector).to receive(:device_type).and_return('mobile')
+ allow_any_instance_of(Browser).to receive(:mobile?).and_return(true)
end
it 'is on the correct page' do
diff --git a/spec/features/idv/doc_capture/document_capture_step_spec.rb b/spec/features/idv/doc_capture/document_capture_step_spec.rb
index 9646747fc3a..588a01976ee 100644
--- a/spec/features/idv/doc_capture/document_capture_step_spec.rb
+++ b/spec/features/idv/doc_capture/document_capture_step_spec.rb
@@ -23,7 +23,7 @@
else
visit_idp_from_oidc_sp_with_ial2
end
- allow_any_instance_of(DeviceDetector).to receive(:device_type).and_return('mobile')
+ allow_any_instance_of(Browser).to receive(:mobile?).and_return(true)
end
it 'offers the user the option to cancel and return to desktop' do
diff --git a/spec/features/two_factor_authentication/backup_code_sign_up_spec.rb b/spec/features/two_factor_authentication/backup_code_sign_up_spec.rb
index dcbba2296bd..4710b318b0e 100644
--- a/spec/features/two_factor_authentication/backup_code_sign_up_spec.rb
+++ b/spec/features/two_factor_authentication/backup_code_sign_up_spec.rb
@@ -22,7 +22,7 @@
end
it 'does not show download button on a mobile device' do
- allow(DeviceDetector).to receive(:new).and_return(mobile_device)
+ allow(BrowserCache).to receive(:parse).and_return(mobile_device)
sign_up_and_set_password
diff --git a/spec/features/users/sign_in_spec.rb b/spec/features/users/sign_in_spec.rb
index 6854b131cce..cc3b5853b3a 100644
--- a/spec/features/users/sign_in_spec.rb
+++ b/spec/features/users/sign_in_spec.rb
@@ -110,14 +110,14 @@
end
scenario 'user attempts sign in with a PIV/CAC on mobile' do
- allow(DeviceDetector).to receive(:new).and_return(mobile_device)
+ allow(BrowserCache).to receive(:parse).and_return(mobile_device)
visit root_path
expect(page).to_not have_link t('account.login.piv_cac')
end
scenario 'user attempts sign in with the default MFA on mobile and a PIV/CAC configured' do
- allow(DeviceDetector).to receive(:new).and_return(mobile_device)
+ allow(BrowserCache).to receive(:parse).and_return(mobile_device)
sign_in_before_2fa(user_with_piv_cac)
expect(current_path).to eq(login_otp_path(otp_delivery_preference: :sms))
diff --git a/spec/features/users/sign_up_spec.rb b/spec/features/users/sign_up_spec.rb
index adc5d92a2fe..eae8aeab697 100644
--- a/spec/features/users/sign_up_spec.rb
+++ b/spec/features/users/sign_up_spec.rb
@@ -208,7 +208,7 @@
end
it 'does not allow PIV/CAC during setup on mobile' do
- allow(DeviceDetector).to receive(:new).and_return(mobile_device)
+ allow(BrowserCache).to receive(:parse).and_return(mobile_device)
sign_in_user
diff --git a/spec/forms/openid_connect_token_form_spec.rb b/spec/forms/openid_connect_token_form_spec.rb
index a873ff0e15d..3ff40d46b17 100644
--- a/spec/forms/openid_connect_token_form_spec.rb
+++ b/spec/forms/openid_connect_token_form_spec.rb
@@ -102,7 +102,7 @@
it 'is invalid' do
expect(valid?).to eq(false)
- expect(form.errors[:code]).to include(t('openid_connect.token.errors.invalid_code'))
+ expect(form.errors[:code]).to eq([t('openid_connect.token.errors.expired_code')])
end
end
diff --git a/spec/models/device_spec.rb b/spec/models/device_spec.rb
index 8b20994e2ce..2e040326538 100644
--- a/spec/models/device_spec.rb
+++ b/spec/models/device_spec.rb
@@ -15,4 +15,20 @@
expect(device).to be_valid
end
end
+
+ describe '#update_last_used_ip' do
+ let(:user) { create(:user) }
+ let(:remote_ip) { '1.2.3.4' }
+ let(:user_agent) { 'Chrome/58.0.3029.110 Safari/537.36' }
+ let(:uuid) { 'abc123' }
+ let(:now) { Time.zone.now }
+ let(:old_timestamp) { now - 1.hour }
+ let(:device) { create(:device, last_used_at: old_timestamp) }
+
+ it 'updates the last ip and last_used_at' do
+ expect { device.update_last_used_ip(remote_ip) }.
+ to(change { device.reload.last_used_at.to_i }.from(old_timestamp.to_i).to(now.to_i).
+ and(change { device.reload.last_ip }.to(remote_ip)))
+ end
+ end
end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 2ed0af794a0..19df29f3ccc 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -371,4 +371,44 @@
end
end
end
+
+ describe '#pending_profile' do
+ context 'when a profile with a verification_pending deactivation_reason exists' do
+ it 'returns the most recent profile' do
+ user = User.new
+ _old_profile = create(
+ :profile,
+ deactivation_reason: :verification_pending,
+ created_at: 1.day.ago,
+ user: user,
+ )
+ new_profile = create(
+ :profile,
+ deactivation_reason: :verification_pending,
+ user: user,
+ )
+
+ expect(user.pending_profile).to eq new_profile
+ end
+ end
+
+ context 'when a verification_pending profile does not exist' do
+ it 'returns nil' do
+ user = User.new
+ create(
+ :profile,
+ deactivation_reason: :password_reset,
+ created_at: 1.day.ago,
+ user: user,
+ )
+ create(
+ :profile,
+ deactivation_reason: :encryption_error,
+ user: user,
+ )
+
+ expect(user.pending_profile).to be_nil
+ end
+ end
+ end
end
diff --git a/spec/services/analytics_spec.rb b/spec/services/analytics_spec.rb
index dd9af8ed352..6ed71f1790f 100644
--- a/spec/services/analytics_spec.rb
+++ b/spec/services/analytics_spec.rb
@@ -5,12 +5,12 @@
{
user_ip: FakeRequest.new.remote_ip,
user_agent: FakeRequest.new.user_agent,
- browser_name: nil,
- browser_version: nil,
- browser_platform_name: nil,
- browser_platform_version: nil,
- browser_device_name: nil,
- browser_device_type: nil,
+ browser_name: 'Unknown Browser',
+ browser_version: '0.0',
+ browser_platform_name: 'Unknown',
+ browser_platform_version: '0',
+ browser_device_name: 'Unknown',
+ browser_mobile: false,
browser_bot: false,
hostname: FakeRequest.new.host,
pid: Process.pid,
@@ -111,31 +111,6 @@
end
end
- it 'uses the DeviceDetector gem to parse the user agent' do
- user = build_stubbed(:user, uuid: '123')
- analytics = Analytics.new(
- user: user,
- request: FakeRequest.new,
- sp: nil,
- session: {},
- ahoy: ahoy,
- )
-
- browser = instance_double(DeviceDetector)
- allow(DeviceDetector).to receive(:new).and_return(browser)
-
- expect(ahoy).to receive(:track)
- expect(browser).to receive(:name)
- expect(browser).to receive(:full_version)
- expect(browser).to receive(:os_name)
- expect(browser).to receive(:os_full_version)
- expect(browser).to receive(:device_name)
- expect(browser).to receive(:device_type)
- expect(browser).to receive(:bot?)
-
- analytics.track_event('Trackable Event')
- end
-
it 'includes the locale of the current request' do
locale = :fr
allow(I18n).to receive(:locale).and_return(locale)
@@ -195,5 +170,18 @@
)
end.to_not raise_error
end
+
+ it 'does not alert when pii values are inside words' do
+ expect(ahoy).to receive(:track)
+
+ stub_const('DocAuth::Mock::ResultResponseBuilder::DEFAULT_PII_FROM_DOC', zipcode: '12345')
+
+ expect do
+ analytics.track_event(
+ 'Trackable Event',
+ some_uuid: '12345678-1234-1234-1234-123456789012',
+ )
+ end.to_not raise_error
+ end
end
end
diff --git a/spec/services/browser_cache_spec.rb b/spec/services/browser_cache_spec.rb
new file mode 100644
index 00000000000..9e3addf8bb8
--- /dev/null
+++ b/spec/services/browser_cache_spec.rb
@@ -0,0 +1,25 @@
+require 'rails_helper'
+
+RSpec.describe BrowserCache do
+ let(:chrome_user_agent) do
+ 'Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) \
+ Chrome/51.0.2704.64 Safari/537.36'
+ end
+
+ before { BrowserCache.clear }
+
+ describe '.parse' do
+ it 'parses a user agent using Browser gem' do
+ browser = BrowserCache.parse(chrome_user_agent)
+ expect(browser.name).to eq('Chrome')
+ expect(browser.platform.name).to eq('Chrome OS')
+ expect(browser.mobile?).to eq(false)
+ end
+
+ it 'caches by user agent' do
+ expect(Browser).to receive(:new).once.and_call_original
+
+ 3.times { BrowserCache.parse(chrome_user_agent) }
+ end
+ end
+end
diff --git a/spec/services/device_tracking/create_device_spec.rb b/spec/services/device_tracking/create_device_spec.rb
deleted file mode 100644
index 20151fde42f..00000000000
--- a/spec/services/device_tracking/create_device_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require 'rails_helper'
-
-describe DeviceTracking::CreateDevice do
- subject { described_class }
- let(:user) { create(:user) }
- let(:remote_ip) { '1.2.3.4' }
- let(:user_agent) { 'Chrome/58.0.3029.110 Safari/537.36' }
- let(:uuid) { 'abc123' }
-
- it 'creates a new device' do
- device = subject.call(user.id, remote_ip, user_agent, uuid)
- expect(device.cookie_uuid).to eq uuid
- expect(device.user_agent).to eq user_agent
- expect(device.last_ip).to eq remote_ip
- expect(device.last_used_at).to be_present
- end
-
- it 'uuid defaults to new random string if no cookie uuid is supplied' do
- device = subject.call(user.id, remote_ip, user_agent, nil)
-
- expect(device.cookie_uuid.length).to eq(DeviceTracking::CreateDevice::COOKIE_LENGTH)
- end
-end
diff --git a/spec/services/device_tracking/device_name_spec.rb b/spec/services/device_tracking/device_name_spec.rb
deleted file mode 100644
index 4dc87ad070b..00000000000
--- a/spec/services/device_tracking/device_name_spec.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require 'rails_helper'
-
-describe DeviceTracking::DeviceName do
- subject { described_class }
- let(:parser) { UserAgentParser::Parser }
- let(:device) { create(:device) }
-
- it 'gives a shortened os and browser name' do
- result = subject.call(parser.new, device)
-
- expect(result).to eq('Chrome 58 on Windows 10')
- end
-end
diff --git a/spec/services/device_tracking/list_device_events_spec.rb b/spec/services/device_tracking/list_device_events_spec.rb
deleted file mode 100644
index 6ea72aa1d14..00000000000
--- a/spec/services/device_tracking/list_device_events_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-require 'rails_helper'
-
-describe DeviceTracking::ListDeviceEvents do
- subject { described_class }
-
- let(:current_user) { create(:user) }
- let(:other_user) { create(:user) }
-
- let(:current_device) { create(:device, user: current_user) }
- let(:other_device) { create(:device) }
-
- let(:events) do
- [
- create(:event, user: current_user, device: current_device, created_at: 2.hours.ago),
- create(:event, user: current_user, device: current_device, created_at: 3.hours.ago),
- create(:event, user: current_user, device: current_device, created_at: 1.hour.ago),
- ]
- end
-
- before do
- # Memoize records to run creates for specs that query the table
- current_user
- other_user
- current_device
- other_device
- events
- end
-
- it 'returns an empty list if the device is not found' do
- result = subject.call(current_user.id, other_device.id, 0, 1)
-
- expect(result).to eq([])
- end
-
- it 'returns an empty list if the device is found but the user is not' do
- result = subject.call(other_user.id, current_device.id, 0, 1)
-
- expect(result).to eq([])
- end
-
- it 'returns a list containing a single most recent event' do
- result = subject.call(current_user.id, current_device.id, 0, 1)
-
- expect(result.size).to eq(1)
- expect(result[0].id).to eq(events[2].id)
- end
-
- it 'returns a list containing multiple most recent events in order and using an offset' do
- result = subject.call(current_user.id, current_device.id, 1, 2)
-
- expect(result.size).to eq(2)
- expect(result[0].id).to eq(events[0].id)
- expect(result[1].id).to eq(events[1].id)
- end
-end
diff --git a/spec/services/device_tracking/list_devices_spec.rb b/spec/services/device_tracking/list_devices_spec.rb
deleted file mode 100644
index 20539645d18..00000000000
--- a/spec/services/device_tracking/list_devices_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-require 'rails_helper'
-
-describe DeviceTracking::ListDevices do
- subject { described_class }
-
- let(:current_user) { create(:user) }
- let(:other_user) { create(:user) }
-
- let(:devices) do
- [
- create(:device, user: current_user, last_used_at: 2.hours.ago),
- create(:device, user: current_user, last_used_at: 3.hours.ago),
- create(:device, user: current_user, last_used_at: 1.hour.ago),
- ]
- end
-
- before do
- # Memoize records to run creates for specs that query the table
- current_user
- other_user
- devices
- end
-
- it 'returns an empty list if the device is not found' do
- result = subject.call(other_user.id, 0, 1)
-
- expect(result).to eq([])
- end
-
- it 'returns a list containing a single most recent device' do
- result = subject.call(current_user.id, 0, 1)
-
- expect(result.size).to eq(1)
- expect(result[0].id).to eq(devices[2].id)
- end
-
- it 'returns a list containing multiple most recent devices in order and using an offset' do
- result = subject.call(current_user.id, 1, 2)
-
- expect(result.size).to eq(2)
- expect(result[0].id).to eq(devices[0].id)
- expect(result[1].id).to eq(devices[1].id)
- end
-end
diff --git a/spec/services/device_tracking/lookup_device_for_user_spec.rb b/spec/services/device_tracking/lookup_device_for_user_spec.rb
deleted file mode 100644
index 316dc110eb2..00000000000
--- a/spec/services/device_tracking/lookup_device_for_user_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require 'rails_helper'
-
-describe DeviceTracking::LookupDeviceForUser do
- subject { described_class }
- let(:current_user) { create(:user) }
- let(:other_user) { create(:user) }
-
- let(:device) { create(:device, user: current_user, cookie_uuid: device_uuid) }
-
- let(:device_uuid) { 'foo' }
- let(:other_uuid) { 'bar' }
-
- before do
- current_user
- other_user
- device
- end
-
- it 'returns nil if the user is found but the cookie uuid is not' do
- expect(Device.find_by(user_id: current_user.id)).to be_present
-
- result = subject.call(current_user.id, other_uuid)
-
- expect(result).to be_nil
- end
-
- it 'returns nil if the user is not found and the cookie uuid is found' do
- expect(Device.find_by(cookie_uuid: device_uuid)).to be_present
-
- result = subject.call(other_user.id, device_uuid)
-
- expect(result).to be_nil
- end
-
- it 'returns the device' do
- result = subject.call(current_user.id, device_uuid)
-
- expect(result).to be_present
- end
-end
diff --git a/spec/services/device_tracking/update_device_spec.rb b/spec/services/device_tracking/update_device_spec.rb
deleted file mode 100644
index dcd5eca3dc7..00000000000
--- a/spec/services/device_tracking/update_device_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'rails_helper'
-
-describe DeviceTracking::UpdateDevice do
- subject { described_class }
- let(:user) { create(:user) }
- let(:remote_ip) { '1.2.3.4' }
- let(:user_agent) { 'Chrome/58.0.3029.110 Safari/537.36' }
- let(:uuid) { 'abc123' }
- let(:old_timestamp) { Time.zone.now - 1.hour }
- let(:device) { create(:device, last_used_at: old_timestamp) }
-
- it 'updates the device' do
- expect(device.last_used_at).to eq(old_timestamp)
- subject.call(device, remote_ip)
-
- expect(device.last_ip).to eq(remote_ip)
- expect(device.last_used_at).to_not eq(old_timestamp)
- end
-end
diff --git a/spec/services/device_tracking/forget_all_browsers_spec.rb b/spec/services/forget_all_browsers_spec.rb
similarity index 77%
rename from spec/services/device_tracking/forget_all_browsers_spec.rb
rename to spec/services/forget_all_browsers_spec.rb
index 0aee972e488..b37827e19ce 100644
--- a/spec/services/device_tracking/forget_all_browsers_spec.rb
+++ b/spec/services/forget_all_browsers_spec.rb
@@ -1,12 +1,12 @@
require 'rails_helper'
-RSpec.describe DeviceTracking::ForgetAllBrowsers do
+RSpec.describe ForgetAllBrowsers do
let(:user) { build(:user, remember_device_revoked_at: original_revoked_at) }
let(:now) { Time.zone.now }
let(:original_revoked_at) { 30.days.from_now }
subject(:service) do
- DeviceTracking::ForgetAllBrowsers.new(user, remember_device_revoked_at: now)
+ ForgetAllBrowsers.new(user, remember_device_revoked_at: now)
end
describe '#call' do
diff --git a/spec/services/idv/gpo_mail_spec.rb b/spec/services/idv/gpo_mail_spec.rb
index 5a558e77c59..557633a60ae 100644
--- a/spec/services/idv/gpo_mail_spec.rb
+++ b/spec/services/idv/gpo_mail_spec.rb
@@ -52,7 +52,7 @@ def event_create(hash)
event = hash[:event_type]
now = Time.zone.now
updated_at = hash[:updated_at] || now
- device = DeviceTracking::LookupDeviceForUser.call(user.id, uuid)
+ device = Device.find_by(user_id: user.id, cookie_uuid: uuid)
if device
device.last_used_at = now
device.last_ip = remote_ip
diff --git a/spec/services/user_event_creator_spec.rb b/spec/services/user_event_creator_spec.rb
index 6a84ae94491..5e37bff8a3e 100644
--- a/spec/services/user_event_creator_spec.rb
+++ b/spec/services/user_event_creator_spec.rb
@@ -4,16 +4,19 @@
let(:user_agent) { 'A computer on the internet' }
let(:ip_address) { '4.4.4.4' }
let(:existing_device_cookie) { 'existing_device_cookie' }
+ let(:cookie_jar) do
+ {
+ device: existing_device_cookie,
+ }.with_indifferent_access.tap do |cookie_jar|
+ allow(cookie_jar).to receive(:permanent).and_return({})
+ end
+ end
let(:request) do
- request = double
-
- allow(request).to receive(:remote_ip).and_return(ip_address)
- allow(request).to receive(:user_agent).and_return(user_agent)
-
- cookie_jar = { device: existing_device_cookie }.with_indifferent_access
- allow(cookie_jar).to receive(:permanent).and_return({})
- allow(request).to receive(:cookie_jar).and_return(cookie_jar)
- request
+ double(
+ remote_ip: ip_address,
+ user_agent: user_agent,
+ cookie_jar: cookie_jar,
+ )
end
let(:user) { create(:user) }
let(:device) { create(:device, user: user, cookie_uuid: existing_device_cookie) }
@@ -81,6 +84,16 @@
expect(event.device.last_used_at).to be_within(1).of(Time.zone.now)
end
+ context 'when there is no device cookie' do
+ let(:existing_device_cookie) { nil }
+
+ it 'assigns one to the device' do
+ event = subject.create_user_event(event_type, user)
+
+ expect(event.device.cookie_uuid.length).to eq(UserEventCreator::COOKIE_LENGTH)
+ end
+ end
+
it 'alerts the user if they have other devices' do
allow(UserAlerts::AlertUserAboutNewDevice).to receive(:call)
create(:device, user: user)
diff --git a/spec/support/controller_helper.rb b/spec/support/controller_helper.rb
index 7f5180880ae..d39a454b8d6 100644
--- a/spec/support/controller_helper.rb
+++ b/spec/support/controller_helper.rb
@@ -47,7 +47,7 @@ def stub_verify_steps_one_and_two(user)
def stub_decorated_user_with_pending_profile(user)
decorated_user = instance_double(UserDecorator)
allow(user).to receive(:decorate).and_return(decorated_user)
- allow(decorated_user).to receive(:pending_profile).and_return(pending_profile)
+ allow(user).to receive(:pending_profile).and_return(pending_profile)
allow(decorated_user).to receive(:pending_profile_requires_verification?).
and_return(has_pending_profile)
decorated_user
diff --git a/spec/support/fake_analytics.rb b/spec/support/fake_analytics.rb
index 6268cc926d7..7a4a6195afc 100644
--- a/spec/support/fake_analytics.rb
+++ b/spec/support/fake_analytics.rb
@@ -26,7 +26,7 @@ def track_event(event, original_attributes = {})
:dob,
:state_id_number,
).each do |key, default_pii_value|
- if string_payload.include?(default_pii_value)
+ if string_payload.match?(Regexp.new('\b' + Regexp.quote(default_pii_value) + '\b', 'i'))
raise PiiDetected, <<~ERROR
track_event example PII #{key} (#{default_pii_value}) detected in attributes
event: #{event} (#{constant_name})
diff --git a/spec/support/features/doc_auth_helper.rb b/spec/support/features/doc_auth_helper.rb
index 380ac483bae..f08ddc9a398 100644
--- a/spec/support/features/doc_auth_helper.rb
+++ b/spec/support/features/doc_auth_helper.rb
@@ -100,13 +100,13 @@ def complete_doc_auth_steps_before_document_capture_step(expect_accessible: fals
end
def complete_doc_auth_steps_before_email_sent_step
- allow(DeviceDetector).to receive(:new).and_return(mobile_device)
+ allow(BrowserCache).to receive(:parse).and_return(mobile_device)
complete_doc_auth_steps_before_upload_step
click_on t('doc_auth.info.upload_computer_link')
end
def mobile_device
- DeviceDetector.new(
+ Browser.new(
'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) \
AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
)
diff --git a/spec/support/features/doc_capture_helper.rb b/spec/support/features/doc_capture_helper.rb
index 9ce68f43de7..047ac92a7e9 100644
--- a/spec/support/features/doc_capture_helper.rb
+++ b/spec/support/features/doc_capture_helper.rb
@@ -1,20 +1,20 @@
module DocCaptureHelper
def doc_capture_request_uri(user = user_with_2fa)
- allow_any_instance_of(DeviceDetector).to receive(:device_type).and_return('desktop')
+ allow_any_instance_of(Browser).to receive(:mobile?).and_return(false)
sign_in_and_2fa_user(user)
complete_doc_auth_steps_before_link_sent_step
url = Telephony::Test::Message.messages.last.body.split(' ').first
- allow_any_instance_of(DeviceDetector).to receive(:device_type).and_call_original
+ allow_any_instance_of(Browser).to receive(:mobile?).and_call_original
URI.parse(url).request_uri
end
def in_doc_capture_session(user = user_with_2fa)
request_uri = doc_capture_request_uri(user)
Capybara.using_session 'doc capture' do
- allow_any_instance_of(DeviceDetector).to receive(:device_type).and_return('mobile')
+ allow_any_instance_of(Browser).to receive(:mobile?).and_return(true)
visit request_uri
yield
- allow_any_instance_of(DeviceDetector).to receive(:device_type).and_call_original
+ allow_any_instance_of(Browser).to receive(:mobile?).and_call_original
end
end
diff --git a/spec/support/idv_examples/clearing_and_restarting.rb b/spec/support/idv_examples/clearing_and_restarting.rb
index ca8a6d06f22..d44e2c96ddb 100644
--- a/spec/support/idv_examples/clearing_and_restarting.rb
+++ b/spec/support/idv_examples/clearing_and_restarting.rb
@@ -2,7 +2,7 @@
it 'allows the user to retry verification with phone' do
click_on t('idv.messages.clear_and_start_over')
- expect(user.reload.decorate.pending_profile?).to eq(false)
+ expect(user.reload.pending_profile?).to eq(false)
complete_all_doc_auth_steps
click_idv_continue
@@ -17,7 +17,7 @@
it 'allows the user to retry verification with gpo' do
click_on t('idv.messages.clear_and_start_over')
- expect(user.reload.decorate.pending_profile?).to eq(false)
+ expect(user.reload.pending_profile?).to eq(false)
complete_all_doc_auth_steps
click_on t('idv.troubleshooting.options.verify_by_mail')
@@ -35,7 +35,7 @@
expect(page).to have_content(t('idv.messages.come_back_later', app: APP_NAME))
expect(page).to have_current_path(idv_come_back_later_path)
expect(user.reload.decorate.identity_verified?).to eq(false)
- expect(user.decorate.pending_profile?).to eq(true)
+ expect(user.pending_profile?).to eq(true)
expect(gpo_confirmation.entry[:address1]).to eq('1 FAKE RD')
end
diff --git a/tsconfig.json b/tsconfig.json
index 31ea0f46682..d94a9bc88b4 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -14,17 +14,24 @@
"include": [
"app/javascript/app/phone-internationalization.js",
"app/javascript/packages",
- "app/javascript/packs/doc-capture-polling.js",
- "app/javascript/packs/document-capture.jsx",
- "app/javascript/packs/form-steps-wait.jsx",
- "app/javascript/packs/form-validation.js",
- "app/javascript/packs/masked-text-toggle.js",
- "app/javascript/packs/one-time-code-input.js",
- "app/javascript/packs/intl-tel-input.js",
- "app/javascript/packs/spinner-button.js",
- "app/javascript/packs/step-indicator.js",
- "app/javascript/packs/session-expire-session.js",
- "app/javascript/packs/session-timeout-ping.js"
+ "app/javascript/packs"
],
- "exclude": ["**/fixtures", "**/*.spec.js"]
+ "exclude": [
+ "**/fixtures",
+ "**/*.spec.js",
+ "app/javascript/packs/accept-terms-button.js",
+ "app/javascript/packs/application.js",
+ "app/javascript/packs/email-validation.js",
+ "app/javascript/packs/ial2-consent-button.js",
+ "app/javascript/packs/personal-key-page-controller.js",
+ "app/javascript/packs/pw-strength.js",
+ "app/javascript/packs/reactivate-account-modal.js",
+ "app/javascript/packs/saml-post.js",
+ "app/javascript/packs/ssn-field.js",
+ "app/javascript/packs/upload-step.js",
+ "app/javascript/packs/webauthn-authenticate.js",
+ "app/javascript/packs/webauthn-setup.js",
+ "app/javascript/packs/webauthn-unhide-signin.js",
+ "app/javascript/packs/webauthn-unhide-signup.js"
+ ]
}
diff --git a/yarn.lock b/yarn.lock
index 0dea33cc057..78054bcce12 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9,32 +9,32 @@
dependencies:
"@babel/highlight" "^7.10.4"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13":
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb"
integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==
dependencies:
"@babel/highlight" "^7.14.5"
-"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.13.8":
- version "7.13.15"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4"
- integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==
-
-"@babel/core@^7.13.1", "@babel/core@^7.13.16":
- version "7.13.16"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.16.tgz#7756ab24396cc9675f1c3fcd5b79fcce192ea96a"
- integrity sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@babel/generator" "^7.13.16"
- "@babel/helper-compilation-targets" "^7.13.16"
- "@babel/helper-module-transforms" "^7.13.14"
- "@babel/helpers" "^7.13.16"
- "@babel/parser" "^7.13.16"
- "@babel/template" "^7.12.13"
- "@babel/traverse" "^7.13.15"
- "@babel/types" "^7.13.16"
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176"
+ integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==
+
+"@babel/core@^7.13.16", "@babel/core@^7.15.5":
+ version "7.15.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.5.tgz#f8ed9ace730722544609f90c9bb49162dc3bf5b9"
+ integrity sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/generator" "^7.15.4"
+ "@babel/helper-compilation-targets" "^7.15.4"
+ "@babel/helper-module-transforms" "^7.15.4"
+ "@babel/helpers" "^7.15.4"
+ "@babel/parser" "^7.15.5"
+ "@babel/template" "^7.15.4"
+ "@babel/traverse" "^7.15.4"
+ "@babel/types" "^7.15.4"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
@@ -58,63 +58,64 @@
dependencies:
eslint-rule-composer "^0.3.0"
-"@babel/generator@^7.13.16":
- version "7.13.16"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.16.tgz#0befc287031a201d84cdfc173b46b320ae472d14"
- integrity sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==
+"@babel/generator@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0"
+ integrity sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==
dependencies:
- "@babel/types" "^7.13.16"
+ "@babel/types" "^7.15.4"
jsesc "^2.5.1"
source-map "^0.5.0"
-"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab"
- integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==
+"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835"
+ integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==
dependencies:
- "@babel/types" "^7.12.13"
+ "@babel/types" "^7.15.4"
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc"
- integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz#21ad815f609b84ee0e3058676c33cf6d1670525f"
+ integrity sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==
dependencies:
- "@babel/helper-explode-assignable-expression" "^7.12.13"
- "@babel/types" "^7.12.13"
+ "@babel/helper-explode-assignable-expression" "^7.15.4"
+ "@babel/types" "^7.15.4"
-"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.13.8":
- version "7.13.16"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c"
- integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==
+"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9"
+ integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==
dependencies:
- "@babel/compat-data" "^7.13.15"
- "@babel/helper-validator-option" "^7.12.17"
- browserslist "^4.14.5"
+ "@babel/compat-data" "^7.15.0"
+ "@babel/helper-validator-option" "^7.14.5"
+ browserslist "^4.16.6"
semver "^6.3.0"
-"@babel/helper-create-class-features-plugin@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.0.tgz#28d04ad9cfbd1ed1d8b988c9ea7b945263365846"
- integrity sha512-twwzhthM4/+6o9766AW2ZBHpIHPSGrPGk1+WfHiu13u/lBnggXGNYCpeAyVfNwGDKfkhEDp+WOD/xafoJ2iLjA==
+"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e"
+ integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==
dependencies:
- "@babel/helper-function-name" "^7.12.13"
- "@babel/helper-member-expression-to-functions" "^7.13.0"
- "@babel/helper-optimise-call-expression" "^7.12.13"
- "@babel/helper-replace-supers" "^7.13.0"
- "@babel/helper-split-export-declaration" "^7.12.13"
+ "@babel/helper-annotate-as-pure" "^7.15.4"
+ "@babel/helper-function-name" "^7.15.4"
+ "@babel/helper-member-expression-to-functions" "^7.15.4"
+ "@babel/helper-optimise-call-expression" "^7.15.4"
+ "@babel/helper-replace-supers" "^7.15.4"
+ "@babel/helper-split-export-declaration" "^7.15.4"
-"@babel/helper-create-regexp-features-plugin@^7.12.13":
- version "7.12.17"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7"
- integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==
+"@babel/helper-create-regexp-features-plugin@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4"
+ integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.12.13"
+ "@babel/helper-annotate-as-pure" "^7.14.5"
regexpu-core "^4.7.1"
-"@babel/helper-define-polyfill-provider@^0.2.0":
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz#a640051772045fedaaecc6f0c6c69f02bdd34bf1"
- integrity sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==
+"@babel/helper-define-polyfill-provider@^0.2.2":
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6"
+ integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==
dependencies:
"@babel/helper-compilation-targets" "^7.13.0"
"@babel/helper-module-imports" "^7.12.13"
@@ -125,145 +126,144 @@
resolve "^1.14.2"
semver "^6.1.2"
-"@babel/helper-explode-assignable-expression@^7.12.13":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f"
- integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==
+"@babel/helper-explode-assignable-expression@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz#f9aec9d219f271eaf92b9f561598ca6b2682600c"
+ integrity sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==
dependencies:
- "@babel/types" "^7.13.0"
+ "@babel/types" "^7.15.4"
-"@babel/helper-function-name@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a"
- integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==
+"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc"
+ integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==
dependencies:
- "@babel/helper-get-function-arity" "^7.12.13"
- "@babel/template" "^7.12.13"
- "@babel/types" "^7.12.13"
+ "@babel/helper-get-function-arity" "^7.15.4"
+ "@babel/template" "^7.15.4"
+ "@babel/types" "^7.15.4"
-"@babel/helper-get-function-arity@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583"
- integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==
+"@babel/helper-get-function-arity@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b"
+ integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==
dependencies:
- "@babel/types" "^7.12.13"
+ "@babel/types" "^7.15.4"
-"@babel/helper-hoist-variables@^7.13.0":
- version "7.13.16"
- resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30"
- integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==
+"@babel/helper-hoist-variables@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df"
+ integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==
dependencies:
- "@babel/traverse" "^7.13.15"
- "@babel/types" "^7.13.16"
+ "@babel/types" "^7.15.4"
-"@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12":
- version "7.13.12"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72"
- integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==
+"@babel/helper-member-expression-to-functions@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef"
+ integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==
dependencies:
- "@babel/types" "^7.13.12"
+ "@babel/types" "^7.15.4"
-"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12":
- version "7.13.12"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977"
- integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==
+"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f"
+ integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==
dependencies:
- "@babel/types" "^7.13.12"
+ "@babel/types" "^7.15.4"
-"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.14":
- version "7.13.14"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef"
- integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==
+"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4":
+ version "7.15.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz#7da80c8cbc1f02655d83f8b79d25866afe50d226"
+ integrity sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==
dependencies:
- "@babel/helper-module-imports" "^7.13.12"
- "@babel/helper-replace-supers" "^7.13.12"
- "@babel/helper-simple-access" "^7.13.12"
- "@babel/helper-split-export-declaration" "^7.12.13"
- "@babel/helper-validator-identifier" "^7.12.11"
- "@babel/template" "^7.12.13"
- "@babel/traverse" "^7.13.13"
- "@babel/types" "^7.13.14"
-
-"@babel/helper-optimise-call-expression@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea"
- integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==
+ "@babel/helper-module-imports" "^7.15.4"
+ "@babel/helper-replace-supers" "^7.15.4"
+ "@babel/helper-simple-access" "^7.15.4"
+ "@babel/helper-split-export-declaration" "^7.15.4"
+ "@babel/helper-validator-identifier" "^7.15.7"
+ "@babel/template" "^7.15.4"
+ "@babel/traverse" "^7.15.4"
+ "@babel/types" "^7.15.6"
+
+"@babel/helper-optimise-call-expression@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171"
+ integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==
dependencies:
- "@babel/types" "^7.12.13"
+ "@babel/types" "^7.15.4"
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af"
- integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"
+ integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==
-"@babel/helper-remap-async-to-generator@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209"
- integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==
+"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f"
+ integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.12.13"
- "@babel/helper-wrap-function" "^7.13.0"
- "@babel/types" "^7.13.0"
+ "@babel/helper-annotate-as-pure" "^7.15.4"
+ "@babel/helper-wrap-function" "^7.15.4"
+ "@babel/types" "^7.15.4"
-"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12":
- version "7.13.12"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804"
- integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==
+"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a"
+ integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==
dependencies:
- "@babel/helper-member-expression-to-functions" "^7.13.12"
- "@babel/helper-optimise-call-expression" "^7.12.13"
- "@babel/traverse" "^7.13.0"
- "@babel/types" "^7.13.12"
+ "@babel/helper-member-expression-to-functions" "^7.15.4"
+ "@babel/helper-optimise-call-expression" "^7.15.4"
+ "@babel/traverse" "^7.15.4"
+ "@babel/types" "^7.15.4"
-"@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12":
- version "7.13.12"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6"
- integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==
+"@babel/helper-simple-access@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b"
+ integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==
dependencies:
- "@babel/types" "^7.13.12"
+ "@babel/types" "^7.15.4"
-"@babel/helper-skip-transparent-expression-wrappers@^7.12.1":
- version "7.12.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf"
- integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==
+"@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb"
+ integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==
dependencies:
- "@babel/types" "^7.12.1"
+ "@babel/types" "^7.15.4"
-"@babel/helper-split-export-declaration@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05"
- integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==
+"@babel/helper-split-export-declaration@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257"
+ integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==
dependencies:
- "@babel/types" "^7.12.13"
+ "@babel/types" "^7.15.4"
-"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.5":
- version "7.14.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48"
- integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==
+"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7":
+ version "7.15.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389"
+ integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==
-"@babel/helper-validator-option@^7.12.17":
- version "7.12.17"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831"
- integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==
+"@babel/helper-validator-option@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
+ integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
-"@babel/helper-wrap-function@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4"
- integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==
+"@babel/helper-wrap-function@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7"
+ integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==
dependencies:
- "@babel/helper-function-name" "^7.12.13"
- "@babel/template" "^7.12.13"
- "@babel/traverse" "^7.13.0"
- "@babel/types" "^7.13.0"
+ "@babel/helper-function-name" "^7.15.4"
+ "@babel/template" "^7.15.4"
+ "@babel/traverse" "^7.15.4"
+ "@babel/types" "^7.15.4"
-"@babel/helpers@^7.13.16":
- version "7.13.17"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.17.tgz#b497c7a00e9719d5b613b8982bda6ed3ee94caf6"
- integrity sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==
+"@babel/helpers@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43"
+ integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==
dependencies:
- "@babel/template" "^7.12.13"
- "@babel/traverse" "^7.13.17"
- "@babel/types" "^7.13.17"
+ "@babel/template" "^7.15.4"
+ "@babel/traverse" "^7.15.4"
+ "@babel/types" "^7.15.4"
"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":
version "7.14.5"
@@ -274,128 +274,147 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/parser@^7.12.13", "@babel/parser@^7.13.16":
- version "7.13.16"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37"
- integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==
+"@babel/parser@^7.15.4", "@babel/parser@^7.15.5":
+ version "7.15.7"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.7.tgz#0c3ed4a2eb07b165dfa85b3cc45c727334c4edae"
+ integrity sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==
-"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12":
- version "7.13.12"
- resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a"
- integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e"
+ integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
- "@babel/plugin-proposal-optional-chaining" "^7.13.12"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4"
+ "@babel/plugin-proposal-optional-chaining" "^7.14.5"
-"@babel/plugin-proposal-async-generator-functions@^7.13.15":
- version "7.13.15"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz#80e549df273a3b3050431b148c892491df1bcc5b"
- integrity sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==
+"@babel/plugin-proposal-async-generator-functions@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz#f82aabe96c135d2ceaa917feb9f5fca31635277e"
+ integrity sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
- "@babel/helper-remap-async-to-generator" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-remap-async-to-generator" "^7.15.4"
"@babel/plugin-syntax-async-generators" "^7.8.4"
-"@babel/plugin-proposal-class-properties@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37"
- integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==
+"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e"
+ integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.13.0"
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-create-class-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-proposal-dynamic-import@^7.13.8":
- version "7.13.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d"
- integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==
+"@babel/plugin-proposal-class-static-block@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz#3e7ca6128453c089e8b477a99f970c63fc1cb8d7"
+ integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-create-class-features-plugin" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-proposal-dynamic-import@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c"
+ integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
-"@babel/plugin-proposal-export-namespace-from@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d"
- integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==
+"@babel/plugin-proposal-export-namespace-from@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76"
+ integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
-"@babel/plugin-proposal-json-strings@^7.13.8":
- version "7.13.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b"
- integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==
+"@babel/plugin-proposal-json-strings@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb"
+ integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-json-strings" "^7.8.3"
-"@babel/plugin-proposal-logical-assignment-operators@^7.13.8":
- version "7.13.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a"
- integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==
+"@babel/plugin-proposal-logical-assignment-operators@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738"
+ integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
-"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8":
- version "7.13.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3"
- integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6"
+ integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-"@babel/plugin-proposal-numeric-separator@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db"
- integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==
+"@babel/plugin-proposal-numeric-separator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18"
+ integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
-"@babel/plugin-proposal-object-rest-spread@^7.13.8":
- version "7.13.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a"
- integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==
+"@babel/plugin-proposal-object-rest-spread@^7.13.8", "@babel/plugin-proposal-object-rest-spread@^7.15.6":
+ version "7.15.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11"
+ integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==
dependencies:
- "@babel/compat-data" "^7.13.8"
- "@babel/helper-compilation-targets" "^7.13.8"
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/compat-data" "^7.15.0"
+ "@babel/helper-compilation-targets" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
- "@babel/plugin-transform-parameters" "^7.13.0"
+ "@babel/plugin-transform-parameters" "^7.15.4"
-"@babel/plugin-proposal-optional-catch-binding@^7.13.8":
- version "7.13.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107"
- integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==
+"@babel/plugin-proposal-optional-catch-binding@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c"
+ integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
-"@babel/plugin-proposal-optional-chaining@^7.13.12":
- version "7.13.12"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866"
- integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==
+"@babel/plugin-proposal-optional-chaining@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603"
+ integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
-"@babel/plugin-proposal-private-methods@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787"
- integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==
+"@babel/plugin-proposal-private-methods@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d"
+ integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.13.0"
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-create-class-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba"
- integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==
+"@babel/plugin-proposal-private-property-in-object@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5"
+ integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.12.13"
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-annotate-as-pure" "^7.15.4"
+ "@babel/helper-create-class-features-plugin" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8"
+ integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
@@ -411,6 +430,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.12.13"
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+ integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
"@babel/plugin-syntax-dynamic-import@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
@@ -432,12 +458,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15"
- integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==
+"@babel/plugin-syntax-jsx@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201"
+ integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
version "7.10.4"
@@ -481,242 +507,249 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-top-level-await@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178"
- integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
+ integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-arrow-functions@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae"
- integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==
+"@babel/plugin-syntax-top-level-await@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
+ integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-async-to-generator@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f"
- integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==
+"@babel/plugin-transform-arrow-functions@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a"
+ integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==
dependencies:
- "@babel/helper-module-imports" "^7.12.13"
- "@babel/helper-plugin-utils" "^7.13.0"
- "@babel/helper-remap-async-to-generator" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-block-scoped-functions@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4"
- integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==
+"@babel/plugin-transform-async-to-generator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67"
+ integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-module-imports" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-remap-async-to-generator" "^7.14.5"
-"@babel/plugin-transform-block-scoping@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61"
- integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==
+"@babel/plugin-transform-block-scoped-functions@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4"
+ integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-classes@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b"
- integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==
+"@babel/plugin-transform-block-scoping@^7.15.3":
+ version "7.15.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf"
+ integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.12.13"
- "@babel/helper-function-name" "^7.12.13"
- "@babel/helper-optimise-call-expression" "^7.12.13"
- "@babel/helper-plugin-utils" "^7.13.0"
- "@babel/helper-replace-supers" "^7.13.0"
- "@babel/helper-split-export-declaration" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-classes@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1"
+ integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.15.4"
+ "@babel/helper-function-name" "^7.15.4"
+ "@babel/helper-optimise-call-expression" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-replace-supers" "^7.15.4"
+ "@babel/helper-split-export-declaration" "^7.15.4"
globals "^11.1.0"
-"@babel/plugin-transform-computed-properties@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed"
- integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==
+"@babel/plugin-transform-computed-properties@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f"
+ integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-destructuring@^7.13.0", "@babel/plugin-transform-destructuring@^7.13.17":
- version "7.13.17"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27"
- integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==
+"@babel/plugin-transform-destructuring@^7.13.17", "@babel/plugin-transform-destructuring@^7.14.7":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576"
+ integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad"
- integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==
+"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a"
+ integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.12.13"
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-duplicate-keys@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de"
- integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==
+"@babel/plugin-transform-duplicate-keys@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954"
+ integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-exponentiation-operator@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1"
- integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==
+"@babel/plugin-transform-exponentiation-operator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493"
+ integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==
dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13"
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-for-of@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062"
- integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==
+"@babel/plugin-transform-for-of@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2"
+ integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-function-name@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051"
- integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==
+"@babel/plugin-transform-function-name@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2"
+ integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==
dependencies:
- "@babel/helper-function-name" "^7.12.13"
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-function-name" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-literals@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9"
- integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==
+"@babel/plugin-transform-literals@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78"
+ integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-member-expression-literals@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40"
- integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==
+"@babel/plugin-transform-member-expression-literals@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7"
+ integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-modules-amd@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3"
- integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==
+"@babel/plugin-transform-modules-amd@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7"
+ integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==
dependencies:
- "@babel/helper-module-transforms" "^7.13.0"
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-module-transforms" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-commonjs@^7.13.8":
- version "7.13.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b"
- integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==
+"@babel/plugin-transform-modules-commonjs@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1"
+ integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==
dependencies:
- "@babel/helper-module-transforms" "^7.13.0"
- "@babel/helper-plugin-utils" "^7.13.0"
- "@babel/helper-simple-access" "^7.12.13"
+ "@babel/helper-module-transforms" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-simple-access" "^7.15.4"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-systemjs@^7.13.8":
- version "7.13.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3"
- integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==
+"@babel/plugin-transform-modules-systemjs@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132"
+ integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==
dependencies:
- "@babel/helper-hoist-variables" "^7.13.0"
- "@babel/helper-module-transforms" "^7.13.0"
- "@babel/helper-plugin-utils" "^7.13.0"
- "@babel/helper-validator-identifier" "^7.12.11"
+ "@babel/helper-hoist-variables" "^7.15.4"
+ "@babel/helper-module-transforms" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-validator-identifier" "^7.14.9"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-umd@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b"
- integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==
+"@babel/plugin-transform-modules-umd@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0"
+ integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==
dependencies:
- "@babel/helper-module-transforms" "^7.13.0"
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-module-transforms" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9"
- integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9":
+ version "7.14.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2"
+ integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.12.13"
+ "@babel/helper-create-regexp-features-plugin" "^7.14.5"
-"@babel/plugin-transform-new-target@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c"
- integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==
+"@babel/plugin-transform-new-target@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8"
+ integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-object-super@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7"
- integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==
+"@babel/plugin-transform-object-super@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45"
+ integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
- "@babel/helper-replace-supers" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-replace-supers" "^7.14.5"
-"@babel/plugin-transform-parameters@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007"
- integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==
+"@babel/plugin-transform-parameters@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62"
+ integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-property-literals@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81"
- integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==
+"@babel/plugin-transform-property-literals@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34"
+ integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-react-display-name@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd"
- integrity sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==
+"@babel/plugin-transform-react-display-name@^7.14.5":
+ version "7.15.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz#6aaac6099f1fcf6589d35ae6be1b6e10c8c602b9"
+ integrity sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-react-jsx-development@^7.12.12":
- version "7.12.17"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447"
- integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==
+"@babel/plugin-transform-react-jsx-development@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz#1a6c73e2f7ed2c42eebc3d2ad60b0c7494fcb9af"
+ integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==
dependencies:
- "@babel/plugin-transform-react-jsx" "^7.12.17"
+ "@babel/plugin-transform-react-jsx" "^7.14.5"
-"@babel/plugin-transform-react-jsx@^7.12.13", "@babel/plugin-transform-react-jsx@^7.12.17":
- version "7.12.17"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.17.tgz#dd2c1299f5e26de584939892de3cfc1807a38f24"
- integrity sha512-mwaVNcXV+l6qJOuRhpdTEj8sT/Z0owAVWf9QujTZ0d2ye9X/K+MTOTSizcgKOj18PGnTc/7g1I4+cIUjsKhBcw==
+"@babel/plugin-transform-react-jsx@^7.14.5":
+ version "7.14.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz#3314b2163033abac5200a869c4de242cd50a914c"
+ integrity sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.12.13"
- "@babel/helper-module-imports" "^7.12.13"
- "@babel/helper-plugin-utils" "^7.12.13"
- "@babel/plugin-syntax-jsx" "^7.12.13"
- "@babel/types" "^7.12.17"
+ "@babel/helper-annotate-as-pure" "^7.14.5"
+ "@babel/helper-module-imports" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-jsx" "^7.14.5"
+ "@babel/types" "^7.14.9"
-"@babel/plugin-transform-react-pure-annotations@^7.12.1":
- version "7.12.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42"
- integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==
+"@babel/plugin-transform-react-pure-annotations@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc"
+ integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.10.4"
- "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-annotate-as-pure" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-regenerator@^7.13.15":
- version "7.13.15"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39"
- integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==
+"@babel/plugin-transform-regenerator@^7.13.15", "@babel/plugin-transform-regenerator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f"
+ integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==
dependencies:
regenerator-transform "^0.14.2"
-"@babel/plugin-transform-reserved-words@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695"
- integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==
+"@babel/plugin-transform-reserved-words@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304"
+ integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-transform-runtime@^7.13.15":
version "7.13.15"
@@ -730,82 +763,85 @@
babel-plugin-polyfill-regenerator "^0.2.0"
semver "^6.3.0"
-"@babel/plugin-transform-shorthand-properties@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad"
- integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==
+"@babel/plugin-transform-shorthand-properties@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58"
+ integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-spread@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd"
- integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==
+"@babel/plugin-transform-spread@^7.14.6":
+ version "7.14.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144"
+ integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
-"@babel/plugin-transform-sticky-regex@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f"
- integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==
+"@babel/plugin-transform-sticky-regex@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9"
+ integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-template-literals@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d"
- integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==
+"@babel/plugin-transform-template-literals@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93"
+ integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==
dependencies:
- "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-typeof-symbol@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f"
- integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
-
-"@babel/plugin-transform-unicode-escapes@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74"
- integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==
+"@babel/plugin-transform-typeof-symbol@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4"
+ integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==
dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-unicode-regex@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac"
- integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==
+"@babel/plugin-transform-unicode-escapes@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b"
+ integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.12.13"
- "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.14.5"
-"@babel/preset-env@^7.13.15", "@babel/preset-env@^7.13.5":
- version "7.13.15"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.15.tgz#c8a6eb584f96ecba183d3d414a83553a599f478f"
- integrity sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA==
- dependencies:
- "@babel/compat-data" "^7.13.15"
- "@babel/helper-compilation-targets" "^7.13.13"
- "@babel/helper-plugin-utils" "^7.13.0"
- "@babel/helper-validator-option" "^7.12.17"
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12"
- "@babel/plugin-proposal-async-generator-functions" "^7.13.15"
- "@babel/plugin-proposal-class-properties" "^7.13.0"
- "@babel/plugin-proposal-dynamic-import" "^7.13.8"
- "@babel/plugin-proposal-export-namespace-from" "^7.12.13"
- "@babel/plugin-proposal-json-strings" "^7.13.8"
- "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8"
- "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8"
- "@babel/plugin-proposal-numeric-separator" "^7.12.13"
- "@babel/plugin-proposal-object-rest-spread" "^7.13.8"
- "@babel/plugin-proposal-optional-catch-binding" "^7.13.8"
- "@babel/plugin-proposal-optional-chaining" "^7.13.12"
- "@babel/plugin-proposal-private-methods" "^7.13.0"
- "@babel/plugin-proposal-unicode-property-regex" "^7.12.13"
+"@babel/plugin-transform-unicode-regex@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e"
+ integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/preset-env@^7.13.15", "@babel/preset-env@^7.15.6":
+ version "7.15.6"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.6.tgz#0f3898db9d63d320f21b17380d8462779de57659"
+ integrity sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw==
+ dependencies:
+ "@babel/compat-data" "^7.15.0"
+ "@babel/helper-compilation-targets" "^7.15.4"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-validator-option" "^7.14.5"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4"
+ "@babel/plugin-proposal-async-generator-functions" "^7.15.4"
+ "@babel/plugin-proposal-class-properties" "^7.14.5"
+ "@babel/plugin-proposal-class-static-block" "^7.15.4"
+ "@babel/plugin-proposal-dynamic-import" "^7.14.5"
+ "@babel/plugin-proposal-export-namespace-from" "^7.14.5"
+ "@babel/plugin-proposal-json-strings" "^7.14.5"
+ "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"
+ "@babel/plugin-proposal-numeric-separator" "^7.14.5"
+ "@babel/plugin-proposal-object-rest-spread" "^7.15.6"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.14.5"
+ "@babel/plugin-proposal-optional-chaining" "^7.14.5"
+ "@babel/plugin-proposal-private-methods" "^7.14.5"
+ "@babel/plugin-proposal-private-property-in-object" "^7.15.4"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.14.5"
"@babel/plugin-syntax-async-generators" "^7.8.4"
"@babel/plugin-syntax-class-properties" "^7.12.13"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
"@babel/plugin-syntax-json-strings" "^7.8.3"
@@ -815,45 +851,46 @@
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
- "@babel/plugin-syntax-top-level-await" "^7.12.13"
- "@babel/plugin-transform-arrow-functions" "^7.13.0"
- "@babel/plugin-transform-async-to-generator" "^7.13.0"
- "@babel/plugin-transform-block-scoped-functions" "^7.12.13"
- "@babel/plugin-transform-block-scoping" "^7.12.13"
- "@babel/plugin-transform-classes" "^7.13.0"
- "@babel/plugin-transform-computed-properties" "^7.13.0"
- "@babel/plugin-transform-destructuring" "^7.13.0"
- "@babel/plugin-transform-dotall-regex" "^7.12.13"
- "@babel/plugin-transform-duplicate-keys" "^7.12.13"
- "@babel/plugin-transform-exponentiation-operator" "^7.12.13"
- "@babel/plugin-transform-for-of" "^7.13.0"
- "@babel/plugin-transform-function-name" "^7.12.13"
- "@babel/plugin-transform-literals" "^7.12.13"
- "@babel/plugin-transform-member-expression-literals" "^7.12.13"
- "@babel/plugin-transform-modules-amd" "^7.13.0"
- "@babel/plugin-transform-modules-commonjs" "^7.13.8"
- "@babel/plugin-transform-modules-systemjs" "^7.13.8"
- "@babel/plugin-transform-modules-umd" "^7.13.0"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13"
- "@babel/plugin-transform-new-target" "^7.12.13"
- "@babel/plugin-transform-object-super" "^7.12.13"
- "@babel/plugin-transform-parameters" "^7.13.0"
- "@babel/plugin-transform-property-literals" "^7.12.13"
- "@babel/plugin-transform-regenerator" "^7.13.15"
- "@babel/plugin-transform-reserved-words" "^7.12.13"
- "@babel/plugin-transform-shorthand-properties" "^7.12.13"
- "@babel/plugin-transform-spread" "^7.13.0"
- "@babel/plugin-transform-sticky-regex" "^7.12.13"
- "@babel/plugin-transform-template-literals" "^7.13.0"
- "@babel/plugin-transform-typeof-symbol" "^7.12.13"
- "@babel/plugin-transform-unicode-escapes" "^7.12.13"
- "@babel/plugin-transform-unicode-regex" "^7.12.13"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+ "@babel/plugin-syntax-top-level-await" "^7.14.5"
+ "@babel/plugin-transform-arrow-functions" "^7.14.5"
+ "@babel/plugin-transform-async-to-generator" "^7.14.5"
+ "@babel/plugin-transform-block-scoped-functions" "^7.14.5"
+ "@babel/plugin-transform-block-scoping" "^7.15.3"
+ "@babel/plugin-transform-classes" "^7.15.4"
+ "@babel/plugin-transform-computed-properties" "^7.14.5"
+ "@babel/plugin-transform-destructuring" "^7.14.7"
+ "@babel/plugin-transform-dotall-regex" "^7.14.5"
+ "@babel/plugin-transform-duplicate-keys" "^7.14.5"
+ "@babel/plugin-transform-exponentiation-operator" "^7.14.5"
+ "@babel/plugin-transform-for-of" "^7.15.4"
+ "@babel/plugin-transform-function-name" "^7.14.5"
+ "@babel/plugin-transform-literals" "^7.14.5"
+ "@babel/plugin-transform-member-expression-literals" "^7.14.5"
+ "@babel/plugin-transform-modules-amd" "^7.14.5"
+ "@babel/plugin-transform-modules-commonjs" "^7.15.4"
+ "@babel/plugin-transform-modules-systemjs" "^7.15.4"
+ "@babel/plugin-transform-modules-umd" "^7.14.5"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9"
+ "@babel/plugin-transform-new-target" "^7.14.5"
+ "@babel/plugin-transform-object-super" "^7.14.5"
+ "@babel/plugin-transform-parameters" "^7.15.4"
+ "@babel/plugin-transform-property-literals" "^7.14.5"
+ "@babel/plugin-transform-regenerator" "^7.14.5"
+ "@babel/plugin-transform-reserved-words" "^7.14.5"
+ "@babel/plugin-transform-shorthand-properties" "^7.14.5"
+ "@babel/plugin-transform-spread" "^7.14.6"
+ "@babel/plugin-transform-sticky-regex" "^7.14.5"
+ "@babel/plugin-transform-template-literals" "^7.14.5"
+ "@babel/plugin-transform-typeof-symbol" "^7.14.5"
+ "@babel/plugin-transform-unicode-escapes" "^7.14.5"
+ "@babel/plugin-transform-unicode-regex" "^7.14.5"
"@babel/preset-modules" "^0.1.4"
- "@babel/types" "^7.13.14"
- babel-plugin-polyfill-corejs2 "^0.2.0"
- babel-plugin-polyfill-corejs3 "^0.2.0"
- babel-plugin-polyfill-regenerator "^0.2.0"
- core-js-compat "^3.9.0"
+ "@babel/types" "^7.15.6"
+ babel-plugin-polyfill-corejs2 "^0.2.2"
+ babel-plugin-polyfill-corejs3 "^0.2.2"
+ babel-plugin-polyfill-regenerator "^0.2.2"
+ core-js-compat "^3.16.0"
semver "^6.3.0"
"@babel/preset-modules@^0.1.4":
@@ -867,24 +904,25 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
-"@babel/preset-react@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.13.tgz#5f911b2eb24277fa686820d5bd81cad9a0602a0a"
- integrity sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
- "@babel/plugin-transform-react-display-name" "^7.12.13"
- "@babel/plugin-transform-react-jsx" "^7.12.13"
- "@babel/plugin-transform-react-jsx-development" "^7.12.12"
- "@babel/plugin-transform-react-pure-annotations" "^7.12.1"
-
-"@babel/register@^7.13.0":
- version "7.13.0"
- resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.13.0.tgz#865eb78a3ed94c6ad72d0e550180b3d6566dfb8d"
- integrity sha512-nswFANDBcO661RvGOHfVKVRBZIe9wJuFFIJYJWpO8LwYn8WI+h/2JZhceLvlxjxEvMH6/oGkEBgz5SnqUUMkCg==
- dependencies:
+"@babel/preset-react@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c"
+ integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-validator-option" "^7.14.5"
+ "@babel/plugin-transform-react-display-name" "^7.14.5"
+ "@babel/plugin-transform-react-jsx" "^7.14.5"
+ "@babel/plugin-transform-react-jsx-development" "^7.14.5"
+ "@babel/plugin-transform-react-pure-annotations" "^7.14.5"
+
+"@babel/register@^7.15.3":
+ version "7.15.3"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.15.3.tgz#6b40a549e06ec06c885b2ec42c3dd711f55fe752"
+ integrity sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==
+ dependencies:
+ clone-deep "^4.0.1"
find-cache-dir "^2.0.0"
- lodash "^4.17.19"
make-dir "^2.1.0"
pirates "^4.0.0"
source-map-support "^0.5.16"
@@ -904,35 +942,36 @@
dependencies:
regenerator-runtime "^0.13.4"
-"@babel/template@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327"
- integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@babel/parser" "^7.12.13"
- "@babel/types" "^7.12.13"
-
-"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.13.15", "@babel/traverse@^7.13.17":
- version "7.13.17"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.17.tgz#c85415e0c7d50ac053d758baec98b28b2ecfeea3"
- integrity sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@babel/generator" "^7.13.16"
- "@babel/helper-function-name" "^7.12.13"
- "@babel/helper-split-export-declaration" "^7.12.13"
- "@babel/parser" "^7.13.16"
- "@babel/types" "^7.13.17"
+"@babel/template@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194"
+ integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/parser" "^7.15.4"
+ "@babel/types" "^7.15.4"
+
+"@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4":
+ version "7.15.4"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d"
+ integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/generator" "^7.15.4"
+ "@babel/helper-function-name" "^7.15.4"
+ "@babel/helper-hoist-variables" "^7.15.4"
+ "@babel/helper-split-export-declaration" "^7.15.4"
+ "@babel/parser" "^7.15.4"
+ "@babel/types" "^7.15.4"
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.13.16", "@babel/types@^7.13.17", "@babel/types@^7.4.4":
- version "7.13.17"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4"
- integrity sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==
+"@babel/types@^7.14.9", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.4.4":
+ version "7.15.6"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f"
+ integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==
dependencies:
- "@babel/helper-validator-identifier" "^7.12.11"
+ "@babel/helper-validator-identifier" "^7.14.9"
to-fast-properties "^2.0.0"
"@csstools/convert-colors@^1.4.0":
@@ -1831,29 +1870,29 @@ babel-plugin-macros@^2.8.0:
cosmiconfig "^6.0.0"
resolve "^1.12.0"
-babel-plugin-polyfill-corejs2@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz#686775bf9a5aa757e10520903675e3889caeedc4"
- integrity sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==
+babel-plugin-polyfill-corejs2@^0.2.0, babel-plugin-polyfill-corejs2@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327"
+ integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==
dependencies:
"@babel/compat-data" "^7.13.11"
- "@babel/helper-define-polyfill-provider" "^0.2.0"
+ "@babel/helper-define-polyfill-provider" "^0.2.2"
semver "^6.1.1"
-babel-plugin-polyfill-corejs3@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz#f4b4bb7b19329827df36ff56f6e6d367026cb7a2"
- integrity sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==
+babel-plugin-polyfill-corejs3@^0.2.0, babel-plugin-polyfill-corejs3@^0.2.2:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92"
+ integrity sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==
dependencies:
- "@babel/helper-define-polyfill-provider" "^0.2.0"
- core-js-compat "^3.9.1"
+ "@babel/helper-define-polyfill-provider" "^0.2.2"
+ core-js-compat "^3.16.2"
-babel-plugin-polyfill-regenerator@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz#853f5f5716f4691d98c84f8069c7636ea8da7ab8"
- integrity sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==
+babel-plugin-polyfill-regenerator@^0.2.0, babel-plugin-polyfill-regenerator@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077"
+ integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==
dependencies:
- "@babel/helper-define-polyfill-provider" "^0.2.0"
+ "@babel/helper-define-polyfill-provider" "^0.2.2"
balanced-match@^1.0.0:
version "1.0.2"
@@ -2275,16 +2314,16 @@ browserify-zlib@^0.2.0:
dependencies:
pako "~1.0.5"
-browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.5, browserslist@^4.6.4:
- version "4.16.5"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.5.tgz#952825440bca8913c62d0021334cbe928ef062ae"
- integrity sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==
+browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.17.3, browserslist@^4.6.4:
+ version "4.17.3"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.3.tgz#2844cd6eebe14d12384b0122d217550160d2d624"
+ integrity sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ==
dependencies:
- caniuse-lite "^1.0.30001214"
- colorette "^1.2.2"
- electron-to-chromium "^1.3.719"
+ caniuse-lite "^1.0.30001264"
+ electron-to-chromium "^1.3.857"
escalade "^3.1.1"
- node-releases "^1.1.71"
+ node-releases "^1.1.77"
+ picocolors "^0.2.1"
buffer-from@^1.0.0:
version "1.1.1"
@@ -2436,10 +2475,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001214:
- version "1.0.30001219"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz#5bfa5d0519f41f993618bd318f606a4c4c16156b"
- integrity sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001264:
+ version "1.0.30001265"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz#0613c9e6c922e422792e6fcefdf9a3afeee4f8c3"
+ integrity sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw==
case-sensitive-paths-webpack-plugin@^2.4.0:
version "2.4.0"
@@ -2610,6 +2649,15 @@ cliui@^7.0.2:
strip-ansi "^6.0.0"
wrap-ansi "^7.0.0"
+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"
+
coa@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
@@ -2667,7 +2715,7 @@ color@^3.0.0:
color-convert "^1.9.1"
color-string "^1.5.2"
-colorette@^1.2.1, colorette@^1.2.2:
+colorette@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
@@ -2816,12 +2864,12 @@ copy-descriptor@^0.1.0:
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-core-js-compat@^3.9.0, core-js-compat@^3.9.1:
- version "3.11.1"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.11.1.tgz#57a91e9b02d3bb8cf37f82eceaf44a3d646fa614"
- integrity sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==
+core-js-compat@^3.16.0, core-js-compat@^3.16.2:
+ version "3.18.2"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.2.tgz#e40c266fbd613948dd8d2d2156345da8ac03c142"
+ integrity sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ==
dependencies:
- browserslist "^4.16.5"
+ browserslist "^4.17.3"
semver "7.0.0"
core-js-pure@^3.0.0:
@@ -3478,10 +3526,10 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-electron-to-chromium@^1.3.719:
- version "1.3.723"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.723.tgz#52769a75635342a4db29af5f1e40bd3dad02c877"
- integrity sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg==
+electron-to-chromium@^1.3.857:
+ version "1.3.860"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.860.tgz#d612e54ed75fa524c12af8da3ad8121ebfe2802b"
+ integrity sha512-gWwGZ+Wv4Mou2SJRH6JQzhTPjL5f95SX7n6VkLTQ/Q/INsZLZNQ1vH2GlZjozKyvT0kkFuCmWTwIoCj+/hUDPw==
element-closest@^2.0.1:
version "2.0.2"
@@ -5611,7 +5659,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.5, lodash@^4.7.0:
+lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5, lodash@^4.7.0:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -6090,10 +6138,10 @@ node-modules-regexp@^1.0.0:
resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
-node-releases@^1.1.71:
- version "1.1.71"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb"
- integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==
+node-releases@^1.1.77:
+ version "1.1.77"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e"
+ integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==
normalize-package-data@^2.3.2:
version "2.5.0"
@@ -6589,6 +6637,11 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+picocolors@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
+ integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
+
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
version "2.3.0"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
@@ -8159,6 +8212,13 @@ sha.js@^2.4.0, sha.js@^2.4.8:
inherits "^2.0.1"
safe-buffer "^5.0.1"
+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@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"