diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 00000000..cae54a25
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+v12.14.1
diff --git a/.travis.yml b/.travis.yml
index 31069c40..995d8476 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,18 +1,30 @@
language: ruby
+dist: xenial
+sudo: required
+addons:
+ chrome: stable
cache:
bundler: true
yarn: true
directories:
- node_modules
- vendor/bundle
+before_install:
+- google-chrome-stable --headless --disable-gpu --remote-debugging-port=9222 http://localhost &
install:
- bundle install --deployment
+- nvm install
+- node --version
- yarn install
before_script:
- export SECRET_KEY_BASE=`bundle exec rake secret`
- bundle exec rake db:create RAILS_ENV=test
+- RAILS_ENV=test bundle exec rails webdrivers:chromedriver:update -r webdrivers
+- ln -s /home/travis/.webdrivers/chromedriver ~/bin/chromedriver
+- export PATH=~/bin:$PATH
script:
-- bundle exec rake
+- bundle exec rspec
+- xvfb-run -a bundle exec rspec --tag browser
- yarn test
after_success:
- chmod +x ./compile-build
@@ -20,6 +32,7 @@ after_success:
services:
- redis-server
- mysql
+- xvfb
deploy:
provider: releases
api_key:
diff --git a/Gemfile b/Gemfile
index c9c205db..6e80604c 100644
--- a/Gemfile
+++ b/Gemfile
@@ -29,6 +29,7 @@ gem 'jquery-rails'
gem 'react-rails'
gem 'sass-rails'
gem 'bootstrap-sass'
+gem 'sass'
gem 'will_paginate'
gem 'will_paginate-bootstrap'
@@ -83,6 +84,11 @@ group :test do
gem 'rails-controller-testing'
gem 'database_cleaner'
gem 'json-schema'
+ gem 'capybara'
+ gem 'selenium-webdriver'
+ gem 'mock_redis'
+ # Keep webdriver in sync with chrome to prevent frustrating CI failures
+ gem 'webdrivers', require: false
end
group :test do
diff --git a/Gemfile.lock b/Gemfile.lock
index e92f178c..011abdb6 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -25,7 +25,7 @@ GIT
GEM
remote: http://rubygems.org/
specs:
- aasm (5.0.5)
+ aasm (5.0.6)
concurrent-ruby (~> 1.0)
ace-rails-ap (4.2)
actioncable (5.1.7)
@@ -60,7 +60,7 @@ GEM
activemodel (= 5.1.7)
activesupport (= 5.1.7)
arel (~> 8.0)
- activerecord-import (1.0.2)
+ activerecord-import (1.0.3)
activerecord (>= 3.2)
activerecord-session_store (1.1.3)
actionpack (>= 4.0)
@@ -73,39 +73,48 @@ GEM
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
- addressable (2.6.0)
- public_suffix (>= 2.0.2, < 4.0)
+ addressable (2.7.0)
+ public_suffix (>= 2.0.2, < 5.0)
arel (8.0.0)
ast (2.4.0)
- autoprefixer-rails (9.6.0)
+ autoprefixer-rails (9.7.3)
execjs
babel-source (5.8.35)
babel-transpiler (0.7.0)
babel-source (>= 4.0, < 6)
execjs (~> 2.0)
backports (3.15.0)
- bindex (0.7.0)
+ bindex (0.8.1)
bootstrap-sass (3.4.1)
autoprefixer-rails (>= 5.2.1)
sassc (>= 2.0.0)
- bootstrap_form (4.2.0)
+ bootstrap_form (4.3.0)
actionpack (>= 5.0)
activemodel (>= 5.0)
- builder (3.2.3)
+ builder (3.2.4)
byebug (11.0.1)
+ capybara (3.29.0)
+ addressable
+ mini_mime (>= 0.1.3)
+ nokogiri (~> 1.8)
+ rack (>= 1.6.0)
+ rack-test (>= 0.6.3)
+ regexp_parser (~> 1.5)
+ xpath (~> 3.2)
+ childprocess (3.0.0)
coderay (1.1.2)
concurrent-ruby (1.1.5)
connection_pool (2.2.2)
- crass (1.0.4)
+ crass (1.0.5)
daemons (1.3.1)
database_cleaner (1.7.0)
- delayed_job (4.1.7)
- activesupport (>= 3.0, < 5.3)
- delayed_job_active_record (4.1.3)
- activerecord (>= 3.0, < 5.3)
+ delayed_job (4.1.8)
+ activesupport (>= 3.0, < 6.1)
+ delayed_job_active_record (4.1.4)
+ activerecord (>= 3.0, < 6.1)
delayed_job (>= 3.0, < 5)
diff-lcs (1.3)
- domain_name (0.5.20180417)
+ domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dropzonejs-rails (0.8.4)
rails (> 3.1)
@@ -113,23 +122,23 @@ GEM
rdf (~> 3.0)
sxp (~> 1.0)
ejs (1.1.1)
- erubi (1.8.0)
+ erubi (1.9.0)
ethon (0.12.0)
ffi (>= 1.3.0)
- exception_notification (4.3.0)
- actionmailer (>= 4.0, < 6)
- activesupport (>= 4.0, < 6)
+ exception_notification (4.4.0)
+ actionmailer (>= 4.0, < 7)
+ activesupport (>= 4.0, < 7)
execjs (2.7.0)
- factory_bot (5.0.2)
+ factory_bot (5.1.1)
activesupport (>= 4.2.0)
- factory_bot_rails (5.0.2)
- factory_bot (~> 5.0.2)
+ factory_bot_rails (5.1.1)
+ factory_bot (~> 5.1.0)
railties (>= 4.2.0)
- faraday (0.15.4)
+ faraday (0.17.1)
multipart-post (>= 1.2, < 3)
faraday_middleware (0.13.1)
faraday (>= 0.7.4, < 1.0)
- ffi (1.11.1)
+ ffi (1.11.3)
gh (0.14.0)
addressable
backports
@@ -145,11 +154,12 @@ GEM
hamster (3.0.0)
concurrent-ruby (~> 1.0)
highline (1.7.10)
+ http-accept (1.7.0)
http-cookie (1.0.3)
domain_name (~> 0.5)
- i18n (1.6.0)
+ i18n (1.7.0)
concurrent-ruby (~> 1.0)
- jaro_winkler (1.5.3)
+ jaro_winkler (1.5.4)
jbuilder (2.9.1)
activesupport (>= 4.2.0)
jquery-rails (4.3.5)
@@ -158,24 +168,24 @@ GEM
thor (>= 0.14, < 2.0)
js_cookie_rails (2.2.0)
railties (>= 3.1)
- json (2.2.0)
+ json (2.3.0)
json-schema (2.8.1)
addressable (>= 2.4)
- json_api_client (1.12.0)
+ json_api_client (1.16.1)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
addressable (~> 2.2)
faraday (~> 0.15, >= 0.15.2)
faraday_middleware (~> 0.9)
rack (>= 0.2)
- jsonapi-resources (0.9.10)
+ jsonapi-resources (0.10.2)
activerecord (>= 4.1)
concurrent-ruby
railties (>= 4.1)
launchy (2.4.3)
addressable (~> 2.3)
link_header (0.0.8)
- loofah (2.2.3)
+ loofah (2.4.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
macaddr (1.7.2)
@@ -184,31 +194,33 @@ GEM
mini_mime (>= 0.1.1)
method_source (0.9.2)
micro_token (0.0.4)
- mime-types (3.2.2)
+ mime-types (3.3)
mime-types-data (~> 3.2015)
- mime-types-data (3.2019.0331)
+ mime-types-data (3.2019.1009)
mini_mime (1.0.2)
mini_portile2 (2.4.0)
- minitest (5.11.3)
- multi_json (1.13.1)
+ minitest (5.13.0)
+ mock_redis (0.22.0)
+ multi_json (1.14.1)
multipart-post (2.1.1)
- mysql2 (0.5.2)
- net-http-persistent (3.0.1)
+ mysql2 (0.5.3)
+ net-http-persistent (3.1.0)
connection_pool (~> 2.2)
net-http-pipeline (1.0.1)
netrc (0.11.0)
- nio4r (2.4.0)
- nokogiri (1.10.3)
+ nio4r (2.5.2)
+ nokogiri (1.10.7)
mini_portile2 (~> 2.4.0)
os (0.9.6)
- parallel (1.17.0)
- parser (2.6.3.0)
+ parallel (1.19.1)
+ parser (2.6.5.0)
ast (~> 2.4.0)
pry (0.12.2)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
- public_suffix (3.1.0)
- puma (3.12.1)
+ public_suffix (4.0.1)
+ puma (4.3.3)
+ nio4r (~> 2.0)
pusher-client (0.6.2)
json
websocket (~> 1.0)
@@ -240,8 +252,8 @@ GEM
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
- rails-html-sanitizer (1.0.4)
- loofah (~> 2.2, >= 2.2.2)
+ rails-html-sanitizer (1.3.0)
+ loofah (~> 2.3)
railties (5.1.7)
actionpack (= 5.1.7)
activesupport (= 5.1.7)
@@ -249,12 +261,12 @@ GEM
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rainbow (3.0.0)
- rake (12.3.3)
+ rake (13.0.1)
rb-fsevent (0.10.3)
rb-inotify (0.10.0)
ffi (~> 1.0)
rb-readline (0.5.5)
- rdf (3.0.12)
+ rdf (3.0.13)
hamster (~> 3.0)
link_header (~> 0.0, >= 0.0.8)
rdf-aggregate-repo (2.2.1)
@@ -265,50 +277,53 @@ GEM
sxp (~> 1.0)
rdf-xsd (3.0.1)
rdf (~> 3.0)
- rdoc (6.1.1)
- react-rails (2.5.0)
+ rdoc (6.2.0)
+ react-rails (2.6.0)
babel-transpiler (>= 0.7.0)
connection_pool
execjs
railties (>= 3.2)
tilt
- redis (4.1.2)
- rest-client (2.0.2)
+ redis (4.1.3)
+ regexp_parser (1.6.0)
+ rest-client (2.1.0)
+ http-accept (>= 1.7.0, < 2.0)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
- rspec-core (3.8.1)
- rspec-support (~> 3.8.0)
- rspec-expectations (3.8.4)
+ rspec-core (3.9.0)
+ rspec-support (~> 3.9.0)
+ rspec-expectations (3.9.0)
diff-lcs (>= 1.2.0, < 2.0)
- rspec-support (~> 3.8.0)
- rspec-mocks (3.8.1)
+ rspec-support (~> 3.9.0)
+ rspec-mocks (3.9.0)
diff-lcs (>= 1.2.0, < 2.0)
- rspec-support (~> 3.8.0)
- rspec-rails (3.8.2)
+ rspec-support (~> 3.9.0)
+ rspec-rails (3.9.0)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
- rspec-core (~> 3.8.0)
- rspec-expectations (~> 3.8.0)
- rspec-mocks (~> 3.8.0)
- rspec-support (~> 3.8.0)
- rspec-support (3.8.2)
- rubocop (0.71.0)
+ rspec-core (~> 3.9.0)
+ rspec-expectations (~> 3.9.0)
+ rspec-mocks (~> 3.9.0)
+ rspec-support (~> 3.9.0)
+ rspec-support (3.9.0)
+ rubocop (0.77.0)
jaro_winkler (~> 1.5.1)
parallel (~> 1.10)
parser (>= 2.6)
rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 1.7)
- rubocop-performance (1.4.0)
+ rubocop-performance (1.5.1)
rubocop (>= 0.71.0)
- rubocop-rails (2.0.1)
+ rubocop-rails (2.4.0)
rack (>= 1.1)
- rubocop (>= 0.70.0)
+ rubocop (>= 0.72.0)
ruby-growl (4.1)
uuid (~> 2.3, >= 2.3.5)
ruby-progressbar (1.10.1)
+ rubyzip (2.0.0)
sane (0.25.8)
os (~> 0)
sass (3.7.4)
@@ -316,18 +331,22 @@ GEM
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
- sass-rails (5.0.7)
- railties (>= 4.0.0, < 6)
- sass (~> 3.1)
- sprockets (>= 2.8, < 4.0)
- sprockets-rails (>= 2.0, < 4.0)
- tilt (>= 1.1, < 3)
- sassc (2.0.1)
+ sass-rails (6.0.0)
+ sassc-rails (~> 2.1, >= 2.1.1)
+ sassc (2.2.1)
ffi (~> 1.9)
- rake
+ sassc-rails (2.1.2)
+ railties (>= 4.0.0)
+ sassc (>= 2.0)
+ sprockets (> 3.0)
+ sprockets-rails
+ tilt
sdoc (1.0.0)
rdoc (>= 5.0)
- shoulda-matchers (4.1.0)
+ selenium-webdriver (3.142.6)
+ childprocess (>= 0.5, < 4.0)
+ rubyzip (>= 1.2.2)
+ shoulda-matchers (4.1.2)
activesupport (>= 4.2.0)
sparql (3.0.2)
builder (~> 3.2)
@@ -351,9 +370,9 @@ GEM
sxp (1.0.2)
rdf (~> 3.0)
systemu (2.6.5)
- thor (0.20.3)
+ thor (1.0.0)
thread_safe (0.3.6)
- tilt (2.0.9)
+ tilt (2.0.10)
travis (1.8.10)
backports
faraday (~> 0.9)
@@ -365,14 +384,14 @@ GEM
typhoeus (~> 0.6, >= 0.6.8)
travis-lint (2.0.0)
json
- turbolinks (5.2.0)
+ turbolinks (5.2.1)
turbolinks-source (~> 5.2)
turbolinks-source (5.2.0)
typhoeus (0.8.0)
ethon (>= 0.8.0)
tzinfo (1.2.5)
thread_safe (~> 0.1)
- tzinfo-data (1.2019.1)
+ tzinfo-data (1.2019.3)
tzinfo (>= 1.0.0)
unf (0.1.4)
unf_ext
@@ -385,7 +404,11 @@ GEM
activemodel (>= 5.0)
bindex (>= 0.4.0)
railties (>= 5.0)
- webpacker (4.0.7)
+ webdrivers (4.1.3)
+ nokogiri (~> 1.6)
+ rubyzip (>= 1.3.0)
+ selenium-webdriver (>= 3.0, < 4.0)
+ webpacker (4.2.2)
activesupport (>= 4.2)
rack-proxy (>= 0.6.1)
railties (>= 4.2)
@@ -395,9 +418,11 @@ GEM
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.4)
- will_paginate (3.1.7)
+ will_paginate (3.2.1)
will_paginate-bootstrap (1.0.2)
will_paginate (>= 3.0.3)
+ xpath (3.2.0)
+ nokogiri (~> 1.8)
yajl-ruby (1.4.1)
PLATFORMS
@@ -411,6 +436,7 @@ DEPENDENCIES
bootstrap-sass
bootstrap_form
byebug
+ capybara
daemons
database_cleaner
delayed_job
@@ -431,6 +457,7 @@ DEPENDENCIES
jsonapi-resources
launchy
micro_token
+ mock_redis
mysql2
pmb-client!
pry
@@ -450,8 +477,10 @@ DEPENDENCIES
rubocop-rails
ruby-growl
sanger_barcode_format!
+ sass
sass-rails
sdoc
+ selenium-webdriver
sequencescape-client-api!
shoulda-matchers
spring
@@ -461,6 +490,7 @@ DEPENDENCIES
turbolinks
tzinfo-data
web-console
+ webdrivers
webpacker
webpacker-react
will_paginate
diff --git a/app/channels/activity_channel.rb b/app/channels/activity_channel.rb
index 09b1f1a4..f3fa2f53 100644
--- a/app/channels/activity_channel.rb
+++ b/app/channels/activity_channel.rb
@@ -1,111 +1,34 @@
class ActivityChannel < ApplicationCable::Channel
+ include ChannelConcerns::MessagesProcessing
+ include ChannelConcerns::StreamsManagement
- def self.connection_for_redis
- ActionCable.server.pubsub.redis_connection_for_subscriptions
- end
-
- def connection_for_redis
- self.class.connection_for_redis
- end
-
- def self.redis
- self.connection_for_redis
- end
-
- def redis
- connection_for_redis
- end
-
- def self.subscribed_ids
- value = connection_for_redis.get('SUBSCRIBED_IDS')
- return [] unless value
- JSON.parse(value)
- end
-
- def receive(data)
- process_asset_group(strong_params_for_asset_group(data)) if (data["asset_group"])
- process_activity(strong_params_for_activity(data)) if (data["activity"])
- end
-
- def process_asset_group(strong_params)
- asset_group = AssetGroup.find(strong_params[:id])
- assets = strong_params[:assets]
- if asset_group && assets
- begin
- received_list = []
-
- received_list = assets.map do |uuid_or_barcode|
- Asset.find_or_import_asset_with_barcode(uuid_or_barcode)
- end.compact
-
- asset_group.update_with_assets(received_list)
-
- #asset_group.update_attributes(assets: received_list)
- #asset_group.touch
- rescue Errno::ECONNREFUSED => e
- asset_group.activity.send_wss_event({error: {type: 'danger', msg: 'Cannot connect with sequencescape'} })
- rescue StandardError => e
- asset_group.activity.send_wss_event({error: {type: 'danger', msg: e.message} })
- end
- end
- end
-
- def process_activity(strong_params)
- activity = Activity.find(params[:activity_id])
-
- obj = ActivityChannel.activity_attributes(params[:activity_id])
-
- ['stepTypes', 'stepsPending', 'stepsRunning', 'stepsFailed', 'stepsFinished'].reduce(obj) do |memo, key|
- memo[key] = !!strong_params[key] unless strong_params[key].nil?
- memo
- end
-
- redis.hset('activities', params[:activity_id], obj.to_json)
-
- activity.touch
+ def stream_id
+ "activity_#{params[:activity_id]}"
end
- def self.default_activity_attributes
- { stepTypes: true, stepsPending: true, stepsRunning:true, stepsFailed: true, stepsFinished: false }.as_json
- end
+ def subscribed
+ add_stream_to_list(stream_id)
- def self.activity_attributes(id)
- begin
- JSON.parse(redis.hget('activities', id)) || default_activity_attributes
- rescue StandardError => e
- default_activity_attributes
- end
+ create_message_processors!
+ stream_from stream_id
end
- def strong_params_for_asset_group(params)
- params = ActionController::Parameters.new(params)
- params.require(:asset_group).permit(:id, :assets => [])
- end
+ def unsubscribed
+ remove_stream_from_list(stream_id)
- def strong_params_for_activity(params)
- params = ActionController::Parameters.new(params)
- params.require(:activity).permit(:id, :stepTypes, :stepsPending, :stepsRunning, :stepsFailed, :stepsFinished)
+ stop_all_streams
end
- def subscribed_ids
- self.class.subscribed_ids
+ def receive(message_from_frontend)
+ process_message(message_from_frontend)
end
- def stream_id
- "activity_#{params[:activity_id]}"
+ def redis
+ self.class.redis
end
- def subscribed
- previous_value = subscribed_ids || []
- connection_for_redis.set('SUBSCRIBED_IDS', previous_value.push(stream_id)) unless previous_value.include?(stream_id)
-
- stream_from stream_id
+ def self.redis
+ ActionCable.server.pubsub.redis_connection_for_subscriptions
end
- def unsubscribed
- previous_value = subscribed_ids
- connection_for_redis.set('SUBSCRIBED_IDS', previous_value.reject{|v| v== stream_id })
-
- stop_all_streams
- end
end
diff --git a/app/channels/channel_concerns/messages_processing.rb b/app/channels/channel_concerns/messages_processing.rb
new file mode 100644
index 00000000..49d38108
--- /dev/null
+++ b/app/channels/channel_concerns/messages_processing.rb
@@ -0,0 +1,42 @@
+module ChannelConcerns
+ module MessagesProcessing
+ def self.included(klass)
+ klass.instance_eval do
+ include InstanceMethods
+ extend ClassMethods
+ end
+ end
+
+ module InstanceMethods
+
+ def message_processors
+ @message_processors
+ end
+
+ def process_message(message_from_frontend)
+ message_processors.each do |processor|
+ if processor.interested_in?(message_from_frontend)
+ processor.process(message_from_frontend)
+ end
+ end
+ end
+
+ def create_message_processors!
+ @message_processors ||= self.class.registered_message_processor_classes.map do |p|
+ p.new(channel: self)
+ end
+ end
+ end
+
+ module ClassMethods
+ def register_message_processor(message_processor_class)
+ @registered_message_processor_classes ||= []
+ @registered_message_processor_classes.push(message_processor_class)
+ end
+
+ def registered_message_processor_classes
+ @registered_message_processor_classes
+ end
+ end
+ end
+end
diff --git a/app/channels/channel_concerns/streams_management.rb b/app/channels/channel_concerns/streams_management.rb
new file mode 100644
index 00000000..0899a8a2
--- /dev/null
+++ b/app/channels/channel_concerns/streams_management.rb
@@ -0,0 +1,37 @@
+module ChannelConcerns
+ module StreamsManagement
+
+ def self.included(klass)
+ klass.instance_eval do
+ include InstanceMethods
+ extend ClassMethods
+ end
+ end
+
+ module InstanceMethods
+ def add_stream_to_list(stream_id)
+ previous_value = subscribed_ids || []
+ redis.set('SUBSCRIBED_IDS', previous_value.push(stream_id)) unless previous_value.include?(stream_id)
+ end
+
+ def remove_stream_from_list(stream_id)
+ previous_value = subscribed_ids
+ redis.set('SUBSCRIBED_IDS', previous_value.reject{|v| v== stream_id })
+ end
+
+ def subscribed_ids
+ self.class.subscribed_ids
+ end
+ end
+
+ module ClassMethods
+ def subscribed_ids
+ value = redis.get('SUBSCRIBED_IDS')
+ return [] unless value
+ JSON.parse(value)
+ end
+ end
+
+
+ end
+end
diff --git a/app/models/activities/websocket_events.rb b/app/models/activities/websocket_events.rb
index f02da628..39c7cf96 100644
--- a/app/models/activities/websocket_events.rb
+++ b/app/models/activities/websocket_events.rb
@@ -23,11 +23,15 @@ def stream_id
def websockets_attributes(attrs)
attrs.keys.reduce({shownComponents: {}}) do |memo, key|
- memo[key] = attrs[key].call unless (ActivityChannel.activity_attributes(id)[key.to_s] == false)
+ memo[key] = attrs[key].call unless (activity_channel_attributes(id)[key.to_s] == false)
memo
end
end
+ def activity_channel_attributes(id)
+ MessageProcessors::ActivityMessageProcessor.activity_attributes(id)
+ end
+
def initial_websockets_attributes(attrs)
attrs.keys.reduce({}) do |memo, key|
memo[key] = attrs[key].call
diff --git a/app/models/asset.rb b/app/models/asset.rb
index c3f53e79..0c1d9d35 100644
--- a/app/models/asset.rb
+++ b/app/models/asset.rb
@@ -37,6 +37,8 @@ def update_compatible_activity_type
has_many :activities, -> { distinct }, :through => :steps
+ scope :from_remote_service, ->() { where.not(remote_digest: nil) }
+
scope :currently_changing, ->() {
joins(:asset_groups, :steps).where(:steps => {:state => 'running'})
}
@@ -213,7 +215,7 @@ def info_line
def class_name
purposes_facts = facts.with_predicate('purpose')
- if purposes_facts.count > 0
+ if purposes_facts.length > 0
return purposes_facts.first.object
end
return ''
@@ -221,7 +223,7 @@ def class_name
def aliquot
purposes_facts = facts.with_predicate('aliquotType')
- if purposes_facts.count > 0
+ if purposes_facts.length > 0
return purposes_facts.first.object
end
return ''
diff --git a/app/models/asset_group.rb b/app/models/asset_group.rb
index 5d7693b3..9fb45aaa 100644
--- a/app/models/asset_group.rb
+++ b/app/models/asset_group.rb
@@ -18,10 +18,6 @@ class AssetGroup < ActiveRecord::Base
after_touch :touch_activity
- def refresh!
- assets.each(&:refresh!)
- end
-
def update_with_assets(assets_to_update)
removed_assets = self.assets - assets_to_update
added_assets = assets_to_update - self.assets
@@ -31,7 +27,7 @@ def update_with_assets(assets_to_update)
updates.add_assets([[self, added_assets]]) if added_assets
updates.remove_assets([[self, removed_assets]]) if removed_assets
- refresh!
+ updates.merge(Importers::BarcodesImporter.new(added_assets.map(&:uuid)).process)
ActiveRecord::Base.transaction do
step = Step.create(activity: activity_owner, asset_group: self,
diff --git a/app/models/assets/export.rb b/app/models/assets/export.rb
index a69df557..c50e3764 100644
--- a/app/models/assets/export.rb
+++ b/app/models/assets/export.rb
@@ -21,7 +21,8 @@ def _update_sequencescape(print_config, user, step)
end
old_barcode = barcode
- update_attributes(:uuid => instance.uuid, :barcode => code39_barcode(instance))
+ update_attributes(:uuid => instance.uuid, :barcode => code39_barcode(instance),
+ remote_digest: 'initial_digest')
update_plate(instance, updates)
diff --git a/app/models/assets/import.rb b/app/models/assets/import.rb
index a87017b9..12d2e402 100644
--- a/app/models/assets/import.rb
+++ b/app/models/assets/import.rb
@@ -9,51 +9,12 @@ class RefreshSourceNotFoundAnymore < StandardError ; end
module InstanceMethods
- def json_for_remote(remote_asset)
- distinct = remote_asset.attributes.to_json
-
- # It would be useful to have a hashcode in the sequencescape client api to know
- # if this message is different from a previous one without needing to traverse
- # all the object finding the change
- # Having a :to_json method that returns a json would be pretty sensible too
-
- # FOR A PLATE
- if remote_asset.respond_to?(:wells) && remote_asset.wells
- # wells.to_a because wells relation does not act as an array
- listw = remote_asset.wells.to_a
- if listw
- # aliquots.to_a, same reason
- listal = listw.compact.map(&:aliquots).map(&:to_a)
- if listal
- listsa = listal.flatten.compact.map{|al| al.sample }
- if listsa
- distinct+=listsa.compact.map(&:attributes).to_json
- end
- end
- end
- end
-
- # FOR A TUBE
- if remote_asset.respond_to?(:aliquots) && remote_asset.aliquots
- # aliquots.to_a, same reason
- listal = remote_asset.aliquots.to_a
- if listal
- listsa = listal.flatten.compact.map{|al| al.sample }
- if listsa
- distinct+=listsa.compact.map(&:attributes).to_json
- end
- end
- end
-
- distinct
+ def refresh
+ Importers::BarcodesImporter.new([self.uuid]).process! if is_remote_asset?
end
- def update_digest_with_remote(remote_asset)
- update_attributes(remote_digest: Digest::MD5::hexdigest(json_for_remote(remote_asset)))
- end
-
- def changed_remote?(remote_asset)
- Digest::MD5::hexdigest(json_for_remote(remote_asset)) != remote_digest
+ def refresh!
+ Importers::BarcodesImporter.new([self.uuid]).process!
end
def assets_to_refresh
@@ -63,316 +24,45 @@ def assets_to_refresh
end].flatten
end
- def get_import_step
- @import_step
- end
-
- def _process_refresh(remote_asset, fact_changes=nil)
- fact_changes ||= FactChanges.new
- asset_group = AssetGroup.new
- @import_step.update_attributes(asset_group: asset_group)
-
- begin
- fact_changes.tap do |updates|
- asset_group.update_attributes(assets: assets_to_refresh)
-
- # Removes previous state
- assets_to_refresh.each do |asset|
- updates.remove(asset.facts.from_remote_asset)
- end
-
- # Loads new state
- self.class.update_asset_from_remote_asset(self, remote_asset, updates)
- end.apply(@import_step)
- @import_step.update_attributes(state: 'complete')
- asset_group.touch
- ensure
- @import_step.update_attributes(state: 'error') unless @import_step.state == 'complete'
- #@import_step.asset_group.touch if @import_step.asset_group
- end
- end
-
- def is_refreshing_right_now?
- Step.running_with_asset(self).count > 0
- end
-
- def type_of_asset_for_sequencescape
- if ((facts.with_predicate('a').first) && ["Tube", "SampleTube"].include?(facts.with_predicate('a').first.object))
- :tube
- else
- :plate
- end
- end
-
- def refresh(fact_changes=nil)
- if is_remote_asset?
- remote_asset = SequencescapeClient::find_by_uuid(uuid)
- raise RefreshSourceNotFoundAnymore unless remote_asset
- if changed_remote?(remote_asset)
- unless is_refreshing_right_now?
- @import_step = Step.create(step_type: StepType.find_or_create_by(name: 'Refresh'), state: 'running')
- _process_refresh(remote_asset, fact_changes)
- end
- end
- end
- self
- end
-
- def refresh!(fact_changes=nil)
- if is_remote_asset?
- @import_step = Step.create(step_type: StepType.find_or_create_by(name: 'Refresh!!'), state: 'running')
- remote_asset = SequencescapeClient::find_by_uuid(uuid)
- raise RefreshSourceNotFoundAnymore unless remote_asset
- _process_refresh(remote_asset, fact_changes)
- end
- self
+ def is_remote_asset?
+ !remote_digest.nil?
end
- def is_remote_asset?
- facts.from_remote_asset.count > 0
+ def changed_remote?
+ Importers::BarcodesImporter.new([self.uuid]).changed_remote?(self)
end
- def update_facts_from_remote(list, step=nil)
- step = step || @import_step
- list = [list].flatten
- added = list.map do |f|
- f.assign_attributes(:is_remote? => true)
- f
- end
- facts << added
- add_operations([added].flatten, step)
+ def digest_for_remote(remote)
+ Importers::BarcodesImporter.new([self.uuid]).digest_for_remote_asset(remote)
end
end
module ClassMethods
- def import_barcode(barcode)
- asset = nil
-
- @import_step = Step.create(step_type: StepType.find_or_create_by(name: 'Import'), state: 'running')
- remote_asset = SequencescapeClient::get_remote_asset(barcode)
-
- if remote_asset
- asset = Asset.create(barcode: barcode, uuid: remote_asset.uuid)
- FactChanges.new.tap do |updates|
- updates.replace_remote(asset, 'a', sequencescape_type_for_asset(remote_asset))
- updates.replace_remote(asset, 'remoteAsset', remote_asset.uuid)
- end.apply(@import_step)
- asset.refresh
- asset.update_compatible_activity_type
- end
- asset
+ def find_or_import_assets_with_barcodes(barcodes)
+ importer = Importers::BarcodesImporter.new(barcodes)
+ importer.process!
+ importer.assets_for_barcodes
end
- def create_local_asset(barcode, updates)
- asset=nil
- ActiveRecord::Base.transaction do
- asset = Asset.create!(:barcode => barcode)
- updates.add(asset, 'a', 'Tube')
- updates.add(asset, 'barcodeType', 'Code2D')
- updates.add(asset, 'is', 'Empty')
+ def changes_for_refresh_or_import_assets_with_barcodes(barcodes)
+ FactChanges.new.tap do |updates|
+ updates.merge(changes_for_refresh_from_barcodes(barcodes))
+ updates.merge(changes_for_import_new_barcodes(barcodes))
end
- asset
end
- def is_digit_barcode?(barcode)
- barcode.to_s.match(/^\d+$/)
- end
-
- def find_asset_with_barcode(barcode)
- asset = Asset.find_by_barcode(barcode)
- asset = Asset.find_by_uuid(barcode) unless asset
- updates = FactChanges.new
- if asset.nil? && TokenUtil.is_valid_fluidx_barcode?(barcode)
- asset = import_barcode(barcode)
- asset = Asset.create_local_asset(barcode, updates) unless asset
- end
- if asset
- asset.refresh(updates)
- end
- asset
+ def create_refresh_step
+ Step.create(step_type: StepType.find_or_create_by(name: 'Refresh'), state: 'running')
end
def find_or_import_asset_with_barcode(barcode)
- find_asset_with_barcode(barcode) || import_barcode(barcode)
- end
-
-
- def update_asset_from_remote_asset(asset, remote_asset, fact_changes)
- fact_changes.tap do |updates|
- class_name = sequencescape_type_for_asset(remote_asset)
- updates.replace_remote(asset, 'a', class_name)
-
- if keep_sync_with_sequencescape?(remote_asset)
- updates.replace_remote(asset, 'pushTo', 'Sequencescape')
- if remote_asset.try(:plate_purpose)
- updates.replace_remote(asset, 'purpose', remote_asset.plate_purpose.name)
- end
- end
- updates.replace_remote(asset, 'is', 'NotStarted')
-
- annotate_container(asset, remote_asset, updates)
- annotate_wells(asset, remote_asset, updates)
- annotate_study_name(asset, remote_asset, updates)
-
- asset.update_digest_with_remote(remote_asset)
- end
- end
-
-
- def _update_asset_from_remote_asset(asset, remote_asset, fact_changes)
- fact_changes.tap do |updates|
- class_name = sequencescape_type_for_asset(remote_asset)
- updates.replace_remote(asset, 'a', class_name)
-
- if keep_sync_with_sequencescape?(remote_asset)
- updates.replace_remote(asset, 'pushTo', 'Sequencescape')
- if remote_asset.try(:plate_purpose, nil)
- updates.replace_remote(asset, 'purpose', remote_asset.plate_purpose.name)
- end
- end
- updates.replace_remote(asset, 'is', 'NotStarted')
-
- annotate_container(asset, remote_asset, updates)
- annotate_wells(asset, remote_asset, updates)
- annotate_study_name(asset, remote_asset, updates)
-
- asset.update_digest_with_remote(remote_asset)
- end
- end
-
- def annotate_container(asset, remote_asset, fact_changes)
- fact_changes.tap do |updates|
- if remote_asset.try(:aliquots)
- remote_asset.aliquots.each do |aliquot|
- updates.replace_remote(asset, 'sample_tube', asset)
- updates.replace_remote(asset, 'sanger_sample_id', TokenUtil.quote_if_uuid(aliquot&.sample&.sanger_sample_id))
- updates.replace_remote(asset, 'sample_uuid', TokenUtil.quote(aliquot&.sample&.uuid), literal: true)
- updates.replace_remote(asset, 'sanger_sample_name', TokenUtil.quote_if_uuid(aliquot&.sample&.name))
- updates.replace_remote(asset, 'supplier_sample_name', TokenUtil.quote_if_uuid(aliquot&.sample&.sample_metadata&.supplier_name))
- updates.replace_remote(asset, 'sample_common_name', TokenUtil.quote_if_uuid(aliquot&.sample&.sample_metadata&.sample_common_name))
- end
- end
- end
- end
-
- def _annotate_container(asset, remote_asset, fact_changes)
- fact_changes.tap do |updates|
- if remote_asset.try(:aliquots, nil)
- remote_asset.aliquots.each do |aliquot|
- updates.replace_remote(asset, 'sample_tube', asset)
- updates.replace_remote(asset, 'sanger_sample_id', aliquot&.sample&.sanger&.sample_id)
- updates.replace_remote(asset, 'sample_uuid', TokenUtil.quote(aliquot&.sample&.sanger&.sample_uuid), literal: true)
- updates.replace_remote(asset, 'sanger_sample_name', aliquot&.sample&.sanger&.name)
-
- updates.replace_remote(asset, 'supplier_sample_name', aliquot&.sample&.supplier&.sample_name)
- end
- end
- end
- end
-
- def sample_id_to_study_name(sample_id)
- sample_id.gsub(/\d*$/,'').gsub('-', '')
- end
-
- def get_study_uuid(study_name)
- @study_uuids ||= {}
- @study_uuids[study_name] ||= SequencescapeClient::get_study_by_name(study_name)&.uuid
- end
-
- def annotate_study_name_from_aliquots(asset, remote_asset, fact_changes)
- fact_changes.tap do |updates|
- if remote_asset.try(:aliquots)
- if ((remote_asset.aliquots.count == 1) && (remote_asset.aliquots.first.sample))
- updates.replace_remote(asset, 'study_name', remote_asset.aliquots.first.study.name)
- updates.replace_remote(asset, 'study_uuid', TokenUtil.quote(remote_asset.aliquots.first.study.uuid), literal: true)
- end
- end
- end
- end
-
- def _annotate_study_name_from_aliquots(asset, remote_asset, fact_changes)
- fact_changes.tap do |updates|
- if remote_asset.try(:aliquots, nil)
- if ((remote_asset.aliquots.count == 1) && (remote_asset.aliquots.first.sample))
- study_name = sample_id_to_study_name(remote_asset.aliquots.first.sample.sanger.sample_id)
- #study_uuid = get_study_uuid(study_name)
- updates.replace_remote(asset, 'study_name', study_name)
- end
- end
- end
- end
-
-
- def annotate_study_name(asset, remote_asset, fact_changes)
- if remote_asset.try(:wells)
- remote_asset.wells.detect do |w|
- annotate_study_name_from_aliquots(asset, w, fact_changes)
- end
- else
- annotate_study_name_from_aliquots(asset, remote_asset, fact_changes)
- end
- end
-
- def annotate_wells(asset, remote_asset, fact_changes)
- fact_changes.tap do |updates|
- if remote_asset.try(:wells)
- remote_asset.wells.each do |well|
- local_well = Asset.find_or_create_by!(:uuid => well.uuid)
-
- updates.replace_remote(asset, 'contains', local_well)
-
- # Updated wells will also mean that the plate is out of date, so we'll set it in the asset
- updates.replace_remote(local_well, 'a', 'Well')
- updates.replace_remote(local_well, 'location', well.position['name'])
- updates.replace_remote(local_well, 'parent', asset)
-
- if (well.try(:aliquots)&.first&.sample&.sample_metadata&.supplier_name)
- annotate_container(local_well, well, fact_changes)
- end
- end
- end
- end
- end
-
- def _annotate_wells(asset, remote_asset, fact_changes)
- fact_changes.tap do |updates|
- if remote_asset.try(:wells, nil)
- remote_asset.wells.each do |well|
- local_well = Asset.find_or_create_by!(:uuid => well.uuid)
- if (well.try(:aliquots, nil)&.first&.sample&.supplier&.sample_name)
- updates.replace_remote(asset, 'contains', local_well)
-
- # Updated wells will also mean that the plate is out of date, so we'll set it in the asset
- updates.replace_remote(local_well, 'a', 'Well')
- updates.replace_remote(local_well, 'location', well.location)
- updates.replace_remote(local_well, 'parent', asset)
-
- annotate_container(local_well, well, fact_changes)
- end
- end
- end
- end
- end
-
-
- def sequencescape_type_for_asset(remote_asset)
- return nil unless remote_asset.type
- type = remote_asset.type.singularize.classify
- return 'SampleTube' if type == 'Tube'
- return type
- end
-
- def _sequencescape_type_for_asset(remote_asset)
- type = remote_asset.class.to_s.gsub(/Sequencescape::/,'')
- return 'SampleTube' if type == 'Tube'
- return type
+ find_or_import_assets_with_barcodes([barcode]).first
end
- def keep_sync_with_sequencescape?(remote_asset)
- class_name = sequencescape_type_for_asset(remote_asset)
- (class_name != 'SampleTube')
+ def _find_assets_with_barcodes(barcodes)
+ Asset.where(barcode: barcodes).or(Asset.where(uuid: barcodes))
end
end
diff --git a/app/models/uploaded_file.rb b/app/models/uploaded_file.rb
index eadadd19..384e98bd 100644
--- a/app/models/uploaded_file.rb
+++ b/app/models/uploaded_file.rb
@@ -5,7 +5,7 @@ class UploadedFile < ApplicationRecord
belongs_to :asset
def step
- @step ||= Step.new(step_type: StepType.find_or_create_by(name: 'Refresh'), state: 'running')
+ @step ||= Step.new(step_type: StepType.find_or_create_by(name: 'Refresh'))
end
def file_type(content_type)
diff --git a/compile-build b/compile-build
old mode 100644
new mode 100755
diff --git a/config/cable.yml b/config/cable.yml
index c3f656d0..39c749f3 100644
--- a/config/cable.yml
+++ b/config/cable.yml
@@ -2,3 +2,6 @@ development:
adapter: redis
url: <%= Rails.configuration.redis_url %>
channel_prefix: samples_extraction_development
+
+test:
+ adapter: async
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 0a87ca31..a8105150 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -41,6 +41,8 @@
# Raises helpful error messages.
config.assets.raise_runtime_errors = true
+ config.delayed_job_max_minutes_run_time = ENV.fetch('SE_JOBS_MAX_MINUTES','20')
+
# Raises error for missing translations
# config.action_view.raise_on_missing_translations = true
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 30b6f535..170c8166 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -48,6 +48,8 @@
config.time_zone = 'London'
config.eager_load = true
+ config.delayed_job_max_minutes_run_time = ENV.fetch('SE_JOBS_MAX_MINUTES','20')
+
# Raises error for missing translations
# config.action_view.raise_on_missing_translations = true
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 3c396126..5bf58bca 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -42,6 +42,7 @@
config.middleware.use RackSessionAccess::Middleware
+ config.delayed_job_max_minutes_run_time = ENV.fetch('SE_JOBS_MAX_MINUTES','20')
# Raises error for missing translations
# config.action_view.raise_on_missing_translations = true
diff --git a/config/initializers/delayed_job_config.rb b/config/initializers/delayed_job_config.rb
index d6ad9697..e4b6f585 100644
--- a/config/initializers/delayed_job_config.rb
+++ b/config/initializers/delayed_job_config.rb
@@ -1,7 +1,7 @@
Delayed::Worker.destroy_failed_jobs = false
Delayed::Worker.sleep_delay = 0
Delayed::Worker.max_attempts = Float::INFINITY
-Delayed::Worker.max_run_time = 5.minutes
+Delayed::Worker.max_run_time = 20.minutes
Delayed::Worker.read_ahead = 10
Delayed::Worker.default_queue_name = 'default'
Delayed::Worker.delay_jobs = !Rails.env.test?
diff --git a/config/initializers/jsonapi.rb b/config/initializers/jsonapi.rb
index 85e6a8f5..e3a59253 100644
--- a/config/initializers/jsonapi.rb
+++ b/config/initializers/jsonapi.rb
@@ -3,9 +3,6 @@
config.json_key_format = :underscored_key
config.resource_key_type = :uuid
- # optional request features
- config.allow_include = true
-
config.default_page_size = 25
config.maximum_page_size = 1000
end
diff --git a/config/initializers/websockets_message_processors.rb b/config/initializers/websockets_message_processors.rb
new file mode 100644
index 00000000..0a29773f
--- /dev/null
+++ b/config/initializers/websockets_message_processors.rb
@@ -0,0 +1,4 @@
+require 'message_processors/asset_group_message_processor'
+require 'message_processors/activity_message_processor'
+ActivityChannel.register_message_processor(MessageProcessors::AssetGroupMessageProcessor)
+ActivityChannel.register_message_processor(MessageProcessors::ActivityMessageProcessor)
diff --git a/db/schema.rb b/db/schema.rb
index ce70f7ad..5256aa0e 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -12,7 +12,7 @@
ActiveRecord::Schema.define(version: 20191127154249) do
- create_table "actions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "actions", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "action_type", null: false
t.integer "step_type_id"
t.integer "subject_condition_group_id"
@@ -26,7 +26,7 @@
t.index ["subject_condition_group_id"], name: "index_actions_on_subject_condition_group_id"
end
- create_table "activities", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "activities", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "activity_type_id"
t.integer "instrument_id"
t.integer "asset_group_id"
@@ -43,7 +43,7 @@
t.index ["kit_id"], name: "index_activities_on_kit_id"
end
- create_table "activity_type_compatibilities", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "activity_type_compatibilities", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "asset_id"
t.integer "activity_type_id"
t.datetime "created_at", null: false
@@ -52,7 +52,7 @@
t.index ["asset_id"], name: "index_activity_type_compatibilities_on_asset_id"
end
- create_table "activity_type_step_types", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "activity_type_step_types", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "activity_type_id"
t.integer "step_type_id"
t.datetime "created_at", null: false
@@ -61,7 +61,7 @@
t.index ["step_type_id"], name: "index_activity_type_step_types_on_step_type_id"
end
- create_table "activity_types", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "activity_types", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "name"
t.integer "superceded_by_id"
t.datetime "created_at", null: false
@@ -69,7 +69,7 @@
t.index ["superceded_by_id"], name: "index_activity_types_on_superceded_by_id"
end
- create_table "activity_types_instruments", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "activity_types_instruments", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "instrument_id"
t.integer "activity_type_id"
t.datetime "created_at", null: false
@@ -78,7 +78,7 @@
t.index ["instrument_id"], name: "index_activity_types_instruments_on_instrument_id"
end
- create_table "asset_groups", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "asset_groups", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "activity_owner_id"
@@ -87,7 +87,7 @@
t.string "uuid"
end
- create_table "asset_groups_assets", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "asset_groups_assets", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "asset_id"
t.integer "asset_group_id"
t.datetime "created_at", null: false
@@ -96,7 +96,7 @@
t.index ["asset_id"], name: "index_asset_groups_assets_on_asset_id"
end
- create_table "assets", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "assets", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "uuid"
t.string "barcode"
t.datetime "created_at", null: false
@@ -106,7 +106,7 @@
t.index ["barcode"], name: "index_assets_on_barcode"
end
- create_table "condition_groups", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "condition_groups", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "name"
t.boolean "keep_selected", default: true
t.integer "step_type_id"
@@ -114,7 +114,7 @@
t.index ["step_type_id"], name: "index_condition_groups_on_step_type_id"
end
- create_table "conditions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "conditions", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "condition_group_id"
t.string "predicate", null: false
t.string "object"
@@ -125,7 +125,7 @@
t.index ["object_condition_group_id"], name: "index_conditions_on_object_condition_group_id"
end
- create_table "delayed_jobs", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "delayed_jobs", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "priority", default: 0, null: false
t.integer "attempts", default: 0, null: false
t.text "handler", limit: 4294967295, null: false
@@ -140,7 +140,7 @@
t.index ["priority", "run_at"], name: "delayed_jobs_priority"
end
- create_table "facts", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "facts", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "asset_id"
t.string "predicate", null: false
t.string "object"
@@ -158,14 +158,14 @@
t.index ["object_asset_id"], name: "index_facts_on_object_asset_id"
end
- create_table "instruments", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "instruments", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "barcode"
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
- create_table "kit_types", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "kit_types", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "name"
t.integer "activity_type_id"
t.datetime "created_at", null: false
@@ -174,7 +174,7 @@
t.index ["activity_type_id"], name: "index_kit_types_on_activity_type_id"
end
- create_table "kits", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "kits", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "barcode", null: false
t.integer "max_num_reactions"
t.integer "num_reactions_performed"
@@ -184,7 +184,7 @@
t.index ["kit_type_id"], name: "index_kits_on_kit_type_id"
end
- create_table "label_templates", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "label_templates", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "name", null: false
t.string "template_type"
t.integer "external_id", null: false
@@ -192,7 +192,7 @@
t.datetime "updated_at", null: false
end
- create_table "operations", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "operations", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "action_id"
t.integer "step_id"
t.integer "asset_id"
@@ -208,7 +208,7 @@
t.index ["step_id"], name: "index_operations_on_step_id"
end
- create_table "printers", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "printers", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "name", null: false
t.string "printer_type"
t.boolean "default_printer", default: false, null: false
@@ -216,7 +216,7 @@
t.datetime "updated_at", null: false
end
- create_table "sessions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "sessions", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "session_id", null: false
t.text "data"
t.datetime "created_at"
@@ -225,7 +225,7 @@
t.index ["updated_at"], name: "index_sessions_on_updated_at"
end
- create_table "step_messages", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
+ create_table "step_messages", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.integer "step_id", null: false
t.text "content", limit: 4294967295
t.datetime "created_at", null: false
@@ -233,7 +233,7 @@
t.index ["step_id"], name: "index_step_messages_on_step_id"
end
- create_table "step_types", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "step_types", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "name"
t.string "step_template"
t.binary "n3_definition"
@@ -247,7 +247,7 @@
t.index ["superceded_by_id"], name: "index_step_types_on_superceded_by_id"
end
- create_table "steps", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "steps", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "step_type_id"
t.integer "user_id"
t.date "completion_date"
@@ -274,7 +274,7 @@
t.index ["user_id"], name: "index_steps_on_user_id"
end
- create_table "uploaded_files", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
+ create_table "uploaded_files", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.integer "asset_id"
t.binary "data", limit: 16777215
t.string "filename"
@@ -284,7 +284,7 @@
t.index ["asset_id"], name: "index_uploaded_files_on_asset_id"
end
- create_table "uploads", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "uploads", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "step_id"
t.integer "activity_id"
t.binary "data", limit: 16777215
@@ -296,7 +296,7 @@
t.index ["step_id"], name: "index_uploads_on_step_id"
end
- create_table "users", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "users", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.string "login"
t.string "password"
t.string "barcode"
@@ -312,7 +312,7 @@
t.index ["tube_printer_id"], name: "index_users_on_tube_printer_id"
end
- create_table "work_orders", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
+ create_table "work_orders", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "work_order_id"
t.integer "activity_id"
t.datetime "created_at", null: false
diff --git a/lib/actions/layout/invalid_data_params.rb b/lib/actions/layout/invalid_data_params.rb
new file mode 100644
index 00000000..8b014813
--- /dev/null
+++ b/lib/actions/layout/invalid_data_params.rb
@@ -0,0 +1,21 @@
+module Actions
+ module Layout
+ class InvalidDataParams < StandardError
+ attr_accessor :errors
+
+ def initialize(message = nil)
+ super(message)
+ @errors = message
+ #@msg = html_error_message([message].flatten)
+ end
+
+ def html_error_message(error_messages)
+ ['
', error_messages.map do |msg|
+ ['- ',msg,'
']
+ end, '
'].flatten.join('')
+ end
+
+ end
+
+ end
+end
diff --git a/lib/actions/layout/racking.rb b/lib/actions/layout/racking.rb
new file mode 100644
index 00000000..08e0ef46
--- /dev/null
+++ b/lib/actions/layout/racking.rb
@@ -0,0 +1,53 @@
+require 'parsers/csv_layout/csv_parser'
+require 'parsers/csv_layout/barcode_creatable_parser'
+require 'parsers/csv_layout/validators/any_barcode_validator'
+require 'fact_changes'
+
+module Actions
+ module Layout
+ module Racking
+ def reracking_tubes(rack, list_layout)
+ FactChanges.new.tap do |updates|
+ tubes = list_layout.map{|o| o[:asset]}.compact
+ return updates unless tubes.length > 0
+ updates.merge(changes_for_tubes_on_unrack(tubes))
+ updates.merge(changes_for_racks_on_unrack(tubes))
+ updates.merge(changes_for_rack_tubes(list_layout, rack))
+ end
+ end
+
+ def changes_for_rack_when_racking_tubes(rack, racked_tubes)
+ FactChanges.new.tap do |updates|
+ Actions::LayoutProcessor::TUBE_TO_RACK_TRANSFERRABLE_PROPERTIES.map do |prop|
+ racked_tubes.map{|tube| tube.facts.with_predicate(prop)}
+ end.flatten.compact.each do |fact|
+ updates.add(rack, fact.predicate.to_s, fact.object_value)
+ end
+ end
+ end
+
+ def changes_for_put_tube_into_rack_position(tube, rack, location)
+ FactChanges.new.tap do |updates|
+ updates.add(tube, 'location', location)
+ updates.add(tube, 'parent', rack)
+ updates.add(rack, 'contains', tube)
+ end
+ end
+
+ def changes_for_rack_tubes(list_layout, rack)
+ FactChanges.new.tap do |updates|
+ tubes = []
+ list_layout.each do |l|
+ location = l[:location]
+ tube = l[:asset]
+ next unless tube
+ tubes.push(tube)
+ updates.merge(changes_for_put_tube_into_rack_position(tube, rack, location))
+ end
+ updates.merge(changes_for_rack_when_racking_tubes(rack, tubes))
+ end
+ end
+ end
+ end
+end
+
diff --git a/lib/actions/layout/unracking.rb b/lib/actions/layout/unracking.rb
new file mode 100644
index 00000000..0257318d
--- /dev/null
+++ b/lib/actions/layout/unracking.rb
@@ -0,0 +1,68 @@
+module Actions
+ module Layout
+ module Unracking
+
+ def racks_for_tubes(tubes)
+ rack_ids = Fact.where(predicate: 'contains', object_asset_id: tubes.map(&:id)).pluck(:asset_id)
+ Asset.where(id: rack_ids)
+ end
+
+
+ def changes_for_tubes_on_unrack(tubes)
+ FactChanges.new.tap do |updates|
+ return unless tubes.length > 0
+ contains_facts = Fact.where(predicate: 'contains', object_asset_id: tubes.map(&:id))
+ parents_facts = Fact.where(asset_id: tubes.map(&:id), predicate: 'parent')
+ locations_facts = Fact.where(asset_id: tubes.map(&:id), predicate: 'location')
+ updates.remove(contains_facts)
+ updates.remove(parents_facts)
+ updates.remove(locations_facts)
+ updates.merge(_metadata_changes_for_tubes_on_unrack(tubes, parents_facts, locations_facts))
+ end
+ end
+
+ def changes_for_racks_on_unrack(tubes)
+ FactChanges.new.tap do |updates|
+ racks_for_tubes(tubes).each do |rack|
+ updates.merge(changes_for_rack_on_unrack(rack, tubes))
+ end
+ end
+ end
+
+ def _metadata_changes_for_tubes_on_unrack(tubes, parents_facts, locations_facts)
+ FactChanges.new.tap do |updates|
+ tubes.each do |tube|
+ parent_fact = parents_facts.detect{|f| f.asset_id == tube.id}
+ location_fact = locations_facts.detect{|f| f.asset_id == tube.id}
+ next unless parent_fact || location_fact
+ rerack = Asset.new
+ updates.create_assets([rerack])
+ updates.add(rerack, 'a', 'Rerack')
+ updates.add(rerack, 'barcodeType', 'NoBarcode')
+ updates.add(rerack, 'previousParent', parent_fact.object_asset)
+ updates.add(rerack, 'previousLocation', location_fact.object)
+ updates.add(tube, 'rerack', rerack)
+ end
+ end
+ end
+
+ # For a plate modified (any plate that is losing a tube), it will resync the values of inherited
+ # properties from the plates with the current list of tubes it contains
+ def changes_for_rack_on_unrack(rack, tubes)
+ FactChanges.new.tap do |updates|
+ tubes_from_previous_rack = rack.facts.with_predicate('contains').map(&:object_asset)
+ actual_tubes = (tubes_from_previous_rack - tubes)
+
+ Actions::LayoutProcessor::TUBE_TO_RACK_TRANSFERRABLE_PROPERTIES.each do |transferrable_property|
+ tubes.map{|tube| tube.facts.with_predicate(transferrable_property).map(&:object)}.flatten.compact.each do |value|
+ updates.remove_where(rack, transferrable_property.to_s, value)
+ end
+ actual_tubes.map{|tube| tube.facts.with_predicate(transferrable_property).map(&:object).flatten.compact}.each do |value|
+ updates.add(rack, transferrable_property.to_s, value)
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/actions/layout_processor.rb b/lib/actions/layout_processor.rb
new file mode 100644
index 00000000..0b04a87a
--- /dev/null
+++ b/lib/actions/layout_processor.rb
@@ -0,0 +1,152 @@
+require 'parsers/csv_layout/csv_parser'
+require 'parsers/csv_layout/barcode_creatable_parser'
+require 'parsers/csv_layout/validators/any_barcode_validator'
+require 'fact_changes'
+require 'actions/layout/invalid_data_params'
+require 'actions/layout/racking'
+require 'actions/layout/unracking'
+
+module Actions
+ class LayoutProcessor
+ TUBE_TO_RACK_TRANSFERRABLE_PROPERTIES = [:study_name,:aliquotType]
+
+ include Actions::Layout::Racking
+ include Actions::Layout::Unracking
+
+ attr_reader :parser, :content, :asset_group
+
+ # Actions
+ def initialize(params)
+ if params[:asset_group]
+ @asset_group = params[:asset_group]
+ @content = selected_file(asset_group).data
+ @parser = Parsers::CsvLayout::CsvParser.new(content, params)
+ end
+ end
+
+ def reracking_tubes(rack, list_layout)
+ FactChanges.new.tap do |updates|
+ tubes = list_layout.map{|o| o[:asset]}.compact
+ return updates unless tubes.length > 0
+ updates.merge(changes_for_tubes_on_unrack(tubes))
+ updates.merge(changes_for_racks_on_unrack(tubes))
+ updates.merge(changes_for_rack_tubes(list_layout, rack))
+ end
+ end
+
+ def changes
+ csv_parsing(asset_group, parser)
+ end
+
+ def csv_parsing(asset_group, parser)
+ error_messages = []
+ error_locations = []
+
+ if asset_group.assets.with_fact('a', 'TubeRack').empty?
+ error_messages.push("No TubeRacks found to perform the layout process")
+ end
+ if asset_group.assets.with_fact('a', 'TubeRack').count > 1
+ error_messages.push("Too many TubeRacks found to perform the layout process")
+ end
+ raise Actions::Layout::InvalidDataParams.new(error_messages) if error_messages.count > 0
+
+ asset = asset_group.assets.with_fact('a', 'TubeRack').first
+
+ if parser.valid?
+ rack = asset
+ list_layout = parser.layout
+ check_collisions(rack, list_layout, error_messages, error_locations)
+
+ check_racking_barcodes(list_layout, error_messages, error_locations)
+ check_tuberacks(asset_group, list_layout, error_messages, error_locations)
+ end
+
+ unless error_messages.empty?
+ raise Actions::Layout::InvalidDataParams.new(error_messages)
+ end
+ if parser.valid?
+ updates = parser.parsed_changes.merge(reracking_tubes(asset, parser.layout))
+
+ error_messages.push(asset.validate_rack_content)
+ raise Actions::Layout::InvalidDataParams.new(error_messages) if error_messages.flatten.compact.count > 0
+ return updates
+ else
+ raise Actions::Layout::InvalidDataParams.new(parser.error_list)
+ end
+ end
+
+ def get_duplicates(list)
+ list.reduce({}) do |memo, element|
+ memo[element] = 0 unless memo[element]
+ memo[element]+=1
+ memo
+ end.each_pair.select{|key, count| count > 1}
+ end
+
+ def check_duplicates(params, error_messages, error_locations)
+ duplicated_locations = get_duplicates(params.map{|location, barcode| location})
+ duplicated_assets = get_duplicates(params.map{|location, barcode| barcode})
+
+ duplicated_locations.each do |location, count|
+ error_locations.push(location)
+ error_messages.push("Location #{location} is appearing #{count} times")
+ end
+
+ duplicated_assets.each do |barcode, count|
+ #error_locations.push(barcode)
+ error_messages.push("Asset #{barcode} is appearing #{count} times")
+ end
+ end
+
+ def check_racking_barcodes(list_layout, error_messages, error_locations)
+ list_layout.each do |obj|
+ location = obj[:location]
+ asset = obj[:asset]
+ barcode = obj[:barcode]
+ if (asset.nil? && !barcode.nil? && !barcode.starts_with?('F'))
+ error_locations.push(location)
+ error_messages.push("Barcode #{barcode} scanned at #{location} is not in the database")
+ end
+ end
+ end
+
+ def check_tuberacks(asset_group, list_layout, error_messages, error_locations)
+ if asset_group.assets.with_fact('a', 'TubeRack').empty?
+ error_messages.push("No TubeRacks found to perform the racking process")
+ end
+ end
+
+ def check_collisions(rack, list_layout, error_messages, error_locations)
+ tubes_for_rack = rack.facts.with_predicate('contains').map(&:object_asset)
+ tubes_for_rack.each do |tube|
+ tube_location = tube.facts.with_predicate('location').first.object
+ list_layout.each do |obj|
+ next unless obj[:asset]
+ if (tube_location == obj[:location])
+ if (obj[:asset] != tube)
+ error_messages.push(
+ "Tube #{obj[:asset].barcode} cannot be put at location #{obj[:location]} because the tube #{tube.barcode || tube.uuid} is there"
+ )
+ end
+ end
+ end
+ unless (list_layout.map{|obj| obj[:asset]}.include?(tube))
+ # Remember that the tubes needs to be always in a rack. They cannot be interchanged
+ # in between racks
+ error_messages.push(
+ "Missing tube!! Any tube already existing in the rack can't disappear from its defined layout without being reracked before. Tube #{tube.barcode || tube.uuid} should be present in the rack at location #{tube_location} but is missed from the rack."
+ )
+ end
+ end
+
+ end
+
+ def selected_file(asset_group)
+ asset_group.uploaded_files.first
+ end
+
+ def clean_rack(rack)
+ remove_facts(facts.with_predicate('contains'))
+ end
+ end
+end
diff --git a/lib/actions/plate_transfer.rb b/lib/actions/plate_transfer.rb
index e76eb45e..f8bb2a5a 100644
--- a/lib/actions/plate_transfer.rb
+++ b/lib/actions/plate_transfer.rb
@@ -98,6 +98,11 @@ def self.transfer_with_asset_creation(plate, destination, updates=nil)
# destimation: Asset or String representing a uuid or a wildcard
def self.transfer_plates(plate, destination, updates=nil)
updates ||= FactChanges.new
+ if (plate.has_predicate?('study_name'))
+ plate.facts.with_predicate('study_name').each do |fact|
+ updates.add(destination, 'study_name', fact.object)
+ end
+ end
updates.tap do |updates|
if destination.kind_of?(Asset) && (destination.has_wells?)
transfer_by_location(plate, destination, updates)
diff --git a/lib/actions/racking.rb b/lib/actions/racking.rb
deleted file mode 100644
index 7fcba2e9..00000000
--- a/lib/actions/racking.rb
+++ /dev/null
@@ -1,332 +0,0 @@
-require 'parsers/csv_layout/csv_parser'
-require 'parsers/csv_layout/barcode_creatable_parser'
-require 'parsers/csv_layout/validators/any_barcode_validator'
-
-require 'fact_changes'
-
-class InvalidDataParams < StandardError
- attr_accessor :errors
-
- def initialize(message = nil)
- super(message)
- @errors = message
- #@msg = html_error_message([message].flatten)
- end
-
- def html_error_message(error_messages)
- ['', error_messages.map do |msg|
- ['- ',msg,'
']
- end, '
'].flatten.join('')
- end
-
-end
-
-module Actions
- module Racking
-
- DNA_STOCK_PLATE_PURPOSE = 'DNA Stock Plate'
- RNA_STOCK_PLATE_PURPOSE = 'RNA Stock Plate'
- STOCK_PLATE_PURPOSE = 'Stock Plate'
- DNA_ALIQUOT = 'DNA'
- RNA_ALIQUOT = 'RNA'
- TUBE_TO_PLATE_TRANSFERRABLE_PROPERTIES = [:study_name,:aliquotType]
-
- # Actions
- def rack_layout(asset_group)
- content = selected_file(asset_group).data
- csv_parsing(asset_group, Parsers::CsvLayout::CsvParser.new(content))
- end
-
- def rack_layout_creating_tubes(asset_group)
- content = selected_file(asset_group).data
- parser = Parsers::CsvLayout::CsvParser.new(content, {
- barcode_parser: Parsers::CsvLayout::BarcodeCreatableParser
- })
- csv_parsing(asset_group, parser)
- end
-
- def rack_layout_any_barcode(asset_group)
- content = selected_file(asset_group).data
- parser = Parsers::CsvLayout::CsvParser.new(content, {
- barcode_validator: Parsers::CsvLayout::Validators::AnyBarcodeValidator
- })
- csv_parsing(asset_group, parser)
- end
-
- # Support methods and classes
-
-
- def clean_rack(rack)
- remove_facts(facts.with_predicate('contains'))
- end
-
- def reracking_tubes(rack, list_layout)
- fact_changes_unrack = fact_changes_for_unrack_tubes(list_layout, rack)
- fact_changes_rack = fact_changes_for_rack_tubes(list_layout, rack)
- fact_changes_unrack.merge(fact_changes_rack)
- end
-
- def fact_changes_for_unrack_tubes(list_layout, destination_rack=nil)
- FactChanges.new.tap do |updates|
- rerackGroup=nil
-
- previous_racks = []
- tubes = list_layout.map{|obj| obj[:asset]}.compact
- return updates if tubes.empty?
- tubes_ids = tubes.map(&:id)
- tubes_list = Asset.where(id: tubes_ids).includes(:facts)
- tubes_list.each_with_index do |tube, index|
- location_facts = tube.facts.with_predicate('location')
- unless location_facts.empty?
- location = location_facts.first.object
- updates.remove(tube.facts.with_predicate('location'))
- end
- tube.facts.with_predicate('parent').each do |parent_fact|
- previous_rack = parent_fact.object_asset
- unless (previous_racks.include?(previous_rack))
- previous_racks.push(previous_rack)
- updates.remove(previous_rack.facts.with_predicate('contains').where(object_asset_id: tubes_ids))
- end
-
- if destination_rack
- unless rerackGroup
- rerackGroup = Asset.new
- updates.create_assets([rerackGroup])
- updates.add(rerackGroup, 'barcodeType', 'NoBarcode')
- updates.add(destination_rack, 'rerackGroup', rerackGroup)
- end
-
- rerack = Asset.new
- updates.create_assets([rerack])
- updates.add(rerack, 'a', 'Rerack')
- updates.add(rerack, 'tube', tube)
- updates.add(rerack, 'barcodeType', 'NoBarcode')
- updates.add(rerack, 'previousParent', previous_rack)
- updates.add(rerack, 'previousLocation', location)
- updates.add(rerack, 'location', list_layout[index][:location])
- updates.add(rerackGroup, 'rerack', rerack)
-
- previous_racks.push(previous_rack)
- end
-
- updates.remove(parent_fact)
- end
- end
-
- # sync rack property
- previous_racks.each do |previous_rack|
- updates.merge(fact_changes_for_rack_when_unracking_tubes(previous_rack, tubes))
- end
- end
- end
-
- def purpose_for_aliquot(aliquot)
- if aliquot == DNA_ALIQUOT
- DNA_STOCK_PLATE_PURPOSE
- elsif aliquot == RNA_ALIQUOT
- RNA_STOCK_PLATE_PURPOSE
- else
- STOCK_PLATE_PURPOSE
- end
- end
-
- def fact_changes_for_add_purpose(rack, aliquot)
- FactChanges.new.tap do |updates|
- updates.add(rack, 'purpose', purpose_for_aliquot(aliquot))
- end
- end
-
- def fact_changes_for_remove_purpose(rack, aliquot)
- FactChanges.new.tap do |updates|
- updates.remove_where(rack, 'purpose', purpose_for_aliquot(aliquot))
- end
- end
-
- # For a plate modified (any plate that is losing a tube), it will resync the values of inherited
- # properties from the plates with the current list of tubes it contains
- def fact_changes_for_rack_when_unracking_tubes(rack, unracked_tubes)
- FactChanges.new.tap do |updates|
- tubes_from_previous_rack = rack.facts.with_predicate('contains').map(&:object_asset)
- actual_tubes = (tubes_from_previous_rack - unracked_tubes)
-
- TUBE_TO_PLATE_TRANSFERRABLE_PROPERTIES.each do |transferrable_property|
- unracked_tubes.map{|tube| tube.facts.with_predicate(transferrable_property).map(&:object)}.flatten.compact.each do |value|
- updates.remove_where(rack, transferrable_property.to_s, value)
- updates.merge(fact_changes_for_remove_purpose(rack, value)) if transferrable_property.to_s == 'aliquotType'
- end
- actual_tubes.map{|tube| tube.facts.with_predicate(transferrable_property).map(&:object).flatten.compact}.each do |value|
- updates.add(rack, transferrable_property.to_s, value)
- updates.merge(fact_changes_for_add_purpose(rack, value)) if transferrable_property.to_s == 'aliquotType'
- end
- end
- end
- end
-
- def fact_changes_for_rack_when_racking_tubes(rack, racked_tubes)
- FactChanges.new.tap do |updates|
- TUBE_TO_PLATE_TRANSFERRABLE_PROPERTIES.map do |prop|
- racked_tubes.map{|tube| tube.facts.with_predicate(prop)}
- end.flatten.compact.each do |fact|
- updates.add(rack, fact.predicate.to_s, fact.object_value)
- updates.merge(fact_changes_for_add_purpose(rack, fact.object_value)) if fact.predicate.to_s == 'aliquotType'
- end
- end
- end
-
- def put_tube_into_rack_position(tube, rack, location)
- FactChanges.new.tap do |updates|
- updates.remove(tube.facts.with_predicate('location'))
- updates.add(tube, 'location', location)
- updates.add(tube, 'parent', rack)
- updates.add(rack, 'contains', tube)
- end
- end
-
- def remove_tube_from_rack(tube, rack)
- FactChanges.new.tap do |updates|
- updates.remove(tube.facts.with_predicate('location'))
- updates.remove_where(rack, 'contains', tube)
- end
- end
-
- def fact_changes_for_rack_tubes(list_layout, rack)
- FactChanges.new.tap do |updates|
- tubes = []
- list_layout.each do |l|
- location = l[:location]
- tube = l[:asset]
- next unless tube
- tubes.push(tube)
- updates.merge(put_tube_into_rack_position(tube, rack, location))
- end
- updates.merge(fact_changes_for_rack_when_racking_tubes(rack, tubes))
- end
- end
-
- def params_to_list_layout(params)
- params.map do |location, barcode|
- asset = Asset.find_or_import_asset_with_barcode(barcode)
- {
- :location => location,
- :asset => asset,
- :barcode => barcode
- }
- end
- end
-
- def get_duplicates(list)
- list.reduce({}) do |memo, element|
- memo[element] = 0 unless memo[element]
- memo[element]+=1
- memo
- end.each_pair.select{|key, count| count > 1}
- end
-
- def check_duplicates(params, error_messages, error_locations)
- duplicated_locations = get_duplicates(params.map{|location, barcode| location})
- duplicated_assets = get_duplicates(params.map{|location, barcode| barcode})
-
- duplicated_locations.each do |location, count|
- error_locations.push(location)
- error_messages.push("Location #{location} is appearing #{count} times")
- end
-
- duplicated_assets.each do |barcode, count|
- #error_locations.push(barcode)
- error_messages.push("Asset #{barcode} is appearing #{count} times")
- end
- end
-
- def check_racking_barcodes(list_layout, error_messages, error_locations)
- list_layout.each do |obj|
- location = obj[:location]
- asset = obj[:asset]
- barcode = obj[:barcode]
- if (asset.nil? && !barcode.nil? && !barcode.starts_with?('F'))
- error_locations.push(location)
- error_messages.push("Barcode #{barcode} scanned at #{location} is not in the database")
- end
- end
- end
-
- def check_tuberacks(asset_group, list_layout, error_messages, error_locations)
- if asset_group.assets.with_fact('a', 'TubeRack').empty?
- error_messages.push("No TubeRacks found to perform the racking process")
- end
- end
-
- def check_collisions(rack, list_layout, error_messages, error_locations)
- tubes_for_rack = rack.facts.with_predicate('contains').map(&:object_asset)
- tubes_for_rack.each do |tube|
- tube_location = tube.facts.with_predicate('location').first.object
- list_layout.each do |obj|
- next unless obj[:asset]
- if (tube_location == obj[:location])
- if (obj[:asset] != tube)
- error_messages.push(
- "Tube #{obj[:asset].barcode} cannot be put at location #{obj[:location]} because the tube #{tube.barcode || tube.uuid} is there"
- )
- end
- end
- end
- unless (list_layout.map{|obj| obj[:asset]}.include?(tube))
- # Remember that the tubes needs to be always in a rack. They cannot be interchanged
- # in between racks
- error_messages.push(
- "Missing tube!! Any tube already existing in the rack can't disappear from its defined layout without being reracked before. Tube #{tube.barcode || tube.uuid} should be present in the rack at location #{tube_location} but is missed from the rack."
- )
- end
- end
-
- end
-
- def selected_file(asset_group)
- asset_group.uploaded_files.first
- end
-
- def csv_parsing(asset_group, parser)
- error_messages = []
- error_locations = []
-
- if asset_group.assets.with_fact('a', 'TubeRack').empty?
- error_messages.push("No TubeRacks found to perform the layout process")
- end
- if asset_group.assets.with_fact('a', 'TubeRack').count > 1
- error_messages.push("Too many TubeRacks found to perform the layout process")
- end
- raise InvalidDataParams.new(error_messages) if error_messages.count > 0
-
- asset = asset_group.assets.with_fact('a', 'TubeRack').first
-
- if parser.valid?
- rack = asset
- list_layout = parser.layout
- check_collisions(rack, list_layout, error_messages, error_locations)
-
- check_racking_barcodes(list_layout, error_messages, error_locations)
- check_tuberacks(asset_group, list_layout, error_messages, error_locations)
- end
-
- unless error_messages.empty?
- raise InvalidDataParams.new(error_messages)
- end
- if parser.valid?
- updates = parser.parsed_changes.merge(reracking_tubes(asset, parser.layout))
-
- error_messages.push(asset.validate_rack_content)
- raise InvalidDataParams.new(error_messages) if error_messages.flatten.compact.count > 0
- return updates
- else
- raise InvalidDataParams.new(parser.error_list)
- end
- end
-
-
- def samples_symphony(step_type, params)
- rack = asset_group.assets.with_fact('a', 'TubeRack').first
- msgs = Parsers::Symphony.parse(params[:file].read, rack)
- raise InvalidDataParams.new(msgs) if msgs.length > 0
- end
-
- end
-end
diff --git a/lib/changes_support/callbacks.rb b/lib/changes_support/callbacks.rb
new file mode 100644
index 00000000..0f8c987a
--- /dev/null
+++ b/lib/changes_support/callbacks.rb
@@ -0,0 +1,67 @@
+module ChangesSupport
+ module Callbacks
+
+ def self.included(klass)
+ klass.instance_eval do
+ extend ClassMethods
+ include InstanceMethods
+ end
+ end
+
+ module ClassMethods
+
+ #
+ # on_change_predicate:
+ # Attach a callback to run when the predicate has changed, either it has been added, or
+ # it is removed.
+ #
+ # change_type:
+ # either :addFacts or :removeFacts, depending on the type of change
+ # predicate:
+ # predicate value in a fact that we want to watch
+ # proc:
+ # callback to run when the change has been applied
+ def on_change_predicate(change_type, predicate, proc)
+ @changes_callbacks ||= {}
+ @changes_callbacks[change_type] ||= {}
+ @changes_callbacks[change_type][predicate] ||= []
+ @changes_callbacks[change_type][predicate].push(proc)
+ end
+
+ #
+ # Resets the callbacks so they won't be run anymore
+ def clear_all_callbacks!
+ @changes_callbacks = {}
+ end
+
+ def _changes_callbacks
+ @changes_callbacks
+ end
+ end
+
+ module InstanceMethods
+ def _changes_callbacks
+ self.class._changes_callbacks
+ end
+ def _on_apply
+ return unless _changes_callbacks
+ _changes_callbacks.keys.each do |change_type|
+ predicates = _changes_callbacks[change_type].keys
+ facts_with_callback = []
+ if change_type == 'add_facts'
+ facts_with_callback = facts_to_add.select{|f| predicates.include?(f[:predicate])}
+ elsif change_type == 'remove_facts'
+ facts_with_callback = facts_to_destroy.select{|f| predicates.include?(f[:predicate])}
+ end
+ facts_with_callback.each do |fact|
+ callbacks = _changes_callbacks[change_type][fact[:predicate]]
+ callbacks.each do |proc|
+ proc.call(fact, self)
+ end
+ end
+ end
+ end
+
+ end
+ end
+end
diff --git a/lib/fact_changes.rb b/lib/fact_changes.rb
index 83e878e8..65a7fc24 100644
--- a/lib/fact_changes.rb
+++ b/lib/fact_changes.rb
@@ -1,10 +1,14 @@
require 'token_util'
require 'changes_support/disjoint_list'
require 'changes_support/transaction_scope'
+require 'changes_support/callbacks'
require 'google_hash'
+require 'fact_changes_initializers'
class FactChanges
include ChangesSupport::TransactionScope
+ include ChangesSupport::Callbacks
+ include FactChangesInitializers
attr_accessor :facts_to_destroy, :facts_to_add, :assets_to_create, :assets_to_destroy,
:assets_to_add, :assets_to_remove, :wildcards, :instances_from_uuid,
@@ -128,7 +132,7 @@ def _build_fact_attributes(s, p, o, options={})
def add(s,p,o, options={})
s = find_asset(s)
- o = (options[:literal]==true) ? o : find_asset(o)
+ o = (options[:literal]==true) ? literal_token(o) : find_asset(o)
fact = _build_fact_attributes(s, p, o, options)
@@ -136,6 +140,10 @@ def add(s,p,o, options={})
#facts_to_add.push(track_object(params)) unless detected
end
+ def literal_token(str)
+ TokenUtil.quote_if_uuid(str)
+ end
+
def add_facts(listOfLists)
listOfLists.each{|list| add(list[0], list[1], list[2])}
self
@@ -150,11 +158,20 @@ def add_remote(s,p,o, options={})
add(s,p,o, options.merge({is_remote?: true})) if (s && p && o)
end
+ def replace_remote_relation(asset, predicate, object_asset, options={})
+ replace_remote(asset,predicate,object_asset, options.merge({literal: false}))
+ end
+
+ def replace_remote_property(asset, predicate, value, options={})
+ replace_remote(asset,predicate,value, options.merge({literal: true}))
+ end
+
def replace_remote(asset, p, o, options={})
if (asset && p && o)
asset.facts.with_predicate(p).each do |fact|
+ # The value is updated from the remote instance so we remove the previous value
remove(fact)
- # In case they are not removed, at least they will be set as remote
+ # In any case they will be set as Remote, even if they are not removed in this update
facts_to_set_to_remote << fact
end
add_remote(asset, p, o, options)
@@ -208,6 +225,7 @@ def merge(fact_changes)
def apply(step, with_operations=true)
_handle_errors(step) if errors_added.length > 0
ActiveRecord::Base.transaction do |t|
+ _on_apply if respond_to?(:_on_apply)
_set_remote_facts(facts_to_set_to_remote)
operations = [
_create_asset_groups(step, asset_groups_to_create, with_operations),
@@ -223,6 +241,7 @@ def apply(step, with_operations=true)
Operation.import(operations)
@operations = operations
end
+ step.save if step.changed?
reset
end
end
@@ -350,6 +369,14 @@ def delete_assets(assets)
self
end
+ def add_assets_to_group(group, assets)
+ add_assets([[group, assets]])
+ end
+
+ def remove_assets_from_group(group, assets)
+ remove_assets([[group, assets]])
+ end
+
def add_assets(list)
list.each do |elem|
if ((elem.length > 0) && elem[1].kind_of?(Array))
@@ -361,8 +388,6 @@ def add_assets(list)
end
assets = validate_instances(find_assets(asset_ids))
assets_to_add << assets.map{|asset| { asset_group: asset_group, asset: asset} }
- #add_to_list_keep_unique(assets.map{|asset| { asset_group: asset_group, asset: asset} }, :assets_to_add, :assets_to_remove)
- #assets_to_add.concat(assets.map{|asset| { asset_group: asset_group, asset: asset} })
end
self
end
diff --git a/lib/fact_changes_initializers.rb b/lib/fact_changes_initializers.rb
new file mode 100644
index 00000000..25d2fda6
--- /dev/null
+++ b/lib/fact_changes_initializers.rb
@@ -0,0 +1,67 @@
+#
+# Initialization of actions to perform when some properties are added or removed.
+#
+# TODO:
+# This is not in an initializer because these configuration changes need to be available to
+# every actual and future runner, but runners do not load Rails initializers by default,
+# In order to have this config as an initializer we would need to modify Rails loading.
+module FactChangesInitializers
+ def self.included(klass)
+ klass.instance_eval do
+ FactChangesInitializers.setup_changes_callbacks!
+ end
+ end
+
+ def self.setup_changes_callbacks!
+ Callbacks.initialize_barcode_callbacks
+ Callbacks.initialize_aliquot_type_callbacks
+ Callbacks.initialize_digest_update_callbacks
+ end
+
+ module Callbacks
+ DNA_STOCK_PLATE_PURPOSE = 'DNA Stock Plate'
+ RNA_STOCK_PLATE_PURPOSE = 'RNA Stock Plate'
+ STOCK_PLATE_PURPOSE = 'Stock Plate'
+ DNA_ALIQUOT = 'DNA'
+ RNA_ALIQUOT = 'RNA'
+
+ def self.purpose_for_aliquot(aliquot)
+ if aliquot == DNA_ALIQUOT
+ DNA_STOCK_PLATE_PURPOSE
+ elsif aliquot == RNA_ALIQUOT
+ RNA_STOCK_PLATE_PURPOSE
+ else
+ STOCK_PLATE_PURPOSE
+ end
+ end
+
+ def self.initialize_barcode_callbacks
+ FactChanges.on_change_predicate('add_facts', 'barcode', Proc.new do |t|
+ t[:asset].update_attributes(barcode: t[:object])
+ end)
+
+ FactChanges.on_change_predicate('remove_facts', 'barcode', Proc.new do |t|
+ t[:asset].update_attributes(barcode: nil)
+ end)
+ end
+
+ def self.initialize_digest_update_callbacks
+ FactChanges.on_change_predicate('add_facts', 'remote_digest', Proc.new do |t, updates|
+ t[:asset].update_attributes(remote_digest: t[:object])
+ end)
+ end
+
+ def self.initialize_aliquot_type_callbacks
+ FactChanges.on_change_predicate('add_facts', 'aliquotType', Proc.new do |t, updates|
+ if t[:asset].kind_of_plate?
+ updates.add(t[:asset], 'purpose', purpose_for_aliquot(t[:object]))
+ end
+ end)
+ FactChanges.on_change_predicate('remove_facts', 'aliquotType', Proc.new do |t, updates|
+ if t[:asset].kind_of_plate?
+ updates.remove_where(t[:asset], 'purpose', purpose_for_aliquot(t[:object]))
+ end
+ end)
+ end
+ end
+end
diff --git a/lib/importers/barcodes_importer.rb b/lib/importers/barcodes_importer.rb
new file mode 100644
index 00000000..00555a37
--- /dev/null
+++ b/lib/importers/barcodes_importer.rb
@@ -0,0 +1,73 @@
+require 'importers/concerns/changes'
+
+module Importers
+ class BarcodesImporter
+ include Importers::Concerns::Changes
+
+ attr_reader :barcodes
+
+ def initialize(barcodes)
+ @barcodes = barcodes
+ @updates = nil
+ @imported_uuids_by_barcode = {}
+ @annotators_by_uuid={}
+ end
+
+ def processed?
+ !@updates.nil?
+ end
+
+ def changed_remote?(asset)
+ annotator_for(asset).has_changes_between_local_and_remote?
+ end
+
+ def annotator_for(asset)
+ process unless processed?
+ @annotators_by_uuid[asset.uuid]
+ end
+
+ def updates
+ process unless processed?
+ @updates
+ end
+
+ def imported_asset_for_barcode(barcode)
+ updates.instances_from_uuid[@imported_uuids_by_barcode[barcode]]
+ end
+
+ def local_asset_for_barcode(barcode)
+ local_assets.detect {|a| (a.barcode == barcode) || (a.uuid == barcode) }
+ end
+
+ def assets_for_barcodes
+ barcodes.map do |barcode|
+ local_asset_for_barcode(barcode) || imported_asset_for_barcode(barcode) || nil
+ end
+ end
+
+ def process
+ @updates = FactChanges.new
+ @updates.merge(refresh_assets(local_assets.from_remote_service))
+ @updates.merge(import_barcodes(filter_barcodes_not_in_assets(barcodes, local_assets.from_remote_service)))
+ end
+
+ def process!
+ process.apply(step)
+ end
+
+ def local_assets
+ Asset.where(barcode: barcodes).or(Asset.where(uuid: barcodes))
+ end
+
+ def step
+ Step.new(step_type: StepType.find_or_create_by(name: 'BarcodesImporter'))
+ end
+
+ private
+
+ def filter_barcodes_not_in_assets(barcodes, assets)
+ (barcodes - (assets.map(&:barcode).concat(assets.map(&:uuid)).flatten))
+ end
+
+ end
+end
diff --git a/lib/importers/concerns/annotator.rb b/lib/importers/concerns/annotator.rb
new file mode 100644
index 00000000..99a25198
--- /dev/null
+++ b/lib/importers/concerns/annotator.rb
@@ -0,0 +1,138 @@
+require 'importers/concerns/remote_digest'
+
+module Importers
+ module Concerns
+ class Annotator
+ include Importers::Concerns::RemoteDigest
+
+ attr_reader :asset, :remote_asset
+
+ def initialize(asset, remote_asset)
+ @asset=asset
+ @remote_asset = remote_asset
+ end
+
+ def validate!
+ raise Assets::Import::RefreshSourceNotFoundAnymore unless remote_asset
+ raise 'Uuid from asset and remote asset are different' unless asset.uuid == remote_asset.uuid
+ end
+
+ def import_asset_from_remote_asset
+ FactChanges.new.tap do |updates|
+ updates.create_assets([asset])
+ updates.replace_remote(asset, 'a', sequencescape_type_for_asset)
+ updates.replace_remote(asset, 'remoteAsset', asset)
+ updates.merge(update_asset_from_remote_asset)
+ end
+ end
+
+ def update_asset_from_remote_asset
+ FactChanges.new.tap do |updates|
+ class_name = sequencescape_type_for_asset
+ updates.remove(asset.facts.from_remote_asset)
+ updates.replace_remote_property(asset, 'a', class_name)
+
+ if is_not_a_sample_tube?
+ updates.replace_remote_property(asset, 'pushTo', 'Sequencescape')
+ if remote_asset.try(:plate_purpose)
+ updates.replace_remote_property(asset, 'purpose', remote_asset.plate_purpose.name)
+ end
+ end
+ updates.replace_remote_property(asset, 'is', 'NotStarted')
+
+ updates.merge(annotate_container(asset, remote_asset))
+ updates.merge(annotate_wells(asset, remote_asset))
+ updates.merge(annotate_study_name(asset, remote_asset))
+
+ updates.merge(update_digest_with_remote)
+ end
+ end
+
+ def update_digest_with_remote
+ FactChanges.new.tap do |updates|
+ updates.add(asset, 'remote_digest', digest_for_remote_asset)
+ end
+ end
+
+ def annotate_container(asset, remote_asset)
+ FactChanges.new.tap do |updates|
+ if remote_asset.try(:aliquots)
+ remote_asset.aliquots.each do |aliquot|
+ updates.replace_remote_relation(asset, 'sample_tube', asset)
+ updates.replace_remote_property(asset, 'sanger_sample_id', aliquot&.sample&.sanger_sample_id)
+ updates.replace_remote_property(asset, 'sample_uuid', aliquot&.sample&.uuid)
+ updates.replace_remote_property(asset, 'sanger_sample_name', aliquot&.sample&.name)
+ updates.replace_remote_property(asset, 'supplier_sample_name', aliquot&.sample&.sample_metadata&.supplier_name)
+ updates.replace_remote_property(asset, 'sample_common_name', aliquot&.sample&.sample_metadata&.sample_common_name)
+ end
+ end
+ end
+ end
+
+ def annotate_study_name_from_aliquots(asset, remote_asset)
+ FactChanges.new.tap do |updates|
+ if remote_asset.try(:aliquots)
+ if ((remote_asset.aliquots.count == 1) && (remote_asset.aliquots.first.sample))
+ updates.replace_remote_property(asset, 'study_name', remote_asset.aliquots.first.study.name)
+ updates.replace_remote_property(asset, 'study_uuid', remote_asset.aliquots.first.study.uuid)
+ end
+ end
+ end
+ end
+
+ def annotate_study_name(asset, remote_asset)
+ FactChanges.new.tap do |updates|
+ if remote_asset.try(:wells)
+ remote_asset.wells.each do |w|
+ updates.merge(annotate_study_name_from_aliquots(asset, w))
+ end
+ else
+ updates.merge(annotate_study_name_from_aliquots(asset, remote_asset))
+ end
+ end
+ end
+
+ def annotate_wells(asset, remote_asset)
+ FactChanges.new.tap do |updates|
+ # Remove any old wells
+ updates.remove(asset.facts.with_predicate('contains').from_remote_asset)
+ if remote_asset.try(:wells)
+ remote_asset.wells.each do |well|
+ local_well = Asset.find_by(uuid: well.uuid)
+ unless local_well
+ local_well = Asset.new(uuid: well.uuid)
+ updates.create_assets([local_well])
+ end
+ # Remove any old fact information from the well
+ updates.remove(local_well.facts.from_remote_asset)
+
+ # Add the new info
+ updates.add_remote(asset, 'contains', local_well)
+
+ # Updated wells will also mean that the plate is out of date, so we'll set it in the asset
+ updates.replace_remote_property(local_well, 'a', 'Well')
+ updates.replace_remote_property(local_well, 'location', well.position['name'])
+ updates.replace_remote_relation(local_well, 'parent', asset)
+
+ if (well.try(:aliquots)&.first&.sample&.sample_metadata&.supplier_name)
+ updates.merge(annotate_container(local_well, well))
+ end
+ end
+ end
+ end
+ end
+
+ def sequencescape_type_for_asset
+ return nil unless remote_asset.type
+ type = remote_asset.type.singularize.classify
+ return 'SampleTube' if type == 'Tube'
+ return type
+ end
+
+ def is_not_a_sample_tube?
+ class_name = sequencescape_type_for_asset
+ (class_name != 'SampleTube')
+ end
+ end
+ end
+end
diff --git a/lib/importers/concerns/changes.rb b/lib/importers/concerns/changes.rb
new file mode 100644
index 00000000..a81819d9
--- /dev/null
+++ b/lib/importers/concerns/changes.rb
@@ -0,0 +1,47 @@
+require 'importers/concerns/annotator'
+
+module Importers
+ module Concerns
+ module Changes
+
+ def refresh_assets(assets, opts={})
+ FactChanges.new.tap do |updates|
+ if assets.length > 0
+ remote_assets = SequencescapeClient::find_by_uuid(assets.map(&:uuid))
+ remote_assets = [] if remote_assets.nil?
+ assets.zip(remote_assets).each do |asset, remote_asset|
+ annotator = Importers::Concerns::Annotator.new(asset, remote_asset)
+ annotator.validate!
+ @annotators_by_uuid[asset.uuid]=annotator
+ if annotator.has_changes_between_local_and_remote?
+ updates.merge(annotator.update_asset_from_remote_asset)
+ end
+ end
+ end
+ end
+ end
+
+ def import_barcodes(barcodes)
+ FactChanges.new.tap do |updates|
+ if barcodes.length > 0
+ remote_assets = SequencescapeClient::get_remote_asset(barcodes)
+ remote_assets = [] if remote_assets.nil?
+ barcodes.zip(remote_assets).each do |barcode, remote_asset|
+ if remote_asset
+ # Needed in order to identify the imported elements
+ @imported_uuids_by_barcode[barcode] = remote_asset.uuid
+
+ asset = Asset.new(barcode: barcode, uuid: remote_asset.uuid)
+ annotator = Importers::Concerns::Annotator.new(asset, remote_asset)
+ annotator.validate!
+ @annotators_by_uuid[asset.uuid]=annotator
+ updates.merge(annotator.import_asset_from_remote_asset)
+ end
+ end
+ end
+ end
+ end
+
+ end
+ end
+end
diff --git a/lib/importers/concerns/remote_digest.rb b/lib/importers/concerns/remote_digest.rb
new file mode 100644
index 00000000..809f861f
--- /dev/null
+++ b/lib/importers/concerns/remote_digest.rb
@@ -0,0 +1,53 @@
+module Importers
+ module Concerns
+ module RemoteDigest
+
+ def digest_for_remote_asset
+ Digest::MD5::hexdigest(signature_for_remote)
+ end
+
+ def has_changes_between_local_and_remote?
+ digest_for_remote_asset != asset.remote_digest
+ end
+
+ def signature_for_remote
+ distinct = remote_asset.attributes.to_json
+
+ # It would be useful to have a hashcode in the sequencescape client api to know
+ # if this message is different from a previous one without needing to traverse
+ # all the object finding the change
+ # Having a :to_json method that returns a json would be pretty sensible too
+
+ # FOR A PLATE
+ if remote_asset.respond_to?(:wells) && remote_asset.wells
+ # wells.to_a because wells relation does not act as an array
+ listw = remote_asset.wells.to_a
+ if listw
+ # aliquots.to_a, same reason
+ listal = listw.compact.map(&:aliquots).map(&:to_a)
+ if listal
+ listsa = listal.flatten.compact.map{|al| al.sample }
+ if listsa
+ distinct+=listsa.compact.map(&:attributes).to_json
+ end
+ end
+ end
+ end
+
+ # FOR A TUBE
+ if remote_asset.respond_to?(:aliquots) && remote_asset.aliquots
+ # aliquots.to_a, same reason
+ listal = remote_asset.aliquots.to_a
+ if listal
+ listsa = listal.flatten.compact.map{|al| al.sample }
+ if listsa
+ distinct+=listsa.compact.map(&:attributes).to_json
+ end
+ end
+ end
+
+ distinct
+ end
+ end
+ end
+end
diff --git a/lib/message_processor.rb b/lib/message_processor.rb
new file mode 100644
index 00000000..fb66477a
--- /dev/null
+++ b/lib/message_processor.rb
@@ -0,0 +1,21 @@
+class MessageProcessor
+ include ActiveModel::Validations
+
+ attr_reader :channel
+
+ def initialize(params)
+ @channel = params[:channel]
+ end
+
+ def activity_id
+ channel.params[:activity_id]
+ end
+
+ def interested_in?(message)
+ false
+ end
+
+ def process(message)
+ false
+ end
+end
diff --git a/lib/message_processors/activity_message_processor.rb b/lib/message_processors/activity_message_processor.rb
new file mode 100644
index 00000000..525bb06f
--- /dev/null
+++ b/lib/message_processors/activity_message_processor.rb
@@ -0,0 +1,58 @@
+require 'message_processor'
+
+module MessageProcessors
+ class ActivityMessageProcessor < MessageProcessor
+ delegate :redis, to: :channel
+
+ def initialize(params)
+ super(params)
+ end
+
+ def interested_in?(message)
+ !!(message["activity"])
+ end
+
+ def process(message)
+ _process_activity(params_for_activity(message))
+ end
+
+ def self.redis
+ ActivityChannel.redis
+ end
+
+ def self.activity_attributes(id)
+ begin
+ JSON.parse(redis.hget('activities', id)) || default_activity_attributes
+ rescue StandardError => e
+ default_activity_attributes
+ end
+ end
+
+ def self.default_activity_attributes
+ { stepTypes: true, stepsPending: true, stepsRunning:true, stepsFailed: true, stepsFinished: false }.as_json
+ end
+
+
+ protected
+
+ def _process_activity(params)
+ activity = Activity.find_by(id: activity_id)
+
+ obj = ActivityMessageProcessor.activity_attributes(activity_id)
+ ['stepTypes', 'stepsPending', 'stepsRunning', 'stepsFailed', 'stepsFinished'].reduce(obj) do |memo, key|
+ memo[key] = !!params[key] unless params[key].nil?
+ memo
+ end
+
+ redis.hset('activities', activity_id, obj.to_json)
+
+ activity.touch
+ end
+
+ def params_for_activity(params)
+ params = ActionController::Parameters.new(params)
+ params.require(:activity).permit(:activity_id, :stepTypes, :stepsPending, :stepsRunning, :stepsFailed, :stepsFinished)
+ end
+
+ end
+end
diff --git a/lib/message_processors/asset_group_message_processor.rb b/lib/message_processors/asset_group_message_processor.rb
new file mode 100644
index 00000000..35a1708e
--- /dev/null
+++ b/lib/message_processors/asset_group_message_processor.rb
@@ -0,0 +1,36 @@
+require 'message_processor'
+require 'importers/barcodes_importer'
+module MessageProcessors
+ class AssetGroupMessageProcessor < MessageProcessor
+ attr_reader :asset_group
+
+ def interested_in?(message)
+ !!(message["asset_group"])
+ end
+
+ def process(message)
+ _process_asset_group(params_for_asset_group(message))
+ end
+
+ def _process_asset_group(strong_params)
+ @asset_group = AssetGroup.find(strong_params[:id])
+ assets = strong_params[:assets]
+ if asset_group && assets
+ step_for_import = Step.new(activity_id: asset_group.activity_owner_id, asset_group: asset_group, state: 'complete')
+ importer = Importers::BarcodesImporter.new(assets)
+ updates = importer.process
+ updates.remove_assets_from_group(asset_group, asset_group.assets.to_a)
+ updates.add_assets_to_group(asset_group, importer.assets_for_barcodes)
+ updates.apply(step_for_import)
+ step_for_import.wss_event
+ end
+ end
+
+ def params_for_asset_group(params)
+ params = ActionController::Parameters.new(params)
+ params.require(:asset_group).permit(:id, :assets => [])
+ end
+
+
+ end
+end
diff --git a/lib/parsers/csv_layout/assets_cache.rb b/lib/parsers/csv_layout/assets_cache.rb
new file mode 100644
index 00000000..34f11e89
--- /dev/null
+++ b/lib/parsers/csv_layout/assets_cache.rb
@@ -0,0 +1,29 @@
+#
+# This module allows to perform a single web request for all the barcodes of the
+# files by providing a cache functionality to the CsvParser. This is done by recording
+# all the barcode parsers instantiated by a CsvParser and perform a request for all the barcodes
+# not resolved when asked by one of the barcodes (in #get_asset_for_barcode)
+#
+module Parsers::CsvLayout::AssetsCache
+ def register_barcode_parser(barcode_parser)
+ @barcode_parsers ||= []
+ @barcode_parsers.push(barcode_parser)
+ end
+
+ def get_asset_for_barcode(barcode)
+ @cached_assets_from_barcode_parsers ||= {}
+ update_cached_assets_from_barcode_parsers! unless @cached_assets_from_barcode_parsers[barcode]
+ return @cached_assets_from_barcode_parsers[barcode]
+ end
+
+ def unresolved_barcodes_for_cached_assets
+ (@barcode_parsers.reject(&:no_read_barcode?).map(&:barcode) - @cached_assets_from_barcode_parsers.keys)
+ end
+
+ def update_cached_assets_from_barcode_parsers!
+ assets = Asset.find_or_import_assets_with_barcodes(unresolved_barcodes_for_cached_assets)
+ assets.compact.each do |asset|
+ @cached_assets_from_barcode_parsers[asset.barcode] = asset
+ end
+ end
+end
diff --git a/lib/parsers/csv_layout/barcode_creatable_parser.rb b/lib/parsers/csv_layout/barcode_creatable_parser.rb
index 5d5c6102..41a2540c 100644
--- a/lib/parsers/csv_layout/barcode_creatable_parser.rb
+++ b/lib/parsers/csv_layout/barcode_creatable_parser.rb
@@ -8,7 +8,7 @@ def updater
end
def asset
- @instance ||= Asset.find_or_import_asset_with_barcode(barcode)
+ @instance ||= @parser.get_asset_for_barcode(barcode)
unless @instance
@instance = Asset.new(barcode: barcode)
@instance.generate_uuid!
diff --git a/lib/parsers/csv_layout/barcode_parser.rb b/lib/parsers/csv_layout/barcode_parser.rb
index 5f0dc0de..024facdf 100644
--- a/lib/parsers/csv_layout/barcode_parser.rb
+++ b/lib/parsers/csv_layout/barcode_parser.rb
@@ -22,7 +22,9 @@ def initialize(line, parser)
@parser = parser
_parse(line)
- valid?
+ @parser.register_barcode_parser(self) if @parser.respond_to?(:register_barcode_parser)
+
+ #valid?
end
def no_read_barcode?
@@ -30,7 +32,7 @@ def no_read_barcode?
end
def asset
- Asset.find_or_import_asset_with_barcode(barcode)
+ @parser.get_asset_for_barcode(barcode)
end
protected
diff --git a/lib/parsers/csv_layout/csv_parser.rb b/lib/parsers/csv_layout/csv_parser.rb
index e54dbacc..f303f5c3 100644
--- a/lib/parsers/csv_layout/csv_parser.rb
+++ b/lib/parsers/csv_layout/csv_parser.rb
@@ -2,6 +2,7 @@
require 'parsers/csv_layout/line_reader'
require 'parsers/csv_layout/barcode_parser'
require 'parsers/csv_layout/location_parser'
+require 'parsers/csv_layout/assets_cache'
require 'parsers/csv_layout/validators/fluidx_barcode_validator'
require 'parsers/csv_layout/validators/location_validator'
@@ -9,6 +10,7 @@ module Parsers
module CsvLayout
class CsvParser
include ActiveModel::Validations
+ include Parsers::CsvLayout::AssetsCache
validate :validate_parsed_data
validate :validate_location_duplication
@@ -58,8 +60,10 @@ def error_list
self_error_list.concat(line_parser.error_list)
end
+
protected
+
def validate_parsed_data
parse unless @parsed
unless @line_parser.valid?
diff --git a/lib/parsers/csv_layout/location_parser.rb b/lib/parsers/csv_layout/location_parser.rb
index 5b50f8aa..78c3486d 100644
--- a/lib/parsers/csv_layout/location_parser.rb
+++ b/lib/parsers/csv_layout/location_parser.rb
@@ -14,8 +14,6 @@ def validations
def initialize(line, parser)
@parser = parser
_parse(line)
-
- valid?
end
protected
diff --git a/lib/sequencescape_client.rb b/lib/sequencescape_client.rb
index 5994e993..edb13cc7 100644
--- a/lib/sequencescape_client.rb
+++ b/lib/sequencescape_client.rb
@@ -8,6 +8,22 @@
require 'sequencescape_client_v2'
class SequencescapeClient
+
+ def self.RESOURCES_FOR_UUID_SEARCH
+ [
+ SequencescapeClientV2::Plate,
+ SequencescapeClientV2::Tube,
+ SequencescapeClientV2::Well
+ ]
+ end
+
+ def self.RESOURCES_FOR_BARCODE_SEARCH
+ [
+ SequencescapeClientV2::Plate,
+ SequencescapeClientV2::Tube
+ ]
+ end
+
@purposes=nil
def self.api_connection_options
@@ -43,37 +59,39 @@ def self.create_plate(purpose_name, attrs)
purpose.plates.create!(attrs)
end
- def self.get_study_by_name(name)
- get_study_searcher_by_name.first(name: name)
- rescue Sequencescape::Api::ResourceNotFound => exception
- return nil
- end
-
- def self.get_study_searcher_by_name
- @@study_searcher ||= client.search.all.select{|s| s.name == Rails.configuration.searcher_study_by_name}.first
- end
-
- def self.get_searcher_by_barcode
- @@searcher ||= client.search.all.select{|s| s.name == Rails.configuration.searcher_name_by_barcode}.first
- end
-
def self.get_remote_asset(barcode)
- find_by(barcode: barcode)
+ barcodes = [barcode].flatten
+ return find_first(self.RESOURCES_FOR_BARCODE_SEARCH, barcode: barcodes) if barcodes.length==1
+ results = find_by(self.RESOURCES_FOR_BARCODE_SEARCH, barcode: barcodes)
+ barcodes.each_with_index.map do |barcode|
+ results.detect{|r| r.labware_barcode['human_barcode'] == barcode}
+ end
end
def self.find_by_uuid(uuid, opts=nil)
- find_by(uuid: uuid)
+ uuids = [uuid].flatten
+ return find_first(self.RESOURCES_FOR_UUID_SEARCH, uuid: uuids) if uuids.length==1
+ results = find_by(self.RESOURCES_FOR_UUID_SEARCH, uuid: uuids)
+ uuids.each_with_index.map do |uuid|
+ results.detect{|r| r.uuid == uuid}
+ end
end
- def self.find_by(search_conditions)
- [
- SequencescapeClientV2::Plate,
- SequencescapeClientV2::Tube,
- SequencescapeClientV2::Well
- ].each do |klass|
+ def self.find_by(resources, search_conditions)
+ resources.map do |klass|
+ begin
+ klass.where(search_conditions)
+ rescue JsonApiClient::Errors::ClientError => e
+ # Ignore filter error
+ end
+ end.flatten.compact
+ end
+
+ def self.find_first(resources, search_conditions)
+ resources.each do |klass|
begin
search = klass.where(search_conditions)
- search = search.first if search
+ search = search.first if search && search.length == 1
return search if search
rescue JsonApiClient::Errors::ClientError => e
# Ignore filter error
diff --git a/package.json b/package.json
index 892c1293..3fa289db 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
"jquery": "^3.4.1",
"moment": "^2.22.2",
"node": "^10.0.0",
+ "node-sass": "^4.12.0",
"prop-types": "^15.6.0",
"react": "^16.2.0",
"react-dom": "^16.4.1",
diff --git a/script/runners/a_big_task.rb b/script/runners/a_big_task.rb
new file mode 100644
index 00000000..64fdc096
--- /dev/null
+++ b/script/runners/a_big_task.rb
@@ -0,0 +1,3 @@
+sleep(30)
+
+puts "{}"
diff --git a/script/runners/load_metadata.rb b/script/runners/load_metadata.rb
index 76bad43d..dd1f8194 100644
--- a/script/runners/load_metadata.rb
+++ b/script/runners/load_metadata.rb
@@ -1,4 +1,3 @@
-require 'actions/racking'
require 'parsers/csv_metadata/csv_parser'
class LoadMetadata
diff --git a/script/runners/move_barcodes_from_tube_rack_to_plate.rb b/script/runners/move_barcodes_from_tube_rack_to_plate.rb
new file mode 100644
index 00000000..ae4411e0
--- /dev/null
+++ b/script/runners/move_barcodes_from_tube_rack_to_plate.rb
@@ -0,0 +1,96 @@
+# # This rule applies the barcodes from a rack into a plate
+# {
+# ?plate se:a """Plate""" .
+# ?rack se:a """TubeRack""" .
+# ?rack se:mergeInto ?plate .
+# ?rack se:contains ?tube .
+# ?plate se:contains ?well .
+# ?tube se:location ?location .
+# ?tube se:barcode ?barcode .
+# ?well se:location ?location .
+# } => {
+# :step :addFacts { ?well se:barcode ?barcode . } .
+# :step :removeFacts { ?tube se:barcode ?barcode . } .
+# :step :addFacts { ?tube se:barcode """""" . } .
+# :step :addFacts { ?tube se:previousBarcode ?barcode . } .
+# :step :addFacts { ?tube se:appliedBarcodeTo ?well . } .
+# :step :addFacts { ?rack se:mergedInto ?plate .}.
+# :step :addFacts { ?plate se:mergedFrom ?rack .}.
+# }.
+
+class MoveBarcodesFromTubeRackToPlate
+ attr_reader :asset_group
+
+
+ def initialize(params)
+ @asset_group = params[:asset_group]
+ end
+
+ def assets_compatible_with_step_type
+ [plate, tube_rack].flatten.compact.count > 0
+ end
+
+
+ def plate
+ asset_group.assets.select{|a| a.facts.where(predicate: 'a', object: 'Plate').count > 0 }.first
+ end
+
+ def tube_rack
+ asset_group.assets.select{|a| a.facts.where(predicate: 'a', object: 'TubeRack').count > 0}.first
+ end
+
+ def wells_for(asset)
+ asset.facts.where(predicate: 'contains').map(&:object_asset)
+ end
+
+ def well_at_location(asset, location)
+ wells_for(asset).select do |w|
+ location_facts = w.facts.where(predicate: 'location')
+ if (location_facts.count == 1)
+ location_fact = location_facts.first
+ (TokenUtil.pad_location(location_fact.object) == TokenUtil.pad_location(location))
+ end
+ end.first
+ end
+
+ def traverse_wells(asset, &block)
+ wells_for(asset).each do |w|
+ location = w.facts.where(predicate: 'location').first.object
+ yield w, TokenUtil.pad_location(location)
+ end
+ end
+
+ def process
+ FactChanges.new.tap do |updates|
+ if assets_compatible_with_step_type
+ traverse_wells(tube_rack) do |well_from_tube_rack, location|
+ well_from_plate = well_at_location(plate, location)
+ updates.remove_where(well_from_tube_rack, 'barcode', well_from_tube_rack.barcode)
+ updates.add(well_from_tube_rack, 'previousBarcode', well_from_tube_rack.barcode)
+ updates.add(well_from_tube_rack, 'appliedBarcodeTo', well_from_plate)
+ updates.add(well_from_plate, 'barcode', well_from_tube_rack.barcode)
+ end
+
+ updates.add(tube_rack, 'mergedInto', plate)
+ updates.add(plate, 'mergedFrom', tube_rack)
+ end
+ end
+ end
+end
+
+return unless ARGV.any?{|s| s.match(".json")}
+
+args = ARGV[0]
+asset_group_id = args.match(/(\d*)\.json/)[1]
+asset_group = AssetGroup.find(asset_group_id)
+
+begin
+ updates = MoveBarcodesFromTubeRackToPlate.new(asset_group: asset_group).process
+ json = updates.to_json
+ JSON.parse(json)
+ puts json
+rescue StandardError => e
+ puts ({ set_errors: ['Unknown error while parsing file'+e.backtrace.to_s]}.to_json)
+end
+
+
diff --git a/script/runners/put_tubes_into_rack_by_column_order.rb b/script/runners/put_tubes_into_rack_by_column_order.rb
index 6acaba77..cb7fdb23 100644
--- a/script/runners/put_tubes_into_rack_by_column_order.rb
+++ b/script/runners/put_tubes_into_rack_by_column_order.rb
@@ -1,6 +1,10 @@
-require 'actions/racking'
+require 'actions/layout/racking'
+require 'actions/layout/unracking'
+require 'actions/layout_processor'
require 'token_util'
-include Actions::Racking
+
+include Actions::Layout::Unracking
+include Actions::Layout::Racking
return unless ARGV.any?{|s| s.match(".json")}
@@ -36,7 +40,7 @@
memo.push(asset: tube, location: available_locations[idx])
end
updates.add(rack, 'layout', 'Complete')
- updates.merge(Actions::Racking::reracking_tubes(rack, layout))
+ updates.merge(Actions::Layout::Racking::reracking_tubes(rack, layout))
end
puts updates.to_json
diff --git a/script/runners/rack_layout.rb b/script/runners/rack_layout.rb
index 88638c2c..a597aac2 100644
--- a/script/runners/rack_layout.rb
+++ b/script/runners/rack_layout.rb
@@ -1,4 +1,4 @@
-require 'actions/racking'
+require 'actions/layout_processor'
class RackLayout
attr_reader :asset_group
@@ -17,7 +17,7 @@ def assets_compatible_with_step_type
def process
FactChanges.new.tap do |updates|
if assets_compatible_with_step_type.count > 0
- updates.merge(rack_layout(@asset_group))
+ updates.merge(Actions::LayoutProcessor.new(asset_group: @asset_group).changes)
end
end
end
diff --git a/script/runners/rack_layout_any_barcode.rb b/script/runners/rack_layout_any_barcode.rb
index 31169d66..d973ebae 100644
--- a/script/runners/rack_layout_any_barcode.rb
+++ b/script/runners/rack_layout_any_barcode.rb
@@ -1,4 +1,4 @@
-require 'actions/racking'
+require 'actions/layout_processor'
class RackLayoutAnyBarcode
attr_reader :asset_group
@@ -17,7 +17,10 @@ def assets_compatible_with_step_type
def process
FactChanges.new.tap do |updates|
if assets_compatible_with_step_type.count > 0
- updates.merge(rack_layout_any_barcode(@asset_group))
+ updates.merge(Actions::LayoutProcessor.new({
+ asset_group: @asset_group,
+ barcode_validator: Parsers::CsvLayout::Validators::AnyBarcodeValidator
+ }).changes)
updates.remove_assets([[asset_group.uploaded_files.first.asset.uuid]])
end
end
diff --git a/script/runners/rack_layout_creating_tubes.rb b/script/runners/rack_layout_creating_tubes.rb
index 9a3cfd10..0721000f 100644
--- a/script/runners/rack_layout_creating_tubes.rb
+++ b/script/runners/rack_layout_creating_tubes.rb
@@ -1,4 +1,4 @@
-require 'actions/racking'
+require 'actions/layout_processor'
class RackLayoutCreatingTubes
attr_reader :asset_group
@@ -13,11 +13,13 @@ def assets_compatible_with_step_type
asset_group.uploaded_files
end
-
def process
FactChanges.new.tap do |updates|
if assets_compatible_with_step_type.count > 0
- updates.merge(rack_layout_creating_tubes(@asset_group))
+ updates.merge(Actions::LayoutProcessor.new({
+ asset_group: @asset_group,
+ barcode_parser: Parsers::CsvLayout::BarcodeCreatableParser
+ }).changes)
updates.remove_assets([[asset_group.uploaded_files.first.asset.uuid]])
end
end
diff --git a/script/runners/remove_barcodes_from_tubes.rb b/script/runners/remove_barcodes_from_tubes.rb
new file mode 100644
index 00000000..463e59b1
--- /dev/null
+++ b/script/runners/remove_barcodes_from_tubes.rb
@@ -0,0 +1,55 @@
+class RemoveBarcodesFromTubes
+ attr_reader :asset_group
+
+
+ def initialize(params)
+ @asset_group = params[:asset_group]
+ end
+
+ def asset
+ plate || tube_rack
+ end
+
+ def plate
+ asset_group.assets.select{|a| a.facts.where(predicate: 'a', object: 'Plate').count > 0 }.first
+ end
+
+ def tube_rack
+ asset_group.assets.select{|a| a.facts.where(predicate: 'a', object: 'TubeRack').count > 0}.first
+ end
+
+ def tubes
+ asset.facts.with_predicate('contains').map(&:object_asset)
+ end
+
+ def assets_compatible_with_step_type
+ !asset.nil?
+ end
+
+
+ def process
+ FactChanges.new.tap do |updates|
+ if assets_compatible_with_step_type
+ tubes.each do |tube|
+ updates.remove_where(tube, 'barcode', tube.barcode) if tube.barcode
+ end
+ end
+ end
+ end
+
+end
+
+return unless ARGV.any?{|s| s.match(".json")}
+
+args = ARGV[0]
+asset_group_id = args.match(/(\d*)\.json/)[1]
+asset_group = AssetGroup.find(asset_group_id)
+
+begin
+ updates = RemoveBarcodesFromTubes.new(asset_group: asset_group).process
+ json = updates.to_json
+ JSON.parse(json)
+ puts json
+rescue StandardError => e
+ puts ({ set_errors: ['Unknown error while parsing file'+e.backtrace.to_s]}.to_json)
+end
diff --git a/spec/controllers/asset_groups_controller_spec.rb b/spec/controllers/asset_groups_controller_spec.rb
index 7b4c04d5..7bf09696 100644
--- a/spec/controllers/asset_groups_controller_spec.rb
+++ b/spec/controllers/asset_groups_controller_spec.rb
@@ -11,6 +11,9 @@
context '#upload' do
+ before do
+ allow(SequencescapeClient).to receive(:get_remote_asset).and_return(nil)
+ end
let(:file) { fixture_file_upload('test/data/layout.csv', 'text/csv') }
it 'creates a new uploaded file' do
@@ -26,7 +29,7 @@
it 'creates a new step to track the change in the asset group' do
expect{
post :upload, params: { id: asset_group.id, qqfilename: 'myfile.csv', qqfile: file}
- }.to change{Step.all.count}.by(1)
+ }.to change{Step.all.count}
end
end
@@ -34,6 +37,9 @@
let(:barcode) { generate :barcode }
let(:asset) { create :asset, barcode: barcode }
+ before do
+ allow(SequencescapeClient).to receive(:get_remote_asset).and_return(nil)
+ end
context "when the asset is in the database" do
context 'finding by uuid' do
@@ -92,20 +98,18 @@
:id => asset_group.id, :activity_id => activity.id}
expect(asset_group.assets.count).to eq(0)
end
- end
-
- context "when it is a creatable barcode" do
- let(:creatable_barcode) { generate :barcode_creatable }
-
- it "creates a new asset" do
+ it "does not create a new asset" do
+ barcode = generate :barcode_creatable
expect{
post :update, params: {:asset_group => {
- :assets => [creatable_barcode]
+ :assets => [barcode]
},
:id => asset_group.id, :activity_id => activity.id}
- }.to change{asset_group.assets.count}.by(1)
+ }.not_to change{Asset.count}
end
+
end
+
end
end
end
diff --git a/spec/features/activity_management_spec.rb b/spec/features/activity_management_spec.rb
new file mode 100644
index 00000000..90a1bd57
--- /dev/null
+++ b/spec/features/activity_management_spec.rb
@@ -0,0 +1,151 @@
+require 'rails_helper'
+require 'remote_assets_helper'
+RSpec.feature 'Activity Management', type: :feature, js: true, browser: true do
+ let!(:activity_type) { create(:activity_type, name: 'Test') }
+ let!(:instrument) { create(:instrument, barcode: '1', activity_types: [activity_type]) }
+ let!(:kit_type) { create :kit_type, activity_type: activity_type }
+ let!(:user) { create(:user, barcode: '1', role: 'administrator', username: 'TEST') }
+ let!(:kit) { create :kit, kit_type: kit_type}
+ let!(:plate_name) { "a plate name" }
+ let!(:plate1) {
+ p=create(:plate, remote_digest: '1234')
+ p.generate_barcode
+ p.facts << create(:fact, predicate: 'plateName', object: plate_name, literal: true)
+ remote = build_remote_plate(barcode: p.barcode)
+ stub_client_with_asset(SequencescapeClient, remote)
+ p.update_attributes(uuid: remote.uuid)
+ p
+ }
+ let!(:step_type) {
+ st = create(:step_type, n3_definition: %Q{
+ { ?plate :a :Plate .
+ ?plate :is :NotStarted .
+ } => {
+ :step :stepTypeName """Transfer to new plate""" .
+ :step :unselectAsset ?plate .
+ :step :removeFacts { ?plate :is :NotStarted .}.
+ :step :addFacts { ?plate :is :Started .}.
+ :step :createAsset { ?plate2 :a :Plate .} .
+ :step :addFacts { ?plate2 :status :plateReadyForSecondTransfer .}.
+ :step :addFacts { ?plate2 :transferredFrom ?plate .}.
+ :step :addFacts { ?plate :transfer ?plate2 . }.
+ }.
+ })
+ activity_type.step_types << st
+ st
+ }
+ let!(:step_type2) {
+ st = create(:step_type, n3_definition: %Q{
+ {
+ ?plate :a :Plate .
+ ?plate :status :plateReadyForSecondTransfer .
+ } => {
+ :step :stepTypeName """Transfer to 2 new plates""" .
+ :step :unselectAsset ?plate .
+ :step :createAsset { ?plate2 :a :Plate .} .
+ :step :createAsset { ?plate3 :a :Plate .} .
+ :step :addFacts { ?plate2 :status :plateReadyForThirdTransfer .}.
+ :step :addFacts { ?plate3 :status :plateReadyForThirdTransfer .}.
+ :step :addFacts { ?plate2 :transferredFrom ?plate .}.
+ :step :addFacts { ?plate :transfer ?plate2 . }.
+ :step :addFacts { ?plate3 :transferredFrom ?plate .}.
+ :step :addFacts { ?plate :transfer ?plate3 . }.
+
+ }.
+ })
+ activity_type.step_types << st
+ st
+ }
+
+ include RemoteAssetsHelper
+ before(:all) do
+ Rails.configuration.redis_enabled = true
+ end
+ after(:all) do
+ Rails.configuration.redis_enabled = false
+ end
+ before do
+ @mocked_redis = MockRedis.new
+ ActionController::Base.allow_forgery_protection = true
+ allow(ActivityChannel).to receive(:redis).and_return(@mocked_redis)
+ Capybara.current_driver = :selenium_chrome_headless
+ end
+
+ def user_login(user)
+ visit '/'
+ find('.logged-out').click
+ fill_in('Scan a user barcode', with: user.barcode)
+ click_on('Login')
+ end
+
+ def start_activity(kit)
+ click_on('Use')
+ fill_in('Scan a kit barcode', with: kit.barcode)
+ click_on('Create activity')
+ end
+
+ def scan_asset(asset)
+ fill_in('Scan a barcode', with: asset.barcode+"\n")
+ end
+
+ context 'with an unlogged user' do
+ scenario "user can log in" do
+ user_login(user)
+
+ expect(page).to have_content('Logged as TEST')
+ end
+ end
+ context 'with a logged user' do
+ before do
+ user_login(user)
+ end
+ scenario "User can create an activity" do
+ start_activity(kit)
+
+ expect(page).to have_content('Activity was successfully created')
+
+ click_on("Finish activity")
+
+ expect(page).to have_content('This activity was finished')
+ end
+
+ context "with a created activity" do
+ before do
+ start_activity(kit)
+ end
+
+ scenario "we can scan new assets and remove them" do
+ scan_asset(plate1)
+
+ expect(page).to have_content(plate1.barcode, wait: 10)
+
+ click_on("Delete")
+
+ expect(page).not_to have_content(plate1.barcode, wait: 10)
+ end
+
+ scenario "we can run a workflow on it" do
+ scan_asset(plate1)
+
+ expect(page).to have_content("Transfer to new plate", wait: 10)
+
+ expect(find("div.active")).to have_content(plate_name, wait: 10)
+ expect(page).not_to have_content("Transfer to 2 new plates")
+
+ click_on("Transfer to new plate", match: :first)
+
+ expect(page).to have_content("transferredFrom", wait: 10)
+ expect(find("div.active")).not_to have_content(plate_name, wait: 10)
+ expect(page).not_to have_content("Transfer to new plate")
+
+ click_on("Transfer to 2 new plates", match: :first)
+
+ expect(page).to have_content("transferredFrom", wait: 10)
+ expect(find("div.active")).to have_content("plateReadyForThirdTransfer", wait: 10)
+
+ click_on("Finish activity")
+ expect(page).to have_content('This activity was finished')
+ end
+ end
+ end
+end
diff --git a/spec/lib/actions/layout/racking_spec.rb b/spec/lib/actions/layout/racking_spec.rb
new file mode 100644
index 00000000..79ec9c56
--- /dev/null
+++ b/spec/lib/actions/layout/racking_spec.rb
@@ -0,0 +1,71 @@
+require 'rails_helper'
+require 'actions/layout_processor'
+
+RSpec.describe 'Actions::Layout::Racking' do
+ let(:layout_processor) { Actions::LayoutProcessor.new({}) }
+ let(:positions) { TokenUtil.generate_positions(('A'..'F').to_a, (1..12).to_a) }
+
+ describe '#changes_for_put_tube_into_rack_position' do
+ let(:rack) { create :tube_rack }
+ let(:position) { 'A01'}
+ let(:tube) { create :tube }
+ it 'returns all changes to put the tube in the rack' do
+ updates = layout_processor.changes_for_put_tube_into_rack_position(tube, rack, position)
+ expect(updates.to_h[:add_facts]).to include(
+ [tube.uuid, 'location', position],
+ [tube.uuid, 'parent', rack.uuid],
+ [rack.uuid, 'contains', tube.uuid]
+ )
+ end
+ end
+
+ describe '#changes_for_rack_tubes' do
+ let(:tube1) {create :tube }
+ let(:tube2) {create :tube }
+ let(:rack) { create :tube_rack }
+ let(:layout) {
+ [{location: 'A01', asset: nil}, {location: 'B01', asset: tube1}, {location: 'C01', asset: tube2}]
+ }
+ it 'puts the tubes in the rack following the layout' do
+ updates = layout_processor.changes_for_rack_tubes(layout, rack)
+ expect(updates.to_h[:add_facts]).to include(
+ [rack.uuid, 'contains', tube1.uuid],
+ [rack.uuid, 'contains', tube2.uuid],
+ [tube1.uuid, 'location', 'B01'],
+ [tube1.uuid, 'parent', rack.uuid],
+ [tube2.uuid, 'location', 'C01'],
+ [tube2.uuid, 'parent', rack.uuid]
+ )
+ end
+ it 'also adds inherited fields' do
+ tube2.facts << create(:fact, predicate: 'study_name', object: 'STDY1', literal: true)
+ updates = layout_processor.changes_for_rack_tubes(layout, rack)
+ expect(updates.to_h[:add_facts]).to include([rack.uuid, 'study_name', 'STDY1'])
+ end
+ end
+
+ describe '#changes_for_rack_when_racking_tubes' do
+ let(:rack) { create :tube_rack }
+ let(:tube1) { create(:tube, :inside_rack, location: "A01", parent: rack) }
+ let(:tube2) { create(:tube, :inside_rack, location: "B01", parent: rack) }
+ let(:tubes) {[tube1, tube2]}
+
+ it 'transfers the relevant properties from the tubes into the racks' do
+ Actions::LayoutProcessor::TUBE_TO_RACK_TRANSFERRABLE_PROPERTIES.push('country')
+ tube1.facts << create(:fact, predicate: 'country', object: 'Spain', literal: true)
+ tube2.facts << create(:fact, predicate: 'country', object: 'Portugal', literal: true)
+
+ updates = layout_processor.changes_for_rack_when_racking_tubes(rack, tubes)
+ expect(updates.to_h[:add_facts]).to eq(
+ [[rack.uuid, 'country', 'Spain'],
+ [rack.uuid, 'country', 'Portugal']]
+ )
+ end
+ it 'does not transfer non-relevant properties from tubes to the rack' do
+ property = SecureRandom.uuid
+ tube2.facts << create(:fact, predicate: property, object: 'Orange', literal: true)
+ updates = layout_processor.changes_for_rack_when_racking_tubes(rack, tubes)
+ expect(updates.to_h[:add_facts]).to be_nil
+ end
+ end
+end
diff --git a/spec/lib/actions/layout/unracking_spec.rb b/spec/lib/actions/layout/unracking_spec.rb
new file mode 100644
index 00000000..d6cabd8c
--- /dev/null
+++ b/spec/lib/actions/layout/unracking_spec.rb
@@ -0,0 +1,95 @@
+require 'rails_helper'
+require 'actions/layout_processor'
+
+RSpec.describe 'Actions::Layout::Unracking' do
+ let(:layout_processor) { Actions::LayoutProcessor.new({}) }
+ let(:positions) { TokenUtil.generate_positions(('A'..'F').to_a, (1..12).to_a) }
+
+ describe '#changes_for_tubes_on_unrack' do
+ context 'when unracking a list of tubes' do
+ let(:tubes_rack_1) {
+ 3.times.map do |pos|
+ create(:tube, :inside_rack, location: positions[pos], parent: rack1)
+ end
+ }
+ let(:tubes_rack_2) {
+ 3.times.map do |pos|
+ create(:tube, :inside_rack, location: positions[pos], parent: rack2)
+ end
+ }
+ let(:tubes) { [tubes_rack_1, tubes_rack_2].flatten }
+ let!(:rack1) { create :tube_rack }
+ let!(:rack2) { create :tube_rack }
+ let(:layout) {
+ all_tubes.each_with_index.map{|tube, i| {asset: tube, location: positions[i]}}
+ }
+
+ it 'removes all tubes from the layout from its previous parent' do
+ expect(layout_processor.changes_for_tubes_on_unrack(tubes).to_h[:remove_facts]).to include(
+ [rack1.uuid, 'contains', tubes_rack_1[0].uuid],
+ [rack1.uuid, 'contains', tubes_rack_1[1].uuid],
+ [rack1.uuid, 'contains', tubes_rack_1[2].uuid],
+ [rack2.uuid, 'contains', tubes_rack_2[0].uuid],
+ [rack2.uuid, 'contains', tubes_rack_2[1].uuid],
+ [rack2.uuid, 'contains', tubes_rack_2[2].uuid]
+ )
+ end
+ it 'removes the parent from the reracked tubes' do
+ expect(layout_processor.changes_for_tubes_on_unrack(tubes).to_h[:remove_facts]).to include(
+ [tubes_rack_1[0].uuid, 'parent', rack1.uuid],
+ [tubes_rack_1[1].uuid, 'parent', rack1.uuid],
+ [tubes_rack_1[2].uuid, 'parent', rack1.uuid],
+ [tubes_rack_2[0].uuid, 'parent', rack2.uuid],
+ [tubes_rack_2[1].uuid, 'parent', rack2.uuid],
+ [tubes_rack_2[2].uuid, 'parent', rack2.uuid]
+ )
+ end
+ it 'removes all previous locations from the tubes of the layout' do
+ expect(layout_processor.changes_for_tubes_on_unrack(tubes).to_h[:remove_facts]).to include(
+ [tubes_rack_1[0].uuid, 'location', positions[0]],
+ [tubes_rack_1[1].uuid, 'location', positions[1]],
+ [tubes_rack_1[2].uuid, 'location', positions[2]],
+ [tubes_rack_2[0].uuid, 'location', positions[0]],
+ [tubes_rack_2[1].uuid, 'location', positions[1]],
+ [tubes_rack_2[2].uuid, 'location', positions[2]]
+ )
+ end
+
+ it 'adds a new reracking record in the destination rack' do
+ updates = layout_processor.changes_for_tubes_on_unrack(tubes)
+ triples = updates.to_h[:add_facts].select{|t| t[1] == 'rerack'}
+ expect(triples.count).to eq(6)
+ expect(updates.to_h[:add_facts]).to include(
+ *(triples.map{|t| [t[2], 'a', 'Rerack']})
+ )
+ end
+ end
+ end
+
+ describe '#changes_for_rack_on_unrack' do
+ let(:rack) { create :tube_rack }
+ let(:tube1) { create(:tube, :inside_rack, location: "A01", parent: rack) }
+ let(:tube2) { create(:tube, :inside_rack, location: "B01", parent: rack) }
+ let(:tubes) {[tube1, tube2]}
+
+ it 'removes the relevant properties when removing tubes from the racks' do
+ Actions::LayoutProcessor::TUBE_TO_RACK_TRANSFERRABLE_PROPERTIES.push('country')
+ tube1.facts << create(:fact, predicate: 'country', object: 'Spain', literal: true)
+ tube2.facts << create(:fact, predicate: 'country', object: 'Portugal', literal: true)
+
+ updates = layout_processor.changes_for_rack_on_unrack(rack, tubes)
+ expect(updates.to_h[:remove_facts]).to eq(
+ [[rack.uuid, 'country', 'Spain'],
+ [rack.uuid, 'country', 'Portugal']]
+ )
+ end
+ it 'does not remove non-relevant properties when removing tubes from the rack' do
+ property = SecureRandom.uuid
+ tube2.facts << create(:fact, predicate: property, object: 'Orange', literal: true)
+ updates = layout_processor.changes_for_rack_on_unrack(rack, tubes)
+ expect(updates.to_h[:remove_facts]).to be_nil
+ end
+
+ end
+
+end
diff --git a/spec/lib/actions/layout_processor_spec.rb b/spec/lib/actions/layout_processor_spec.rb
new file mode 100644
index 00000000..60fb048b
--- /dev/null
+++ b/spec/lib/actions/layout_processor_spec.rb
@@ -0,0 +1,119 @@
+require 'rails_helper'
+require 'actions/layout_processor'
+
+RSpec.describe Actions::LayoutProcessor do
+ let(:content) { File.open('test/data/layout.csv').read }
+ let(:file) { create(:uploaded_file, data: content )}
+ let(:activity) { create(:activity) }
+ let(:asset_group) { create(:asset_group, assets: [asset]) }
+ let(:fact) { create(:fact, predicate: 'a', object: 'TubeRack')}
+ let(:asset) { create :asset, uploaded_file: file, facts: [fact] }
+ let(:step_type) {create(:step_type, condition_groups: [condition_group]) }
+ let(:step) { create :step,
+ activity: activity,
+ state: Step::STATE_RUNNING,
+ asset_group: asset_group, step_type: step_type }
+
+ let(:condition) { create(:condition, predicate: fact.predicate, object: fact.object) }
+ let(:condition_group) { create(:condition_group, conditions: [condition]) }
+
+ let(:csv_parsed) { CSV.new(content).to_a }
+ let!(:tubes) { csv_parsed.map{|line| create(:asset, barcode: line[1]) } }
+
+ setup do
+ allow(Asset).to receive(:find_or_import_asset_with_barcode) do |barcode|
+ Asset.find_by(barcode: barcode)
+ end
+ allow(Asset).to receive(:find_or_import_assets_with_barcodes) do |barcodes|
+ Asset.where(barcode: barcodes)
+ #barcodes.map{|barcode| Asset.find_by(barcode: barcode)}
+ end
+
+ end
+
+
+ describe "when linking it with an asset" do
+ it 'adds the facts to the asset' do
+ expect(asset.facts.count).to eq(1)
+ updates = Actions::LayoutProcessor.new(asset_group: asset_group).changes
+ updates.apply(step)
+
+ asset.facts.reload
+ assets = asset.facts.with_predicate('contains').map(&:object_asset)
+ expect(assets.count).to eq(96)
+ assets.each do |a|
+ expect(a.facts.with_predicate('location').count).to eq(1)
+ expect(a.facts.with_predicate('parent').count).to eq(1)
+ expect(a.facts.with_predicate('parent').first.object_asset).to eq(asset)
+ end
+ end
+
+ describe 'with links with previous parents' do
+ let(:actual_parent) { create(:asset, uploaded_file: file, facts: [fact]) }
+ it 'removes links with the previous parents' do
+ Actions::LayoutProcessor.new(asset_group: asset_group).changes.apply(step)
+ asset.facts.reload
+ assets = asset.facts.with_predicate('contains').map(&:object_asset)
+ expect(assets.count).to eq(96)
+ assets.each do |a|
+ expect(a.facts.with_predicate('location').count).to eq(1)
+ expect(a.facts.with_predicate('parent').count).to eq(1)
+ expect(a.facts.with_predicate('parent').first.object_asset).to eq(asset)
+ end
+
+ asset_group = AssetGroup.create(assets: [actual_parent])
+ another_step = Step.new(
+ activity: activity,
+ asset_group: asset_group, step_type: step_type,
+ state: Step::STATE_RUNNING
+ )
+ Actions::LayoutProcessor.new(asset_group: asset_group).changes.apply(another_step)
+
+ assets = asset.facts.with_predicate('contains').map(&:object_asset)
+ expect(assets.count).to eq(0)
+
+ assets = actual_parent.facts.with_predicate('contains').map(&:object_asset)
+ expect(assets.count).to eq(96)
+ assets.each do |a|
+ expect(a.facts.with_predicate('location').count).to eq(1)
+ expect(a.facts.with_predicate('parent').count).to eq(1)
+ expect(a.facts.with_predicate('parent').first.object_asset).to eq(actual_parent)
+ end
+ end
+ end
+
+ describe 'with empty slots in the layout .csv' do
+ let(:num_empty) { 3 }
+ let(:start_pos) { 0 }
+ let(:content) {
+ add_empty_slots(File.open('test/data/layout.csv').read, num_empty, start_pos)
+ }
+ def add_empty_slots(content, num_empty, start_pos=0)
+ csv = CSV.new(content).to_a
+ num_empty.times do |i|
+ csv[start_pos + i][1] = 'No Read'
+ end
+ csv.map do |line|
+ line.join(',')
+ end.join("\n")
+ end
+
+ it 'adds the new facts to the asset and removes the old ones' do
+ expect(asset.facts.count).to eq(1)
+ Actions::LayoutProcessor.new(asset_group: asset_group).changes.apply(step)
+
+ asset.facts.reload
+ assets = asset.facts.with_predicate('contains').map(&:object_asset)
+ expect(assets.count).to eq(96 - num_empty)
+ assets.each_with_index do |a, idx|
+ if (idx < start_pos) || (idx >= start_pos + num_empty)
+ expect(a.facts.with_predicate('location').count).to eq(1)
+ expect(a.facts.with_predicate('parent').count).to eq(1)
+ expect(a.facts.with_predicate('parent').first.object_asset).to eq(asset)
+ end
+ end
+ end
+ end
+ end
+
+end
diff --git a/spec/lib/actions/plate_transfer_spec.rb b/spec/lib/actions/plate_transfer_spec.rb
index 922a5917..849f32ac 100644
--- a/spec/lib/actions/plate_transfer_spec.rb
+++ b/spec/lib/actions/plate_transfer_spec.rb
@@ -61,6 +61,18 @@
created_well = updates.to_h[:add_facts].select{|t| (t[1] == 'location')}.first[0]
expect(updates.to_h[:add_facts].select{|t| (t[0]==created_well) && (t[1]=='aliquotType')}.first[2]).to eq('DNA')
end
+ it 'copies all the study names at source into the plate' do
+ source = create :plate
+ destination = create :plate
+ study = 'A study'
+ study2 = 'Another study'
+ source.facts << create(:fact, predicate: 'study_name', object: study, literal: true)
+ source.facts << create(:fact, predicate: 'study_name', object: study2, literal: true)
+
+ updates = Actions::PlateTransfer.transfer_plates(source, destination, FactChanges.new)
+ expect(updates.to_h[:add_facts]).to include([destination.uuid, 'study_name', study])
+ expect(updates.to_h[:add_facts]).to include([destination.uuid, 'study_name', study2])
+ end
it 'does not copy ignored predicates' do
source = create :asset
well = create(:asset)
diff --git a/spec/lib/actions/racking_spec.rb b/spec/lib/actions/racking_spec.rb
deleted file mode 100644
index b2bd9760..00000000
--- a/spec/lib/actions/racking_spec.rb
+++ /dev/null
@@ -1,216 +0,0 @@
-require 'rails_helper'
-require 'actions/racking'
-
-RSpec.describe Actions::Racking do
- let(:content) { File.open('test/data/layout.csv').read }
- let(:file) { create(:uploaded_file, data: content )}
- let(:activity) { create(:activity) }
- let(:asset_group) { create(:asset_group, assets: [asset]) }
- let(:fact) { create(:fact, predicate: 'a', object: 'TubeRack')}
- let(:asset) { create :asset, uploaded_file: file, facts: [fact] }
- let(:step_type) {create(:step_type, condition_groups: [condition_group]) }
- let(:step) { create :step,
- activity: activity,
- state: Step::STATE_RUNNING,
- asset_group: asset_group, step_type: step_type }
-
- let(:condition) { create(:condition, predicate: fact.predicate, object: fact.object) }
- let(:condition_group) { create(:condition_group, conditions: [condition]) }
-
- include Actions::Racking
-
- setup do
- allow(Asset).to receive(:find_or_import_asset_with_barcode) do |barcode|
- Asset.find_by(barcode: barcode)
- end
- end
-
- shared_examples_for 'rack_layout' do
- describe "when linking it with an asset" do
- it 'adds the facts to the asset' do
- expect(asset.facts.count).to eq(1)
- updates = send(method, asset_group)
- updates.apply(step)
-
- asset.facts.reload
- assets = asset.facts.with_predicate('contains').map(&:object_asset)
- expect(assets.count).to eq(96)
- assets.each do |a|
- expect(a.facts.with_predicate('location').count).to eq(1)
- expect(a.facts.with_predicate('parent').count).to eq(1)
- expect(a.facts.with_predicate('parent').first.object_asset).to eq(asset)
- end
- end
-
- describe 'with links with previous parents' do
- let(:actual_parent) { create(:asset, uploaded_file: file, facts: [fact]) }
- it 'removes links with the previous parents' do
- send(method, asset_group).apply(step)
- asset.facts.reload
- assets = asset.facts.with_predicate('contains').map(&:object_asset)
- expect(assets.count).to eq(96)
- assets.each do |a|
- expect(a.facts.with_predicate('location').count).to eq(1)
- expect(a.facts.with_predicate('parent').count).to eq(1)
- expect(a.facts.with_predicate('parent').first.object_asset).to eq(asset)
- end
-
- asset_group = AssetGroup.create(assets: [actual_parent])
- another_step = Step.new(
- activity: activity,
- asset_group: asset_group, step_type: step_type,
- state: Step::STATE_RUNNING
- )
- send(method, asset_group).apply(another_step)
-
- assets = asset.facts.with_predicate('contains').map(&:object_asset)
- expect(assets.count).to eq(0)
-
- assets = actual_parent.facts.with_predicate('contains').map(&:object_asset)
- expect(assets.count).to eq(96)
- assets.each do |a|
- expect(a.facts.with_predicate('location').count).to eq(1)
- expect(a.facts.with_predicate('parent').count).to eq(1)
- expect(a.facts.with_predicate('parent').first.object_asset).to eq(actual_parent)
- end
- end
- end
-
- describe 'with empty slots in the layout .csv' do
- let(:num_empty) { 3 }
- let(:start_pos) { 0 }
- let(:content) {
- add_empty_slots(File.open('test/data/layout.csv').read, num_empty, start_pos)
- }
- def add_empty_slots(content, num_empty, start_pos=0)
- csv = CSV.new(content).to_a
- num_empty.times do |i|
- csv[start_pos + i][1] = 'No Read'
- end
- csv.map do |line|
- line.join(',')
- end.join("\n")
- end
-
- it 'adds the new facts to the asset and removes the old ones' do
- expect(asset.facts.count).to eq(1)
- send(method, asset_group).apply(step)
-
- asset.facts.reload
- assets = asset.facts.with_predicate('contains').map(&:object_asset)
- expect(assets.count).to eq(96 - num_empty)
- assets.each_with_index do |a, idx|
- if (idx < start_pos) || (idx >= start_pos + num_empty)
- expect(a.facts.with_predicate('location').count).to eq(1)
- expect(a.facts.with_predicate('parent').count).to eq(1)
- expect(a.facts.with_predicate('parent').first.object_asset).to eq(asset)
- end
- end
- end
-
- end
-
- end
- end
-
-
- describe '#fact_changes_for_rack_when_unracking_tubes' do
- before do
- @tubes = 15.times.map do |line|
- create(:asset)
- end
- @tubes.each do |tube|
- asset.facts << create(:fact, predicate: 'contains', object_asset: tube)
- end
- end
- it 'removes all the different studies for this rack when all tubes go out' do
- @tubes.first.facts << create(:fact, predicate: 'study_name', object: 'STDY2')
- @tubes.each_with_index do |tube, idx|
- tube.facts << create(:fact, predicate: 'study_name', object: 'STDY1') unless idx == 0
- end
- updates = fact_changes_for_rack_when_unracking_tubes(asset, @tubes)
- expect(updates.to_h[:remove_facts].select do |triple|
- triple[1]=='study_name'
- end.map{|triple| triple[2]}.sort).to eq(['STDY1', 'STDY2'])
- end
-
- it 'removes the purpose when all tubes go out' do
- asset.facts << create(:fact, predicate: 'purpose', object: 'DNA Stock Plate')
- @tubes.first.facts << create(:fact, predicate: 'aliquotType', object: 'DNA')
- updates = fact_changes_for_rack_when_unracking_tubes(asset, @tubes)
- expect(updates.to_h[:remove_facts].select do |triple|
- triple[1]=='purpose'
- end.map{|triple| triple[2]}.sort).to eq(['DNA Stock Plate'])
- end
-
- it 'only returns the studies of the tubes that are going to be removed' do
- @tubes.first.facts << create(:fact, predicate: 'study_name', object: 'STDY2')
- tubes2 = @tubes.each_with_index.map do |tube, idx|
- unless idx == 0
- tube.facts << create(:fact, predicate: 'study_name', object: 'STDY1')
- tube
- end
- end.compact
-
- updates = fact_changes_for_rack_when_unracking_tubes(asset, tubes2)
- expect(updates.to_h[:remove_facts].select do |triple|
- triple[1]=='study_name'
- end.map{|triple| triple[2]}.sort).to eq(['STDY1'])
- end
- end
-
-
- describe '#fact_changes_for_rack_when_racking_tubes' do
- before do
- @tubes = 15.times.map do |line|
- create(:asset)
- end
- end
- it 'returns all the different studies for this rack' do
- @tubes.first.facts << create(:fact, predicate: 'study_name', object: 'STDY2')
- @tubes.each_with_index do |tube, idx|
- tube.facts << create(:fact, predicate: 'study_name', object: 'STDY1') unless idx == 0
- end
-
- updates = fact_changes_for_rack_when_racking_tubes(asset, @tubes)
- expect(updates.to_h[:add_facts].select do |triple|
- triple[1]=='study_name'
- end.map{|triple| triple[2]}.sort).to eq(['STDY1', 'STDY2'])
- end
- it 'generates the DNA stock plate purpose' do
- @tubes.each_with_index do |tube, idx|
- tube.facts << create(:fact, predicate: 'aliquotType', object: 'DNA') unless idx == 0
- end
- updates = fact_changes_for_rack_when_racking_tubes(asset, @tubes)
- expect(updates.to_h[:add_facts].select do |triple|
- triple[1]=='purpose'
- end.first[2]).to eq('DNA Stock Plate')
- end
- it 'generates the RNA stock plate purpose' do
- @tubes.each_with_index do |tube, idx|
- tube.facts << create(:fact, predicate: 'aliquotType', object: 'RNA') unless idx == 0
- end
- updates = fact_changes_for_rack_when_racking_tubes(asset, @tubes)
- expect(updates.to_h[:add_facts].select do |triple|
- triple[1]=='purpose'
- end.first[2]).to eq('RNA Stock Plate')
- end
- end
-
- describe '#rack_layout' do
- before do
- csv = CSV.new(File.open('test/data/layout.csv').read).to_a
- @tubes = csv.map do |line|
- create(:asset, barcode: line[1])
- end
- end
- let(:method) { :rack_layout }
- it_behaves_like('rack_layout')
- end
-
- describe '#rack_layout_creating_tubes' do
- let(:method) { :rack_layout_creating_tubes }
- it_behaves_like('rack_layout')
- end
-
-end
diff --git a/spec/lib/changes_support/callbacks_spec.rb b/spec/lib/changes_support/callbacks_spec.rb
new file mode 100644
index 00000000..774c4204
--- /dev/null
+++ b/spec/lib/changes_support/callbacks_spec.rb
@@ -0,0 +1,61 @@
+require 'rails_helper'
+
+RSpec.describe 'ChangesSuppport::Callbacks' do
+ context 'with a FactChanges object' do
+ before do
+ FactChanges.clear_all_callbacks!
+ FactChanges.on_change_predicate('add_facts', 'color', Proc.new{|fact, updates|
+ spy_instance.my_method(fact, updates)
+ })
+ end
+
+
+ let(:updates) { FactChanges.new }
+ let(:asset) { create :asset }
+ let(:step) { create :step }
+
+ context 'when I have defined a callback on adding a property' do
+
+ before do
+ end
+ context 'when I add a property that matches the condition of my callback' do
+ before do
+ updates.add(asset, 'color', 'Red')
+ end
+ context 'and then I apply my changes' do
+ let(:spy_instance) { spy('callback_method')}
+
+ it 'runs the callback defined before' do
+ updates.apply(step)
+ expect(spy_instance).to have_received(:my_method).with({
+ asset: asset, predicate: 'color', object: 'Red', literal: true}, updates)
+ end
+ it 'also runs the callback again if I change using other object' do
+ updates.apply(step)
+ updates2 = FactChanges.new
+ updates2.add(asset, 'color', 'Blue')
+ updates2.apply(step)
+ expect(spy_instance).to have_received(:my_method).twice
+ end
+
+ it 'runs as many times as the event happens' do
+ updates.add(asset, 'color', 'Green')
+ updates.add(asset, 'name', 'Hulk')
+ updates.add(asset, 'is', 'Not happy')
+ updates.add(asset, 'color', 'Yellow')
+ updates.add(asset, 'is', 'Angry')
+ updates.apply(step)
+ expect(spy_instance).to have_received(:my_method).with({
+ asset: asset, predicate: 'color', object: 'Green', literal: true}, updates).exactly(1).times
+ expect(spy_instance).to have_received(:my_method).with({
+ asset: asset, predicate: 'color', object: 'Red', literal: true}, updates).exactly(1).times
+ expect(spy_instance).to have_received(:my_method).with({
+ asset: asset, predicate: 'color', object: 'Yellow', literal: true}, updates).exactly(1).times
+ expect(spy_instance).to have_received(:my_method).exactly(3).times
+
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/fact_changes_initializers_spec.rb b/spec/lib/fact_changes_initializers_spec.rb
new file mode 100644
index 00000000..57381112
--- /dev/null
+++ b/spec/lib/fact_changes_initializers_spec.rb
@@ -0,0 +1,66 @@
+require 'rails_helper'
+require 'fact_changes'
+require 'fact_changes_initializers'
+
+RSpec.describe 'FactChangesInitializers' do
+
+ context 'Callbacks' do
+ before do
+ FactChanges.clear_all_callbacks!
+ FactChangesInitializers.setup_changes_callbacks!
+ end
+
+ let(:updates) { FactChanges.new }
+ let(:inference) { Step.new }
+ let(:aliquots) { ['DNA', 'RNA', 'other'] }
+ let(:rack) { create :tube_rack }
+
+ context 'when changing aliquotType' do
+ context 'when adding the aliquot type' do
+ it 'adds the plate purpose' do
+ aliquots.each do |aliquot|
+ purpose = FactChangesInitializers::Callbacks.purpose_for_aliquot(aliquot)
+ updates.add(rack, 'aliquotType', aliquot)
+ expect{ updates.apply(inference) }.to change{
+ Fact.where(asset: rack, predicate: 'purpose', object: purpose).count
+ }.from(0).to(1)
+ end
+ end
+ end
+
+ context 'when removing the aliquot type' do
+ it 'removes the plate purpose' do
+ aliquots.each do |aliquot|
+ purpose = FactChangesInitializers::Callbacks.purpose_for_aliquot(aliquot)
+ rack.facts << create(:fact, predicate: 'purpose', object: purpose, literal: true)
+ rack.facts << create(:fact, predicate: 'aliquotType', object: aliquot, literal: true)
+ updates.remove_where(rack, 'aliquotType', aliquot)
+ expect{ updates.apply(inference) }.to change{
+ Fact.where(asset: rack, predicate: 'purpose', object: purpose).count
+ }.from(1).to(0)
+ end
+ end
+ end
+ end
+ context 'when changing barcode' do
+ let(:barcode) {"1234"}
+
+ context 'when adding a barcode fact' do
+ let(:asset) { create :asset}
+
+ it 'sets the barcode into the barcode column of the asset' do
+ updates.add(asset, 'barcode', barcode)
+ expect{updates.apply(inference)}.to change{asset.barcode}.from(nil).to(barcode)
+ end
+ end
+ context 'when removing a barcode fact' do
+ let(:asset) { create :asset, barcode: barcode}
+
+ it 'removes the barcode from the column of the asset' do
+ updates.remove_where(asset, 'barcode', barcode)
+ expect{updates.apply(inference)}.to change{asset.barcode}.from(barcode).to(nil)
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/fact_changes_spec.rb b/spec/lib/fact_changes_spec.rb
index 265dbcda..0651efc4 100644
--- a/spec/lib/fact_changes_spec.rb
+++ b/spec/lib/fact_changes_spec.rb
@@ -208,6 +208,13 @@
end
end
describe '#apply' do
+ context 'when using a changed step' do
+ it 'will save the step during the transaction' do
+ changes = FactChanges.new
+ changes.add(asset1, property, value)
+ expect{changes.apply(Step.new)}.to change{Step.count}.from(0).to(1)
+ end
+ end
context 'when the object contains errors' do
it 'stores the messages and throws an exception' do
updates1.set_errors(["hi"])
@@ -273,6 +280,23 @@
expect(asset1.facts.count).to eq(1)
expect(asset1.facts.first.is_remote?).to eq(true)
end
+ context 'when there are more than one value of the previous fact' do
+ it 'removes the previous facts and adds the new one' do
+ test1 = create :asset
+ test2 = create :asset
+ test3 = create :asset
+ test4 = create :asset
+ test1.facts << create(:fact, predicate: relation, object_asset: test2, literal: false)
+ test1.facts << create(:fact, predicate: relation, object_asset: test3, literal: false)
+ updates1.replace_remote(test1, relation, test4)
+ expect{
+ updates1.apply(step)
+ }.to change{test1.facts.count}.by(-1)
+ .and change{Operation.count}.by(3)
+ expect(test1.facts.count).to eq(1)
+ expect(test1.facts.first.is_remote?).to eq(true)
+ end
+ end
end
context 'with remove' do
it 'removes an already existing fact' do
@@ -621,6 +645,57 @@
end
+ describe '#add_assets_to_group' do
+ let(:asset1) { create(:asset) }
+ let(:asset2) { create(:asset) }
+ let(:asset_group) { create :asset_group }
+ let(:updates) { FactChanges.new }
+ let(:expectancy) {
+ [{asset_group: asset_group, asset: asset1},
+ {asset_group: asset_group, asset: asset2}
+ ]
+ }
+
+ it 'add assets to a group' do
+ expect{
+ updates.add_assets_to_group(asset_group, [asset1, asset2])
+ }.to change{updates.assets_to_add.to_a}.from([]).to(expectancy)
+ end
+
+ context 'when receiving an empty list' do
+ it 'does nothing' do
+ expect{
+ updates.add_assets_to_group(asset_group, [])
+ }.not_to change{updates.assets_to_add.to_a}
+ end
+ end
+ end
+
+ describe '#remove_assets_from_group' do
+ let(:list) { 4.times.map{ create(:asset, :with_barcode) } }
+ let(:asset_group) { create(:asset_group, assets: list) }
+ let(:updates) { FactChanges.new }
+ let(:expectancy) {
+ [{asset_group: asset_group, asset: asset1},
+ {asset_group: asset_group, asset: asset2}
+ ]
+ }
+
+ it 'remove assets from a group' do
+ expect{
+ updates.remove_assets_from_group(asset_group, [asset1, asset2])
+ }.to change{updates.assets_to_remove.to_a}.from([]).to(expectancy)
+ end
+
+ context 'when receiving an empty list' do
+ it 'does nothing' do
+ expect{
+ updates.remove_assets_from_group(asset_group, [])
+ }.not_to change{updates.assets_to_remove.to_a}
+ end
+ end
+ end
+
describe '#merge' do
it 'returns another FactChanges object' do
diff --git a/spec/lib/importers/barcodes_importer_spec.rb b/spec/lib/importers/barcodes_importer_spec.rb
new file mode 100644
index 00000000..35c38c93
--- /dev/null
+++ b/spec/lib/importers/barcodes_importer_spec.rb
@@ -0,0 +1,74 @@
+require 'rails_helper'
+require 'remote_assets_helper'
+require 'importers/barcodes_importer'
+require 'fact_changes'
+
+RSpec.describe Importers::BarcodesImporter do
+ include RemoteAssetsHelper
+ let(:barcodes) { 4.times.map{generate(:barcode).to_s}}
+ let(:remote_assets) { barcodes.map{|barcode| build_remote_tube(barcode: barcode)}}
+
+ before do
+ stub_client_with_assets(SequencescapeClient, remote_assets)
+ end
+
+ context '#initialize' do
+ it 'loads a list of barcodes' do
+ instance = Importers::BarcodesImporter.new(barcodes)
+ expect(instance.barcodes).to eq(barcodes)
+ end
+ end
+ context '#process' do
+ it 'returns a FactChanges instance' do
+ instance = Importers::BarcodesImporter.new(barcodes)
+ expect(instance.process.class).to eq(FactChanges)
+ end
+ it 'refreshes all barcodes that are remote' do
+ asset1 = create(:asset, barcode: generate(:barcode), remote_digest: '1234')
+ barcodes_and_local = [barcodes, asset1.barcode].flatten
+ instance = Importers::BarcodesImporter.new(barcodes_and_local)
+ allow(instance).to receive(:refresh_assets)
+ instance.process
+ expect(instance).to have_received(:refresh_assets).with([asset1])
+ end
+ it 'imports all barcodes not present in database' do
+ asset1 = create(:asset, barcode: generate(:barcode), remote_digest: '1234')
+ barcodes_and_local = [barcodes, asset1.barcode].flatten
+ instance = Importers::BarcodesImporter.new(barcodes_and_local)
+ allow(instance).to receive(:import_barcodes)
+ allow(instance).to receive(:refresh_assets)
+ instance.process
+ expect(instance).to have_received(:import_barcodes).with(barcodes)
+ expect(instance).to have_received(:refresh_assets).with([asset1])
+ end
+ end
+
+ context '#process!' do
+ it 'creates the new assets' do
+ instance = Importers::BarcodesImporter.new(barcodes)
+ expect{
+ instance.process!
+ }.to change{Asset.count}.from(0).to(4)
+ end
+ end
+
+ context '#changed_remote?' do
+ let(:instance) { Importers::BarcodesImporter.new([barcodes.first]) }
+ let(:remote_asset) { remote_assets.first }
+ it 'returns false when the asset is not remote' do
+ plate = create :plate, remote_digest: nil, uuid: remote_asset.uuid, barcode: barcodes.first
+ expect(instance.changed_remote?(plate)).to be_truthy
+ end
+ it 'detects the change when the stored digest is different from the actual' do
+ plate = create :plate, remote_digest: "1234", uuid: remote_asset.uuid, barcode: barcodes.first
+ expect(instance.changed_remote?(plate)).to be_truthy
+ end
+ it 'does not detect change when stored digest is equal to the actual' do
+ plate = create :plate, uuid: remote_asset.uuid, barcode: barcodes.first
+ digest = Importers::Concerns::Annotator.new(plate, remote_asset).digest_for_remote_asset
+ plate.update_attributes(remote_digest: digest)
+ expect(instance.changed_remote?(plate)).to be_falsy
+ end
+ end
+
+end
diff --git a/spec/lib/importers/concerns/annotator_spec.rb b/spec/lib/importers/concerns/annotator_spec.rb
new file mode 100644
index 00000000..328e21bf
--- /dev/null
+++ b/spec/lib/importers/concerns/annotator_spec.rb
@@ -0,0 +1,136 @@
+require 'rails_helper'
+require 'remote_assets_helper'
+require 'importers/concerns/annotator'
+
+RSpec.describe 'Importers::Concerns::Annotator' do
+ include RemoteAssetsHelper
+ let(:plate) { create :plate }
+ let(:remote_asset) { build_remote_plate }
+ let(:barcodes) { ['1', '2']}
+ let(:instance) { Importers::Concerns::Annotator.new(plate, remote_asset) }
+
+ context '#update_asset_from_remote_asset' do
+ let(:remote_asset) { build_remote_plate }
+
+
+ it 'updates the information from the remote asset into the local asset' do
+ updates = instance.update_asset_from_remote_asset
+ expect(updates.to_h[:add_facts].select{|t| t[1]=='a' && t[2]=='Well'}.length).not_to eq(0)
+ end
+ end
+
+ context '#update_digest_with_remote' do
+ it 'updates the digest with the remote asset provided' do
+ digest = instance.digest_for_remote_asset
+ updates = instance.update_digest_with_remote
+ expect(updates.to_h[:add_facts].select{|t| t[1]=='remote_digest'}).to eq([[plate.uuid, 'remote_digest', digest]])
+ end
+ end
+
+ context '#sequencescape_type_for_asset' do
+ it 'returns the class from the Sequencescape remote asset' do
+ expect(instance.sequencescape_type_for_asset).to eq('Plate')
+ end
+ end
+
+ context '#is_not_a_sample_tube?' do
+ let(:remote_tube) { build_remote_tube }
+ it 'returns false if the element is a sample tube' do
+ instance = Importers::Concerns::Annotator.new(plate, remote_tube)
+ expect(instance.is_not_a_sample_tube?).to be_falsy
+ end
+ it 'returns true if the element is not a sample Tube' do
+ instance = Importers::Concerns::Annotator.new(plate, remote_asset)
+ expect(instance.is_not_a_sample_tube?).to be_truthy
+ end
+ end
+
+ context '#annotate_wells' do
+ let(:plate) { create :plate }
+
+ it 'replicates wells information from the remote asset into the local plate' do
+ updates = instance.annotate_wells(plate, remote_asset)
+ expect(updates.to_h[:create_assets]).not_to be_nil
+ expect(updates.to_h[:create_assets]).to eq(remote_asset.wells.map(&:uuid))
+ wells_defs = updates.to_h[:add_facts].select{|t| t[1]=='a' && t[2] == 'Well'}
+ expect(wells_defs.count).to eq(remote_asset.wells.count)
+ end
+
+ it 'does not create new wells if they already exist in local' do
+ remote_asset.wells.each do |w|
+ create :asset, uuid: w.uuid
+ end
+ updates = instance.annotate_wells(plate, remote_asset)
+ expect(updates.to_h[:create_assets]).to be_nil
+ end
+
+ it 'removes any remote wells not present anymore in the remote asset' do
+ well1 = create :well
+ plate.facts << create(:fact, predicate: 'contains', object_asset: well1, is_remote?: true, literal: false)
+ updates = instance.annotate_wells(plate, remote_asset)
+ expect(updates.to_h[:remove_facts]).to include([plate.uuid, 'contains', well1.uuid])
+ end
+
+ it 'does not remove any well that is not remote' do
+ well1 = create :well
+ plate.facts << create(:fact, predicate: 'contains', object_asset: well1, is_remote?: false, literal: false)
+ updates = instance.annotate_wells(plate, remote_asset)
+ expect(updates.to_h[:remove_facts]).to be_nil
+ end
+
+ it 'does not remove old local facts not present in the well info' do
+ well1 = create :well, uuid: remote_asset.wells.first.uuid
+ well1.facts << create(:fact, predicate: 'speed', object: 'quick', literal: true, is_remote?: false)
+ updates = instance.annotate_wells(plate, remote_asset)
+ expect(updates.to_h[:remove_facts]).to be_nil
+ end
+
+ it 'removes old remote facts not present anymore in the new well info' do
+ well1 = create :well, uuid: remote_asset.wells.first.uuid
+ well1.facts << create(:fact, predicate: 'speed', object: 'quick', literal: true, is_remote?: true)
+ updates = instance.annotate_wells(plate, remote_asset)
+ expect(updates.to_h[:remove_facts]).to include([well1.uuid, 'speed', 'quick'])
+ end
+ end
+
+ context '#annotate_study_name' do
+ context 'when it is a plate' do
+ let(:plate) { create :plate }
+ it 'calls annotate_study_name_from_aliquots for each well' do
+ allow(instance).to receive(:annotate_study_name_from_aliquots)
+ instance.annotate_study_name(plate, remote_asset)
+ expect(instance).to have_received(:annotate_study_name_from_aliquots).exactly(remote_asset.wells.count)
+ end
+ end
+ context 'when it is not a plate' do
+ let(:remote_asset) { build_remote_tube }
+ let(:tube) { create :tube }
+ it 'calls annotate_study_name_from_aliquots once' do
+ allow(instance).to receive(:annotate_study_name_from_aliquots)
+ instance.annotate_study_name(tube, remote_asset)
+ expect(instance).to have_received(:annotate_study_name_from_aliquots).once
+ end
+ end
+ end
+
+ context '#annotate_study_name_from_aliquots' do
+ let(:remote_asset) { build_remote_tube }
+ let(:tube) { create :tube }
+
+ it 'annotates the study information in the asset' do
+ updates = instance.annotate_study_name_from_aliquots(tube, remote_asset)
+ expect(updates.to_h[:add_facts].select{|t| t[1]=='study_uuid'}.length).not_to eq(0)
+ end
+ end
+
+ context '#annotate_container' do
+ let(:remote_asset) { build_remote_tube }
+ let(:tube) { create :tube }
+
+ it 'annotates the container information in the asset' do
+ updates = instance.annotate_container(tube, remote_asset)
+ expect(updates.to_h[:add_facts].select{|t| t[1]=='sample_uuid'}.length).not_to eq(0)
+ end
+ end
+
+end
diff --git a/spec/lib/importers/concerns/changes_spec.rb b/spec/lib/importers/concerns/changes_spec.rb
new file mode 100644
index 00000000..2984b6a0
--- /dev/null
+++ b/spec/lib/importers/concerns/changes_spec.rb
@@ -0,0 +1,72 @@
+require 'rails_helper'
+require 'remote_assets_helper'
+require 'importers/barcodes_importer'
+
+RSpec.describe 'Importers::Concerns::Changes' do
+ include RemoteAssetsHelper
+ context '#refresh_assets' do
+ let(:barcodes) { []}
+ let(:instance) { Importers::BarcodesImporter.new(barcodes) }
+ let(:uuids) { assets.map(&:uuid) }
+ let(:assets) { [ create(:plate), create(:tube), create(:plate), create(:well)]}
+ let(:remote_assets) {[build_remote_plate, build_remote_tube, build_remote_plate, build_remote_well('B1')]}
+
+ before do
+ assets.zip(remote_assets) do |a, remote|
+ allow(remote).to receive(:uuid).and_return(a.uuid)
+ end
+ allow(SequencescapeClient).to receive(:find_by_uuid).with(assets.map(&:uuid)).and_return(remote_assets)
+ end
+
+ it 'refreshes the contents of the assets' do
+ updates = instance.refresh_assets(assets)
+ expect(updates.to_h[:add_facts].detect{|t|t[1]=='sample_uuid'}).not_to be_nil
+ expect(updates.to_h[:add_facts].map{|t| t[0]}.uniq).to include(*uuids)
+ end
+
+ context 'when receiving an empty list' do
+ it 'does nothing' do
+ updates = instance.refresh_assets([])
+ expect(updates.to_h).to eq({})
+ end
+ end
+ end
+
+ context '#import_barcodes' do
+ let(:instance) { Importers::BarcodesImporter.new(barcodes) }
+
+ let(:remote_assets) {
+ [
+ build_remote_tube(barcode_objs[0]),
+ build_remote_plate(barcode_objs[1]),
+ build_remote_tube(barcode_objs[2]),
+ build_remote_plate(barcode_objs[3])
+ ]
+ }
+ let(:uuids) { remote_assets.map(&:uuid) }
+ let(:barcode_objs) {
+ 4.times.map { {labware_barcode: {'human_barcode' => generate(:barcode)}} }
+ }
+ let(:barcodes) {
+ remote_assets.map{|a| a.labware_barcode['human_barcode']}
+ }
+
+ before do
+ allow(SequencescapeClient).to receive(:get_remote_asset).with(barcodes).and_return(remote_assets)
+ end
+
+ it 'imports the assets' do
+ updates = instance.import_barcodes(barcodes)
+ expect(updates.to_h[:add_facts].detect{|t|t[1]=='sample_uuid'}).not_to be_nil
+ expect(updates.to_h[:create_assets]).to include(*uuids)
+ end
+
+ context 'when receiving an empty list' do
+ it 'does nothing' do
+ updates = instance.import_barcodes([])
+ expect(updates.to_h).to eq({})
+ end
+ end
+
+ end
+end
diff --git a/spec/lib/importers/concerns/remote_digest_spec.rb b/spec/lib/importers/concerns/remote_digest_spec.rb
new file mode 100644
index 00000000..978abe0a
--- /dev/null
+++ b/spec/lib/importers/concerns/remote_digest_spec.rb
@@ -0,0 +1,34 @@
+require 'rails_helper'
+require 'remote_assets_helper'
+require 'importers/concerns/annotator'
+
+RSpec.describe 'Importers::Concerns::RemoteDigest' do
+ include RemoteAssetsHelper
+
+ let(:remote_asset) { build_remote_plate }
+ let(:asset) { create :asset }
+ let(:instance) { Importers::Concerns::Annotator.new(asset, remote_asset) }
+
+ context '#digest_for_remote_asset' do
+ it 'returns a string with the digest hash of the remote asset' do
+ expect(instance.digest_for_remote_asset.kind_of?(String)).to be_truthy
+ end
+ end
+
+ context '#signature_for_remote' do
+ it 'returns a string' do
+ expect(instance.signature_for_remote.kind_of?(String)).to be_truthy
+ end
+ end
+
+ context '#has_changes_between_local_and_remote?' do
+ it 'returns true if there are changes' do
+ expect(instance.has_changes_between_local_and_remote?).to be_truthy
+ end
+ it 'returns false if there are no changes' do
+ asset.update_attributes(remote_digest: instance.digest_for_remote_asset)
+ expect(instance.has_changes_between_local_and_remote?).to be_falsy
+ end
+ end
+
+end
diff --git a/spec/lib/message_processors/activity_message_processor_spec.rb b/spec/lib/message_processors/activity_message_processor_spec.rb
new file mode 100644
index 00000000..0ed98648
--- /dev/null
+++ b/spec/lib/message_processors/activity_message_processor_spec.rb
@@ -0,0 +1,36 @@
+require 'rails_helper'
+require 'message_processors/activity_message_processor'
+
+RSpec.describe MessageProcessors::ActivityMessageProcessor do
+ context 'an instance of ActivityMessageProcessor' do
+ let(:activity) { create(:activity)}
+ let(:good_message) { { activity: { id: activity.id, stepTypes: false,
+ stepsPending: false, stepsRunning: false, stepsFailed: false, stepsFinished: true
+ }
+ }.as_json
+ }
+ let(:bad_message) { { asset_group: {} } }
+ let(:mocked_redis) { double('redis') }
+ let(:channel) { double('channel', redis: mocked_redis )}
+ let(:instance) { MessageProcessors::ActivityMessageProcessor.new(channel: channel)}
+
+ context '#interested_in?' do
+ it 'returns true if is an activity message' do
+ expect(instance.interested_in?(good_message)).to be_truthy
+ end
+ it 'returns false if is not an activity message' do
+ expect(instance.interested_in?(bad_message)).to be_falsy
+ end
+ end
+ context '#process' do
+ it 'updates the configuration of elements to generate for each server message' do
+ allow(channel.redis).to receive(:hget).and_return(nil)
+ allow(channel.redis).to receive(:hset)
+ allow(channel).to receive(:params).and_return({activity_id: activity.id})
+ instance.process(good_message)
+ expect(mocked_redis).to have_received(:hset).with('activities', activity.id,
+ good_message['activity'].except('id').to_json)
+ end
+ end
+ end
+end
diff --git a/spec/lib/message_processors/asset_group_message_processor_spec.rb b/spec/lib/message_processors/asset_group_message_processor_spec.rb
new file mode 100644
index 00000000..ebdc40f1
--- /dev/null
+++ b/spec/lib/message_processors/asset_group_message_processor_spec.rb
@@ -0,0 +1,45 @@
+require 'rails_helper'
+require 'message_processors/asset_group_message_processor'
+
+RSpec.describe MessageProcessors::AssetGroupMessageProcessor do
+ context 'an instance of AssetGroupMessageProcessor' do
+ let(:channel) { double('channel')}
+ let(:barcodes) { 2.times.map{create(:tube, :with_barcode) }.map(&:barcode) }
+ let(:asset_group) { create(:asset_group)}
+ let(:good_message) { { asset_group: { id: asset_group.id, assets: barcodes }}.as_json}
+ let(:bad_message) { { asset_group: {} } }
+ let(:instance) { MessageProcessors::AssetGroupMessageProcessor.new(channel: channel)}
+
+ before do
+ allow(SequencescapeClient).to receive(:find_by_uuid).and_return(nil)
+ allow(SequencescapeClient).to receive(:get_remote_asset).and_return(nil)
+ end
+ context '#interested_in?' do
+ it 'returns true if is an asset_group message' do
+ expect(instance.interested_in?(good_message)).to be_truthy
+ end
+ it 'returns false if is not an asset_group message' do
+ expect(instance.interested_in?(bad_message)).to be_falsy
+ end
+ end
+ context '#process' do
+ context 'when receiving a new group of barcodes inside an asset group' do
+ let(:added) { 2.times.map{create(:tube, :with_barcode) } }
+ let(:removed) { 2.times.map{create(:tube, :with_barcode) } }
+ let(:kept) { 2.times.map{create(:tube, :with_barcode) } }
+ let(:new_list) {[kept, added].flatten}
+ let(:previous_list) { [removed, kept].flatten}
+ let(:assets) { new_list }
+ let(:asset_group) {create(:asset_group, assets: previous_list) }
+ let(:barcodes) { assets.map(&:barcode) }
+
+ it 'updates the contents of the group' do
+ expect{instance.process(good_message)}.to change{
+ asset_group.assets.reload
+ asset_group.assets.map(&:barcode)
+ }.from(previous_list.map(&:barcode)).to(new_list.map(&:barcode))
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/parsers/csv_layout/assets_cache_spec.rb b/spec/lib/parsers/csv_layout/assets_cache_spec.rb
new file mode 100644
index 00000000..357729d8
--- /dev/null
+++ b/spec/lib/parsers/csv_layout/assets_cache_spec.rb
@@ -0,0 +1,17 @@
+require 'rails_helper'
+require 'parsers/csv_layout/csv_parser'
+
+RSpec.describe 'Parsers::CsvLayout::AssetsCache' do
+ let(:content) { File.open('test/data/layout.csv').read }
+ let(:parser) { Parsers::CsvLayout::CsvParser.new(content) }
+ let(:csv_parsed) { CSV.new(content).to_a }
+ let!(:tubes) { csv_parsed.map{|line| create(:asset, barcode: line[1]) } }
+
+ before do
+ allow(Asset).to receive(:find_or_import_assets_with_barcodes).with(tubes.map(&:barcode)).and_return(tubes)
+ end
+ it 'performs a single request with all barcodes in the file' do
+ parser.parse
+ expect(Asset).to have_received(:find_or_import_assets_with_barcodes).with(tubes.map(&:barcode)).once
+ end
+end
diff --git a/spec/lib/parsers/csv_layout/barcode_creatable_parser_spec.rb b/spec/lib/parsers/csv_layout/barcode_creatable_parser_spec.rb
index b45b477a..8db83082 100644
--- a/spec/lib/parsers/csv_layout/barcode_creatable_parser_spec.rb
+++ b/spec/lib/parsers/csv_layout/barcode_creatable_parser_spec.rb
@@ -5,13 +5,11 @@
RSpec.describe Parsers::CsvLayout::BarcodeCreatableParser do
- before do
- allow(Asset).to receive(:find_or_import_asset_with_barcode) do |barcode|
- Asset.find_by(barcode: barcode)
- end
- end
let(:main_parser) {
main = double('parser')
+ allow(main).to receive(:get_asset_for_barcode) do |barcode|
+ Asset.find_by(barcode: barcode)
+ end
allow(main).to receive(:add_error)
allow(main).to receive(:parsed_changes).and_return(FactChanges.new)
allow(main).to receive(:components).and_return({
diff --git a/spec/lib/parsers/csv_layout/barcode_parser_spec.rb b/spec/lib/parsers/csv_layout/barcode_parser_spec.rb
index 762dcb5d..6705a136 100644
--- a/spec/lib/parsers/csv_layout/barcode_parser_spec.rb
+++ b/spec/lib/parsers/csv_layout/barcode_parser_spec.rb
@@ -5,13 +5,11 @@
RSpec.describe Parsers::CsvLayout::BarcodeParser do
- before do
- allow(Asset).to receive(:find_or_import_asset_with_barcode) do |barcode|
- Asset.find_by(barcode: barcode)
- end
- end
let(:main_parser) {
main = double('parser')
+ allow(main).to receive(:get_asset_for_barcode) do |barcode|
+ Asset.find_by(barcode: barcode)
+ end
allow(main).to receive(:add_error)
allow(main).to receive(:components).and_return({
barcode_validator: ValidatorSuccess
diff --git a/spec/lib/parsers/csv_layout/csv_parser_spec.rb b/spec/lib/parsers/csv_layout/csv_parser_spec.rb
index df78b933..2a3dd7a2 100644
--- a/spec/lib/parsers/csv_layout/csv_parser_spec.rb
+++ b/spec/lib/parsers/csv_layout/csv_parser_spec.rb
@@ -18,8 +18,8 @@
asset_group: asset_group, step_type: step_type }
setup do
- allow(Asset).to receive(:find_or_import_asset_with_barcode) do |barcode|
- Asset.find_by(barcode: barcode)
+ allow(Asset).to receive(:find_or_import_assets_with_barcodes) do |barcodes|
+ barcodes.map{|barcode| Asset.find_by(barcode: barcode) }
end
@content = File.open('test/data/layout.csv').read
diff --git a/spec/lib/parsers/csv_layout/line_parser_spec.rb b/spec/lib/parsers/csv_layout/line_parser_spec.rb
index a9cd3d14..47d2f81f 100644
--- a/spec/lib/parsers/csv_layout/line_parser_spec.rb
+++ b/spec/lib/parsers/csv_layout/line_parser_spec.rb
@@ -9,6 +9,11 @@
let(:main_parser) {
main = double('parser')
+
+ allow(main).to receive(:get_asset_for_barcode) do |barcode|
+ Asset.find_by(barcode: barcode)
+ end
+
allow(main).to receive(:components).and_return({
location_validator: Parsers::CsvLayout::Validators::LocationValidator,
barcode_validator: Parsers::CsvLayout::Validators::AnyBarcodeValidator,
@@ -27,9 +32,6 @@
before do
@asset1 = create :asset, barcode: 'F1234'
@asset2 = create :asset, barcode: 'F5678'
- allow(Asset).to receive(:find_or_import_asset_with_barcode) do |barcode|
- Asset.find_by(barcode: barcode)
- end
end
context '#initialize' do
diff --git a/spec/lib/sequencescape_client_spec.rb b/spec/lib/sequencescape_client_spec.rb
new file mode 100644
index 00000000..ffea24a4
--- /dev/null
+++ b/spec/lib/sequencescape_client_spec.rb
@@ -0,0 +1,101 @@
+require 'rails_helper'
+require 'sequencescape_client'
+require 'remote_assets_helper'
+
+RSpec.describe 'SequencescapeClient' do
+ include RemoteAssetsHelper
+ context '#get_remote_asset' do
+ context 'when asked for a list of asset uuids' do
+
+ let(:assets) {
+ [
+ build_remote_tube(barcode_objs[0]),
+ build_remote_plate(barcode_objs[1]),
+ build_remote_tube(barcode_objs[2]),
+ build_remote_plate(barcode_objs[3])
+ ]
+ }
+ let(:barcode_objs) {
+ 4.times.map { {labware_barcode: {'human_barcode' => generate(:barcode)}} }
+ }
+ let(:barcodes) {
+ assets.map{|a| a.labware_barcode['human_barcode']}
+ }
+ let(:params) { {barcode: barcodes}}
+ before do
+ allow(SequencescapeClientV2::Plate).to receive(:where).with(params).and_return([assets[1], assets[3]])
+ allow(SequencescapeClientV2::Tube).to receive(:where).with(params).and_return([assets[0], assets[2]])
+ end
+
+ it 'returns the matched elements in response sorted in the same order of the query' do
+ expect(SequencescapeClient.get_remote_asset(barcodes)).to eq(assets)
+ end
+ end
+ end
+
+ context '#find_by_uuid' do
+ context 'when asked for a list of asset uuids' do
+ let(:assets) {
+ [create(:tube), create(:plate), create(:tube), create(:well)]
+ }
+ let(:uuids) { assets.map(&:uuid)}
+ let(:params) { {uuid: uuids}}
+ before do
+ allow(SequencescapeClientV2::Plate).to receive(:where).with(params).and_return([assets[1]])
+ allow(SequencescapeClientV2::Tube).to receive(:where).with(params).and_return([assets[0], assets[2]])
+ allow(SequencescapeClientV2::Well).to receive(:where).with(params).and_return([assets[3]])
+ end
+
+ it 'returns the matched elements in response sorted in the same order of the query' do
+ expect(SequencescapeClient.find_by_uuid(uuids)).to eq(assets)
+ end
+ end
+ end
+
+ context '#find_by' do
+ let(:assets) { 3.times.map{ create(:asset) }}
+ let(:uuids) { assets.map(&:uuid) }
+ let(:params) { { uuid: uuids } }
+ let(:tube_resource) { double('tube_resource')}
+ let(:plate_resource) { double('plate_resource')}
+ let(:well_resource) { double('well_resource')}
+ let(:resources) { [plate_resource, tube_resource, well_resource]}
+
+ before do
+ allow(tube_resource).to receive(:where).with(params).and_return(assets)
+ allow(plate_resource).to receive(:where)
+ allow(well_resource).to receive(:where)
+ end
+
+ it 'performs one request for each asset to match all possible elements' do
+ expect(SequencescapeClient.find_by(resources, params)).to eq(assets)
+ expect(tube_resource).to have_received(:where).with(params)
+ expect(plate_resource).to have_received(:where).with(params)
+ expect(well_resource).to have_received(:where).with(params)
+ end
+ end
+
+ context '#find_first' do
+ let(:asset) { create :tube }
+ let(:params) { { uuid: asset.uuid } }
+
+ let(:tube_resource) { double('tube_resource')}
+ let(:plate_resource) { double('plate_resource')}
+ let(:well_resource) { double('well_resource')}
+ let(:resources) { [plate_resource, tube_resource, well_resource]}
+
+ before do
+ allow(plate_resource).to receive(:where)
+ allow(tube_resource).to receive(:where).with(params).and_return([asset])
+ allow(well_resource).to receive(:where)
+ end
+
+ it 'stops performing subsequente requests when the element is found' do
+ expect(SequencescapeClient.find_first(resources, params)).to eq(asset)
+ expect(plate_resource).to have_received(:where).with(params)
+ expect(tube_resource).to have_received(:where).with(params)
+ expect(well_resource).not_to have_received(:where).with(params)
+ end
+ end
+
+end
diff --git a/spec/models/asset_group_spec.rb b/spec/models/asset_group_spec.rb
index 8164ca73..194135e6 100644
--- a/spec/models/asset_group_spec.rb
+++ b/spec/models/asset_group_spec.rb
@@ -1,26 +1,47 @@
require 'rails_helper'
+require 'remote_assets_helper'
RSpec.describe AssetGroup, type: :model do
+ include RemoteAssetsHelper
+
context '#update_with_assets' do
- let(:existing_assets) { 3.times.map{ create :asset }}
- let(:new_assets) { 2.times.map { create :asset }}
+ let(:remote_existing_assets) { 3.times.map{build_remote_tube}}
+ let(:existing_assets) {
+ remote_existing_assets.count.times.map{|i|
+ create(:asset, uuid: remote_existing_assets[i].uuid)
+ }
+ }
+ let(:remote_new_assets) {
+ 2.times.map { build_remote_tube }
+ }
+ let(:new_assets) {
+ remote_new_assets.count.times.map{|i|
+ create(:asset, uuid: remote_new_assets[i].uuid)
+ }
+ }
let(:group) { create(:asset_group, assets: existing_assets)}
- before do
- allow(group).to receive(:refresh!).and_return(true)
- end
it 'adds new assets to the group' do
+ asset_list = [].concat(existing_assets).concat(new_assets)
+ stub_client_with_assets(SequencescapeClient, remote_new_assets)
expect {
- group.update_with_assets(existing_assets.concat(new_assets))
- }.to change{Operation.count}.by(2).and change{group.assets.count}.by(2)
+ group.update_with_assets(asset_list)
+ }.to change{Operation.count}.and change{group.assets.count}.by(2)
end
it 'removes assets not present anymore in the group' do
+ stub_client_with_assets(SequencescapeClient, remote_new_assets)
expect {
group.update_with_assets(new_assets)
- }.to change{Operation.count}.by(5).and change{group.assets.count}.by(-1)
+ }.to change{Operation.count}.and change{group.assets.count}.by(-1)
end
it 'refreshes the new added assets' do
- group.update_with_assets(existing_assets.concat(new_assets))
- expect(group).to have_received(:refresh!)
+ asset_list = [].concat(existing_assets).concat(new_assets)
+ remotes = [].concat(remote_existing_assets).concat(remote_new_assets)
+ stub_client_with_assets(SequencescapeClient, remote_new_assets)
+ expect{
+ group.update_with_assets(asset_list)
+ }.to change{
+ new_assets.first.operations.count
+ }
end
end
end
diff --git a/spec/models/asset_spec.rb b/spec/models/asset_spec.rb
index d110bbb3..54646731 100644
--- a/spec/models/asset_spec.rb
+++ b/spec/models/asset_spec.rb
@@ -1,5 +1,13 @@
require 'rails_helper'
RSpec.describe Asset do
+ context 'SCOPE ::from_remote_service' do
+ it 'filters to select only remote assets that are up to date with Sequencescape' do
+ seq1 = create(:plate, remote_digest: '1')
+ seq2 = create(:plate)
+ seq3 = create(:plate, remote_digest: '2')
+ expect(Asset.from_remote_service).to eq([seq1, seq3])
+ end
+ end
context '#has_wells?' do
it 'returns true when it is a plate with wells' do
plate = create(:asset)
diff --git a/spec/models/assets/export_spec.rb b/spec/models/assets/export_spec.rb
index 33c6781f..73fdf9dc 100644
--- a/spec/models/assets/export_spec.rb
+++ b/spec/models/assets/export_spec.rb
@@ -110,7 +110,10 @@
allow(SequencescapeClient).to receive(:version_1_find_by_uuid).with(asset.uuid).and_return(nil)
allow(SequencescapeClient).to receive(:version_1_find_by_uuid).with(plate.uuid).and_return(plate)
allow(SequencescapeClient).to receive(:find_by_uuid).with(asset.uuid).and_return(nil)
- allow(SequencescapeClient).to receive(:find_by_uuid).with(plate.uuid).and_return(plate)
+ allow(SequencescapeClient).to receive(:find_by_uuid).with([asset.uuid]).and_return(nil)
+
+ stub_client_with_asset(SequencescapeClient, plate)
+
allow(SequencescapeClient).to receive(:create_plate).and_return(plate)
barcode = double('barcode')
allow(barcode).to receive(:prefix).and_return('DN')
diff --git a/spec/models/assets/import_spec.rb b/spec/models/assets/import_spec.rb
index 9d58f2a2..db1f4ebd 100644
--- a/spec/models/assets/import_spec.rb
+++ b/spec/models/assets/import_spec.rb
@@ -6,70 +6,55 @@
context '#refresh!' do
- let(:asset) { create :asset }
+ let(:asset) { create :asset, uuid: uuid, remote_digest: digest }
let(:plate) { build_remote_plate }
-
+ let(:digest) { nil }
before do
- allow(asset).to receive(:_process_refresh)
- allow(SequencescapeClient).to receive(:find_by_uuid).and_return(true)
+ stub_client_with_asset(SequencescapeClient, plate)
end
context 'when it is not a remote asset' do
- before do
- allow(asset).to receive(:is_remote_asset?).and_return(false)
- end
-
+ let(:uuid) { SecureRandom.uuid }
it 'does not refresh' do
- asset.refresh!
- expect(asset).not_to have_received(:_process_refresh)
+ allow(SequencescapeClient).to receive(:get_remote_asset).with([uuid]).and_return(nil)
+ expect{asset.refresh!}.not_to change{asset.facts.count}
end
end
context 'when it is a remote asset' do
- before do
- allow(asset).to receive(:is_remote_asset?).and_return(true)
- end
+ let(:uuid) { plate.uuid }
+ let(:digest) { 'initial_digest' }
+
context 'when the asset has changed' do
- before do
- allow(asset).to receive(:changed_remote?).and_return(true)
- end
it 'refreshes the asset' do
- asset.refresh!
- expect(asset).to have_received(:_process_refresh)
+ expect{asset.refresh!}.to change{asset.facts.count}
end
end
context 'when the asset has not changed' do
- before do
- allow(asset).to receive(:changed_remote?).and_return(false)
- end
it 'refreshes the asset' do
- asset.refresh!
- expect(asset).to have_received(:_process_refresh)
+ asset.facts << create(:fact, predicate: 'a', object: 'TubeRack', is_remote?: true)
+ expect{asset.refresh!}.to change{asset.facts.count}
end
end
end
end
context '#refresh' do
- let(:asset) { create :asset }
+ let(:digest) { 'initial_digest' }
+ let(:asset) { create :asset, uuid: plate.uuid, remote_digest: digest }
let(:plate) { build_remote_plate }
before do
- allow(SequencescapeClient).to receive(:find_by_uuid).and_return(true)
- allow(asset).to receive(:changed_remote?).and_return(false)
+ stub_client_with_asset(SequencescapeClient, plate)
end
it 'recognises a plate' do
asset.facts << create(:fact, predicate: 'a', object: 'TubeRack', is_remote?: true)
asset.refresh
- expect(SequencescapeClient).to have_received(:find_by_uuid).with(asset.uuid)
+ expect(SequencescapeClient).to have_received(:find_by_uuid).with([asset.uuid])
end
it 'recognises a tube' do
asset.facts << create(:fact, predicate: 'a', object: 'Tube', is_remote?: true)
asset.refresh
- expect(SequencescapeClient).to have_received(:find_by_uuid).with(asset.uuid)
+ expect(SequencescapeClient).to have_received(:find_by_uuid).with([asset.uuid])
end
context 'when actually updating' do
- before do
- allow(SequencescapeClient).to receive(:find_by_uuid).and_return(plate)
- allow(asset).to receive(:changed_remote?).and_return(true)
- end
it 'does not destroy remote facts that have not changed' do
fact = create(:fact, predicate: 'a', object: 'Plate', is_remote?: true)
asset.facts << fact
@@ -85,11 +70,11 @@
expect(asset.facts.with_predicate('a').first.object).to eq('Plate')
end
it 'does not destroy local facts' do
- fact = create(:fact, predicate: 'is', object: 'Red', is_remote?: false)
+ fact = create(:fact, predicate: 'color', object: 'Red', is_remote?: false)
asset.facts << fact
asset.refresh
expect{fact.reload}.not_to raise_error
- expect(asset.facts.with_predicate('is').first.object).to eq('Red')
+ expect(asset.facts.with_predicate('color').first.object).to eq('Red')
end
it 'does not destroy the assets linked by remote facts' do
asset2 = create(:asset)
@@ -142,6 +127,7 @@
setup do
@barcode_plate = "1"
@asset = Asset.create!(barcode: @barcode_plate)
+ allow(SequencescapeClient).to receive(:get_remote_asset).and_return(nil)
end
it 'should return the local asset when looking by its barcode' do
expect(Asset.find_or_import_asset_with_barcode(@barcode_plate)).to eq(@asset)
@@ -167,7 +153,7 @@
end
it 'should try to obtain a tube' do
@asset = Asset.find_or_import_asset_with_barcode(@remote_tube_asset.barcode)
- expect(SequencescapeClient).to have_received(:find_by_uuid).with(@remote_tube_asset.uuid)
+ expect(SequencescapeClient).to have_received(:get_remote_asset).with([@remote_tube_asset.barcode])
end
end
@@ -178,7 +164,7 @@
end
it 'should try to obtain a plate' do
@asset = Asset.find_or_import_asset_with_barcode(@remote_plate_asset.barcode)
- expect(SequencescapeClient).to have_received(:find_by_uuid).with(@remote_plate_asset.uuid)
+ expect(SequencescapeClient).to have_received(:get_remote_asset).with([@remote_plate_asset.barcode])
end
context 'when the supplier sample name has not been provided to some samples' do
@@ -326,16 +312,18 @@
context 'when the local copy is out of date' do
before do
@asset.update_attributes(remote_digest: 'RANDOM')
+ assetchanged2 = create :asset
+ @fact_changed2 = create(:fact, predicate: 'contains', object_asset: assetchanged2, is_remote?: true, literal: false)
+ @asset.facts << @fact_changed2
@fact_changed = @asset.facts.from_remote_asset.where(predicate: 'contains').first
- @well_changed = create :asset
- @dependant_fact = create :fact, predicate: 'some', object: 'Moredata', is_remote?: true
+ @well_changed = @fact_changed.object_asset
+ @dependant_fact = create :fact, predicate: 'some', object: 'Moredata', is_remote?: true, literal: true
@well_changed.facts << @dependant_fact
- @fact_changed.update_attributes(object_asset_id: @well_changed.id)
end
it 'should destroy any remote facts that has changed' do
Asset.find_or_import_asset_with_barcode(@barcode_plate)
- expect{@fact_changed.reload}.to raise_exception ActiveRecord::RecordNotFound
+ expect{@fact_changed2.reload}.to raise_exception ActiveRecord::RecordNotFound
end
it 'should destroy any contains dependant remote facts' do
diff --git a/spec/models/kit_spec.rb b/spec/models/kit_spec.rb
new file mode 100644
index 00000000..f7afd486
--- /dev/null
+++ b/spec/models/kit_spec.rb
@@ -0,0 +1,3 @@
+require 'rails_helper'
+RSpec.describe Kit, type: :model do
+end
diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb
index 1d9a0fd9..a0764cbf 100644
--- a/spec/rails_helper.rb
+++ b/spec/rails_helper.rb
@@ -61,4 +61,5 @@
# arbitrary gems may also be filtered via:
# config.filter_gems_from_backtrace("gem name")
+ config.filter_run_excluding browser: true
end
diff --git a/spec/remote_assets_helper.rb b/spec/remote_assets_helper.rb
index a28f7f26..6701e812 100644
--- a/spec/remote_assets_helper.rb
+++ b/spec/remote_assets_helper.rb
@@ -16,7 +16,15 @@ def build_remote_plate(opts = {})
end
def build_remote_well(location, opts={})
- double('well', {aliquots: [build_remote_aliquot], location: location, position: { "name" => location }, uuid: SecureRandom.uuid}.merge(opts))
+ obj = {
+ type: 'wells',
+ aliquots: [build_remote_aliquot], location: location,
+ position: { "name" => location }, uuid: SecureRandom.uuid
+ }.merge(opts)
+ well=double('well', obj)
+ allow(well).to receive(:attributes).and_return(obj)
+ allow(well).to receive(:class).and_return(Sequencescape::Well)
+ well
end
def build_remote_tube(opts = {})
@@ -60,12 +68,25 @@ def build_remote_sample(opts={})
sample
end
- def stub_client_with_asset(double, asset)
+ def stub_client_with_asset(client, asset)
type = (asset.class==Sequencescape::Plate) ? :plate : :tube
- allow(double).to receive(:find_by_uuid).with(asset.uuid).and_return(asset)
- allow(double).to receive(:get_remote_asset) { nil }
- allow(double).to receive(:get_remote_asset).with(asset.barcode).and_return(asset)
- allow(double).to receive(:get_remote_asset).with(asset.uuid).and_return(asset)
+ allow(client).to receive(:find_by_uuid).with(asset.uuid).and_return(asset)
+ allow(client).to receive(:find_by_uuid).with([asset.uuid]).and_return([asset])
+ allow(client).to receive(:get_remote_asset).with(asset.uuid).and_return(asset)
+ allow(client).to receive(:get_remote_asset).with([asset.uuid]).and_return([asset])
+ if asset.respond_to?(:barcode)
+ allow(client).to receive(:get_remote_asset).with(asset.barcode).and_return(asset)
+ allow(client).to receive(:get_remote_asset).with([asset.barcode]).and_return([asset])
+ end
+ end
+
+ def stub_client_with_assets(client, assets)
+ assets.each {|asset| stub_client_with_asset(client, asset) }
+ if (assets.first.respond_to?(:barcode))
+ allow(client).to receive(:get_remote_asset).with(assets.map(&:barcode)).and_return(assets)
+ end
+ allow(client).to receive(:get_remote_asset).with(assets.map(&:uuid)).and_return(assets)
+ allow(client).to receive(:find_by_uuid).with(assets.map(&:uuid)).and_return(assets)
end
end
diff --git a/spec/script/runners/move_barcodes_from_tube_rack_to_plate_spec.rb b/spec/script/runners/move_barcodes_from_tube_rack_to_plate_spec.rb
new file mode 100644
index 00000000..1fc2776a
--- /dev/null
+++ b/spec/script/runners/move_barcodes_from_tube_rack_to_plate_spec.rb
@@ -0,0 +1,85 @@
+require 'rails_helper'
+
+require Rails.root.to_s+'/script/runners/move_barcodes_from_tube_rack_to_plate'
+
+RSpec.describe 'MoveBarcodesFromTubeRackToPlate' do
+ NUM_WELLS = 3
+
+ let(:activity) { create :activity }
+ let(:step) { create :step, activity: activity, state: Step::STATE_RUNNING }
+
+ let(:barcodes) {
+ NUM_WELLS.times.map{|i| "FR00#{i}"}
+ }
+ let(:padded_locations) {
+ NUM_WELLS.times.map{|i| "A0#{i}"}
+ }
+
+ let(:locations) {
+ NUM_WELLS.times.map{|i| "A#{i}"}
+ }
+ let(:wells_for_rack) {
+ NUM_WELLS.times.map do |i|
+ asset = create(:asset, barcode: barcodes[i])
+ asset.facts << create(:fact, predicate: 'a', object: 'Tube')
+ asset.facts << create(:fact, predicate: 'location', object: padded_locations[i])
+ asset
+ end
+ }
+ let(:wells_for_plate) {
+ NUM_WELLS.times.map do |i|
+ asset = create(:asset)
+ asset.facts << create(:fact, predicate: 'a', object: 'Well')
+ asset.facts << create(:fact, predicate: 'location', object: locations[i])
+ asset
+ end
+ }
+ let(:tube_rack) {
+ asset = create :asset
+ asset.facts << create(:fact, predicate: 'a', object: 'TubeRack')
+ asset.facts << wells_for_rack.map{|a| create(:fact, predicate: 'contains', object_asset: a)}
+ asset
+ }
+ let(:plate) {
+ asset = create :asset
+ asset.facts << create(:fact, predicate: 'a', object: 'Plate')
+ asset.facts << wells_for_plate.map{|a| create(:fact, predicate: 'contains', object_asset: a)}
+ asset
+ }
+
+ context 'when run with a tube rack and a plate' do
+ it 'adds the barcodes of the tube rack into the wells of the plate' do
+ group = create(:asset_group, assets: [plate, tube_rack])
+ updates = MoveBarcodesFromTubeRackToPlate.new(asset_group: group).process
+ changes = updates.to_h
+
+ expect(changes[:add_facts].select{|t| t[1] == 'barcode'}.count).to eq(NUM_WELLS)
+
+ wells_for_plate.each_with_index do |w, pos|
+ expect(changes[:add_facts]).to include(
+ [w.uuid, 'barcode', barcodes[pos]])
+ end
+ expect{
+ updates.apply(step)
+ wells_for_plate.each(&:reload)
+ }.to change{wells_for_plate.first.barcode}.from(nil).to(barcodes.first)
+ end
+ it 'removes the barcodes from the tubes of the tube rack' do
+ group = create(:asset_group, assets: [plate, tube_rack])
+ updates = MoveBarcodesFromTubeRackToPlate.new(asset_group: group).process
+ changes = updates.to_h
+
+ expect(changes[:remove_facts].select{|t| t[1] == 'barcode'}.count).to eq(NUM_WELLS)
+
+ wells_for_rack.each_with_index do |w, pos|
+ expect(changes[:remove_facts]).to include(
+ [w.uuid, 'barcode', barcodes[pos]])
+ end
+ expect{
+ updates.apply(step)
+ wells_for_rack.each(&:reload)
+ }.to change{wells_for_rack.first.barcode}.from(barcodes.first).to(nil)
+ end
+
+ end
+end
diff --git a/spec/script/runners/remove_barcodes_from_tubes_spec.rb b/spec/script/runners/remove_barcodes_from_tubes_spec.rb
new file mode 100644
index 00000000..a7a5ba49
--- /dev/null
+++ b/spec/script/runners/remove_barcodes_from_tubes_spec.rb
@@ -0,0 +1,54 @@
+require 'rails_helper'
+
+require Rails.root.to_s+'/script/runners/remove_barcodes_from_tubes'
+
+RSpec.describe 'RemoveBarcodesFromTubes' do
+ let!(:num_wells) { 3 }
+
+ let(:activity) { create :activity }
+ let(:step) { create :step, activity: activity, state: Step::STATE_RUNNING }
+
+ let(:barcodes) {
+ num_wells.times.map{|i| "FR00#{i}"}
+ }
+ let(:padded_locations) {
+ num_wells.times.map{|i| "A0#{i}"}
+ }
+
+ let(:locations) {
+ num_wells.times.map{|i| "A#{i}"}
+ }
+ let(:wells_for_rack) {
+ num_wells.times.map do |i|
+ asset = create(:asset, barcode: barcodes[i])
+ asset.facts << create(:fact, predicate: 'a', object: 'Tube')
+ asset.facts << create(:fact, predicate: 'location', object: padded_locations[i])
+ asset
+ end
+ }
+ let(:tube_rack) {
+ asset = create :asset
+ asset.facts << create(:fact, predicate: 'a', object: 'TubeRack')
+ asset.facts << wells_for_rack.map{|a| create(:fact, predicate: 'contains', object_asset: a)}
+ asset
+ }
+
+ context 'when run with a rack with tubes' do
+ it 'removes the barcodes from the tubes' do
+ group = create(:asset_group, assets: [tube_rack])
+ updates = RemoveBarcodesFromTubes.new(asset_group: group).process
+ changes = updates.to_h
+
+ expect(changes[:remove_facts].select{|t| t[1] == 'barcode'}.count).to eq(num_wells)
+
+ wells_for_rack.each_with_index do |w, pos|
+ expect(changes[:remove_facts]).to include(
+ [w.uuid, 'barcode', barcodes[pos]])
+ end
+ expect{
+ updates.apply(step)
+ wells_for_rack.each(&:reload)
+ }.to change{wells_for_rack.first.barcode}.from(barcodes.first).to(nil)
+ end
+ end
+end
diff --git a/test/factories/assets.rb b/test/factories/assets.rb
index b22fc897..215691d1 100644
--- a/test/factories/assets.rb
+++ b/test/factories/assets.rb
@@ -1,10 +1,39 @@
FactoryBot.define do
factory :asset do
- after(:build) do |asset|
- if (Rails.configuration.respond_to?(:testing_barcodes) && asset.barcode.nil?)
- asset.update_attributes(:barcode => Rails.configuration.testing_barcodes.pop)
+ trait :with_barcode do
+ barcode { generate :barcode }
+ end
+ factory :tube, class: Asset do
+ facts { [ create(:tube_fact) ] }
+
+ trait :inside_rack do
+ transient do
+ parent { nil }
+ location { nil }
+ end
+ after(:create) do |tube, evaluator|
+ if evaluator.parent
+ evaluator.parent.facts << create(:fact, predicate: 'contains', object_asset_id: tube.id, literal: false)
+ tube.facts << create(:fact, predicate: 'parent', object_asset: evaluator.parent, literal: false)
+ end
+ if evaluator.location
+ tube.facts << create(:fact, predicate: 'location', object: evaluator.location, literal: true)
+ end
+ end
end
end
+ factory :well, class: Asset do
+ facts { [ create(:well_fact) ] }
+ end
+
+ factory :plate, class: Asset do
+ facts { [ create(:plate_fact) ] }
+ end
+
+ factory :tube_rack, class: Asset do
+ facts { [ create(:tube_rack_fact) ] }
+ end
end
+
end
diff --git a/test/factories/facts.rb b/test/factories/facts.rb
index 3934f1b4..f237dfc5 100644
--- a/test/factories/facts.rb
+++ b/test/factories/facts.rb
@@ -2,4 +2,37 @@
factory :fact, class: 'Fact' do
end
+
+ factory :relation_fact, class: 'Fact' do
+ literal { false }
+ end
+
+ factory :literal_fact, class: 'Fact' do
+ literal { true }
+ end
+
+ factory :tube_fact, class: Fact do
+ predicate { 'a' }
+ object { 'Tube' }
+ literal { true }
+ end
+
+ factory :well_fact, class: Fact do
+ predicate { 'a' }
+ object { 'Well' }
+ literal { true }
+ end
+
+ factory :tube_rack_fact, class: Fact do
+ predicate { 'a' }
+ object { 'TubeRack' }
+ literal { true }
+ end
+
+ factory :plate_fact, class: Fact do
+ predicate { 'a' }
+ object { 'Plate' }
+ literal { true }
+ end
+
end
diff --git a/yarn.lock b/yarn.lock
index e688efbe..d4e4ade1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3,718 +3,787 @@
"@babel/cli@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.5.5.tgz#bdb6d9169e93e241a08f5f7b0265195bf38ef5ec"
- integrity sha512-UHI+7pHv/tk9g6WXQKYz+kmXTI77YtuY3vqC59KIqcoWEjsJJSG6rAxKaLsgj3LDyadsPrCB929gVOKM6Hui0w==
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.0.tgz#e9ed4c3dbb163de5034c18979c118ed1aa294e05"
+ integrity sha512-/zOi56gIH3jBmnrfUvVf8MOMqf3hfFou2ONRYdRRpgnBSi0dUkiO+usu44YHsOEJqqwPkijBsiDKscQizouoag==
dependencies:
- commander "^2.8.1"
+ commander "^4.0.1"
convert-source-map "^1.1.0"
fs-readdir-recursive "^1.1.0"
glob "^7.0.0"
lodash "^4.17.13"
- mkdirp "^0.5.1"
- output-file-sync "^2.0.0"
+ make-dir "^2.1.0"
slash "^2.0.0"
source-map "^0.5.0"
optionalDependencies:
- chokidar "^2.0.4"
+ chokidar "^2.1.8"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.0.tgz#8c98d4ac29d6f80f28127b1bc50970a72086c5ac"
+ integrity sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==
+ dependencies:
+ "@babel/highlight" "^7.8.0"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
- integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
+"@babel/compat-data@^7.8.0", "@babel/compat-data@^7.8.1":
+ version "7.8.1"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.1.tgz#fc0bbbb7991e4fb2b47e168e60f2cc2c41680be9"
+ integrity sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw==
dependencies:
- "@babel/highlight" "^7.0.0"
+ browserslist "^4.8.2"
+ invariant "^2.2.4"
+ semver "^5.5.0"
"@babel/core@^7.1.0", "@babel/core@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30"
- integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==
- dependencies:
- "@babel/code-frame" "^7.5.5"
- "@babel/generator" "^7.5.5"
- "@babel/helpers" "^7.5.5"
- "@babel/parser" "^7.5.5"
- "@babel/template" "^7.4.4"
- "@babel/traverse" "^7.5.5"
- "@babel/types" "^7.5.5"
- convert-source-map "^1.1.0"
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.0.tgz#fd273d4faf69cc20ee3ccfd32d42df916bb4a15c"
+ integrity sha512-3rqPi/bv/Xfu2YzHvBz4XqMI1fKVwnhntPA1/fjoECrSjrhbOCxlTrbVu5gUtr8zkxW+RpkDOa/HCW93gzS2Dw==
+ dependencies:
+ "@babel/code-frame" "^7.8.0"
+ "@babel/generator" "^7.8.0"
+ "@babel/helpers" "^7.8.0"
+ "@babel/parser" "^7.8.0"
+ "@babel/template" "^7.8.0"
+ "@babel/traverse" "^7.8.0"
+ "@babel/types" "^7.8.0"
+ convert-source-map "^1.7.0"
debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
json5 "^2.1.0"
lodash "^4.17.13"
resolve "^1.3.2"
semver "^5.4.1"
source-map "^0.5.0"
-"@babel/generator@^7.4.0", "@babel/generator@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf"
- integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==
+"@babel/generator@^7.4.0", "@babel/generator@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.0.tgz#40a1244677be58ffdc5cd01e22634cd1d5b29edf"
+ integrity sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==
dependencies:
- "@babel/types" "^7.5.5"
+ "@babel/types" "^7.8.0"
jsesc "^2.5.1"
lodash "^4.17.13"
source-map "^0.5.0"
- trim-right "^1.0.1"
-"@babel/helper-annotate-as-pure@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
- integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
+"@babel/helper-annotate-as-pure@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.0.tgz#334ae2cb801e2381509631a5caa1ac6ab1c5016a"
+ integrity sha512-WWj+1amBdowU2g18p3/KUc1Y5kWnaNm1paohq2tT4/RreeMNssYkv6ul9wkE2iIqjwLBwNMZGH4pTGlMSUqMMg==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.8.0"
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
- integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.0.tgz#c2237beb110f64f592dddcabef1098e9d766ef88"
+ integrity sha512-KbBloNiBHM3ZyHg1ViDRs4QcnAunwMJ+rLpAEA8l3cWb3Z1xof7ag1iHvX16EwhUfaTG3+YSvTRPv4xHIrseUQ==
dependencies:
- "@babel/helper-explode-assignable-expression" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/helper-explode-assignable-expression" "^7.8.0"
+ "@babel/types" "^7.8.0"
-"@babel/helper-builder-react-jsx@^7.3.0":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4"
- integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==
+"@babel/helper-builder-react-jsx@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.0.tgz#4b9111eb862f5fd8840c37d200610fa95ab0aad8"
+ integrity sha512-Zg7VLtZzcAHoQ13S0pEIGKo8OAG3s5kjsk/4keGmUeNuc810T9fVp6izIaL8ZVeAErRFWJdvqFItY3QMTHMsSg==
dependencies:
- "@babel/types" "^7.3.0"
+ "@babel/types" "^7.8.0"
esutils "^2.0.0"
-"@babel/helper-call-delegate@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43"
- integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==
+"@babel/helper-call-delegate@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.0.tgz#1cd725c5444be0ce59dbfa47b6ac5e9772168c67"
+ integrity sha512-Vi8K1LScr8ZgLicfuCNSE7JWUPG/H/9Bw9zn+3vQyy4vA54FEGTCuUTOXCFwmBM93OD6jHfjrQ6ZnivM5U+bHg==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.8.0"
+ "@babel/traverse" "^7.8.0"
+ "@babel/types" "^7.8.0"
+
+"@babel/helper-compilation-targets@^7.8.0":
+ version "7.8.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.1.tgz#309da97e93e6ca74896393d0c8da7af39cb4cea8"
+ integrity sha512-Fsrljg8DHSdnKSzC0YFopX7lseRpVfWMYuC1Dnvf7tw972E2KDjZ4XEaqjO9aJL0sLcG4KNRXxowDxHYIcZ+Cw==
dependencies:
- "@babel/helper-hoist-variables" "^7.4.4"
- "@babel/traverse" "^7.4.4"
- "@babel/types" "^7.4.4"
+ "@babel/compat-data" "^7.8.1"
+ browserslist "^4.8.2"
+ invariant "^2.2.4"
+ levenary "^1.1.0"
+ semver "^5.5.0"
+
+"@babel/helper-create-regexp-features-plugin@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.0.tgz#ae551572b840189a7b94e39eddc1a68d355974eb"
+ integrity sha512-vJj2hPbxxLUWJEV86iZiac5curAnC3ZVc+rFmFeWZigUOcuCPpbF+KxoEmxrkmuCGylHFF9t4lkpcDUcxnhQ5g==
+ dependencies:
+ "@babel/helper-regex" "^7.8.0"
+ regexpu-core "^4.6.0"
-"@babel/helper-define-map@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369"
- integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==
+"@babel/helper-define-map@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.0.tgz#d3180691fa189fc147d411deaa029305c1470dfe"
+ integrity sha512-Go06lUlZ4YImNEmdyAH5iO38yh5mbpOPSwA2PtV1vyczFhTZfX0OtzkiIL2pACo6AOYf89pLh42nhhDrqgzC3A==
dependencies:
- "@babel/helper-function-name" "^7.1.0"
- "@babel/types" "^7.5.5"
+ "@babel/helper-function-name" "^7.8.0"
+ "@babel/types" "^7.8.0"
lodash "^4.17.13"
-"@babel/helper-explode-assignable-expression@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
- integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
+"@babel/helper-explode-assignable-expression@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.0.tgz#a2ded9298a5dc9df0a8ec65ac12e4745f9af2882"
+ integrity sha512-w4mRQqKAh4M7BSLwvDMm8jYFroEzpqMCtXDhFHP+kNjMIQWpbC6b0Q/RUQsJNSf54rIx6XMdci1Stf60DWw+og==
dependencies:
- "@babel/traverse" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/traverse" "^7.8.0"
+ "@babel/types" "^7.8.0"
-"@babel/helper-function-name@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
- integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
+"@babel/helper-function-name@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz#dde5cf0d6b15c21817a67dd66fe7350348e023bf"
+ integrity sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==
dependencies:
- "@babel/helper-get-function-arity" "^7.0.0"
- "@babel/template" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/helper-get-function-arity" "^7.8.0"
+ "@babel/template" "^7.8.0"
+ "@babel/types" "^7.8.0"
-"@babel/helper-get-function-arity@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
- integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
+"@babel/helper-get-function-arity@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz#90977f61d76d2225d1ae0208def7df22ea92792e"
+ integrity sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.8.0"
-"@babel/helper-hoist-variables@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a"
- integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==
+"@babel/helper-hoist-variables@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.0.tgz#693586b56487e60fff9d9c7074f4a86e1a8af348"
+ integrity sha512-jDl66KvuklTXUADcoXDMur1jDtAZUZZkzLIaQ54+z38ih8C0V0hC56hMaoVoyoxN60MwQmmrHctBwcLqP0c/Lw==
dependencies:
- "@babel/types" "^7.4.4"
+ "@babel/types" "^7.8.0"
-"@babel/helper-member-expression-to-functions@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590"
- integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==
+"@babel/helper-member-expression-to-functions@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.0.tgz#50d0ed445d2da11beb60e2dbc2c428254bd5a4ae"
+ integrity sha512-0m1QabGrdXuoxX/g+KOAGndoHwskC70WweqHRQyCsaO67KOEELYh4ECcGw6ZGKjDKa5Y7SW4Qbhw6ly4Fah/jQ==
dependencies:
- "@babel/types" "^7.5.5"
+ "@babel/types" "^7.8.0"
-"@babel/helper-module-imports@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
- integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
+"@babel/helper-module-imports@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz#076edda55d8cd39c099981b785ce53f4303b967e"
+ integrity sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.8.0"
-"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a"
- integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==
+"@babel/helper-module-transforms@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.0.tgz#a3cbe4ac91b101c4b6db278af0c868fe7091ebae"
+ integrity sha512-fvGhX4FY7YwRdWW/zfddNaKpYl8TaA8hvwONIYhv1/a1ZbgxbTrjsmH6IGWUgUNki7QzbpZ27OEh88sZdft3YA==
dependencies:
- "@babel/helper-module-imports" "^7.0.0"
- "@babel/helper-simple-access" "^7.1.0"
- "@babel/helper-split-export-declaration" "^7.4.4"
- "@babel/template" "^7.4.4"
- "@babel/types" "^7.5.5"
+ "@babel/helper-module-imports" "^7.8.0"
+ "@babel/helper-simple-access" "^7.8.0"
+ "@babel/helper-split-export-declaration" "^7.8.0"
+ "@babel/template" "^7.8.0"
+ "@babel/types" "^7.8.0"
lodash "^4.17.13"
-"@babel/helper-optimise-call-expression@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
- integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==
+"@babel/helper-optimise-call-expression@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.0.tgz#3df62773cf210db9ed34c2bb39fece5acd1e1733"
+ integrity sha512-aiJt1m+K57y0n10fTw+QXcCXzmpkG+o+NoQmAZqlZPstkTE0PZT+Z27QSd/6Gf00nuXJQO4NiJ0/YagSW5kC2A==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.8.0"
-"@babel/helper-plugin-utils@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
- integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz#59ec882d43c21c544ccb51decaecb306b34a8231"
+ integrity sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==
-"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351"
- integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==
+"@babel/helper-regex@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.0.tgz#dde1d2d2070e292c19a8702075e945923aa1678b"
+ integrity sha512-haD8fRsPtyFZkbtxBIaGBBHRtbn0YsyecdYrxNgO0Bl6SlGokJPQX9M2tDuVbeQBYHZVLUPMSwGQn4obHevsMQ==
dependencies:
lodash "^4.17.13"
-"@babel/helper-remap-async-to-generator@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f"
- integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
+"@babel/helper-remap-async-to-generator@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.0.tgz#034c21154dd12472717cfb31faf1713426fbc435"
+ integrity sha512-+aKyBd4oHAaIZgOLq/uLjkUz7ExZ0ppdNBc8Qr72BmtKNAy3A6EJa/ifjj0//CIzQtUDPs3E6HjKM2cV6bnXsQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.0"
+ "@babel/helper-wrap-function" "^7.8.0"
+ "@babel/template" "^7.8.0"
+ "@babel/traverse" "^7.8.0"
+ "@babel/types" "^7.8.0"
+
+"@babel/helper-replace-supers@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.0.tgz#d83cb117edb820eebe9ae6c970a8ad5eac09d19f"
+ integrity sha512-R2CyorW4tcO3YzdkClLpt6MS84G+tPkOi0MmiCn1bvYVnmDpdl9R15XOi3NQW2mhOAEeBnuQ4g1Bh7pT2sX8fg==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.8.0"
+ "@babel/helper-optimise-call-expression" "^7.8.0"
+ "@babel/traverse" "^7.8.0"
+ "@babel/types" "^7.8.0"
+
+"@babel/helper-simple-access@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.0.tgz#a5095ab031f759995134183fa7719aa85f0ec962"
+ integrity sha512-I+7yKZJnxp7VIC2UFzXfVjLiJuU16rYFF59x27c+boINkO/pLETgZcoesCryg9jmU4jxEa0foFueW+2wjc9Gsw==
+ dependencies:
+ "@babel/template" "^7.8.0"
+ "@babel/types" "^7.8.0"
+
+"@babel/helper-split-export-declaration@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz#ed10cb03b07454c0d40735fad4e9c9711e739588"
+ integrity sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==
+ dependencies:
+ "@babel/types" "^7.8.0"
+
+"@babel/helper-wrap-function@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.0.tgz#a26751c7b0be765a0db10162c6de485402cb505c"
+ integrity sha512-2j6idN2jt8Y+8nJ4UPN/6AZa53DAkcETMVmroJQh50qZc59PuQKVjgOIIqmrLoQf6Ia9bs90MHRcID1OW5tfag==
+ dependencies:
+ "@babel/helper-function-name" "^7.8.0"
+ "@babel/template" "^7.8.0"
+ "@babel/traverse" "^7.8.0"
+ "@babel/types" "^7.8.0"
+
+"@babel/helpers@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.0.tgz#3d3e6e08febf5edbbf63b1cf64395525aa3ece37"
+ integrity sha512-srWKpjAFbiut5JoCReZJ098hLqoZ9HufOnKZPggc7j74XaPuQ+9b3RYPV1M/HfjL63lCNd8uI1O487qIWxAFNA==
+ dependencies:
+ "@babel/template" "^7.8.0"
+ "@babel/traverse" "^7.8.0"
+ "@babel/types" "^7.8.0"
+
+"@babel/highlight@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.0.tgz#4cc003dc10359919e2e3a1d9459150942913dd1a"
+ integrity sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.0.0"
- "@babel/helper-wrap-function" "^7.1.0"
- "@babel/template" "^7.1.0"
- "@babel/traverse" "^7.1.0"
- "@babel/types" "^7.0.0"
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
-"@babel/helper-replace-supers@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2"
- integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==
- dependencies:
- "@babel/helper-member-expression-to-functions" "^7.5.5"
- "@babel/helper-optimise-call-expression" "^7.0.0"
- "@babel/traverse" "^7.5.5"
- "@babel/types" "^7.5.5"
+"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.0.tgz#54682775f1fb25dd29a93a02315aab29a6a292bb"
+ integrity sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==
-"@babel/helper-simple-access@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
- integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
+"@babel/plugin-proposal-async-generator-functions@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.0.tgz#92520961d1b2220f0f2e6b576b7896698cd747f9"
+ integrity sha512-8vIQf8JYced7gCeKDsGETNGKE+zdD/JmP1LBlRn+w3UXc1aSpZv2Y330bB/fnOEbUgPbuFv+IEi+gopg+Fu0kQ==
dependencies:
- "@babel/template" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/helper-remap-async-to-generator" "^7.8.0"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
-"@babel/helper-split-export-declaration@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
- integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==
+"@babel/plugin-proposal-dynamic-import@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.0.tgz#bbd7c00f351b55f02aec0fe9b9c42ad3f659b176"
+ integrity sha512-YzMq0AqeTR4Mh2pz3GrCWqhcEV38HgUMMR/56/YR5GPc4Y2p1KJ4Le6j92vMnW8TJqVj+qJz/KDNglpMeww9Yg==
dependencies:
- "@babel/types" "^7.4.4"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
-"@babel/helper-wrap-function@^7.1.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa"
- integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==
+"@babel/plugin-proposal-json-strings@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.0.tgz#99fd838398c32f4d96117770f7f3591062e72607"
+ integrity sha512-pSpuhwn926vtNeUH2FHx1OzIXaUMgklG0MzlFZJVEg37fB904gOxN572NgBae+KDwFyZDpkLMyEkVA011lBJrQ==
dependencies:
- "@babel/helper-function-name" "^7.1.0"
- "@babel/template" "^7.1.0"
- "@babel/traverse" "^7.1.0"
- "@babel/types" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
-"@babel/helpers@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e"
- integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.0.tgz#1ef61239ed2241746bc4936fc643a5c6f1cb24fa"
+ integrity sha512-cQMI+RQdcK2IyMm13NKKFCYfOSBUtFxEeRBOdFCi2Pubv/CpkrCubc/ikdeKMT6Lu+uQ+lNSDEJvDCOQZkUy0g==
dependencies:
- "@babel/template" "^7.4.4"
- "@babel/traverse" "^7.5.5"
- "@babel/types" "^7.5.5"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
-"@babel/highlight@^7.0.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
- integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
+"@babel/plugin-proposal-object-rest-spread@^7.5.5", "@babel/plugin-proposal-object-rest-spread@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.0.tgz#ca8ac673d32db774c2154a4c7517fd46ec45e9cf"
+ integrity sha512-SjJ2ZXCylpWC+5DTES0/pbpNmw/FnjU/3dF068xF0DU9aN+oOKah+3MCSFcb4pnZ9IwmxfOy4KnbGJSQR+hAZA==
dependencies:
- chalk "^2.0.0"
- esutils "^2.0.2"
- js-tokens "^4.0.0"
-
-"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b"
- integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
-"@babel/plugin-proposal-async-generator-functions@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e"
- integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==
+"@babel/plugin-proposal-optional-catch-binding@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.0.tgz#6a7dee0bfd72751e3f1386ba4da03e6fa82fcd95"
+ integrity sha512-tHP3eez6TrpPJYttBZ/6uItRbIuXUIDpQ9xwvzKwR+RboWGMJ7WzFC5dDJ3vjLuCx0/DG1tM0MVkmgcBybth9w==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-remap-async-to-generator" "^7.1.0"
- "@babel/plugin-syntax-async-generators" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
-"@babel/plugin-proposal-dynamic-import@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506"
- integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==
+"@babel/plugin-proposal-optional-chaining@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.0.tgz#d05e4fa3c1e4ef18eaea6bc92a4b06f95eaf1df5"
+ integrity sha512-PNBHxPHE91m+LLOdGwlvyGicWfrMgiVwng5WdB3CMjd61+vn3vPw0GbgECIAUCZnyi7Jqs5htUIZRztGuV8/5g==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-dynamic-import" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
-"@babel/plugin-proposal-json-strings@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317"
- integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==
+"@babel/plugin-proposal-unicode-property-regex@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.0.tgz#9e1c0481863485052bae8ac024fca7028e24ee31"
+ integrity sha512-3oK0Qt5w4arb+es3rWBribDbtc0TYJP7dFZ1dXcYul3cXderqfIOoSx9YUC1oD208nJwJO/++fvrgLmkYSbe8A==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-json-strings" "^7.2.0"
+ "@babel/helper-create-regexp-features-plugin" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-proposal-object-rest-spread@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58"
- integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==
+"@babel/plugin-syntax-async-generators@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.0.tgz#e6c3dba5a61ecf72ba00a3f3f5f1234989a58e6a"
+ integrity sha512-a8w8k7pK8nYhem07rXdAq03T+DlTX8LFojUptrh9JEx80AgLqGiuoFIyQOGTWif39kFnDOQqbzl1s6KQqrfV+A==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-proposal-optional-catch-binding@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5"
- integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==
+"@babel/plugin-syntax-dynamic-import@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.0.tgz#3a6c1cd36af923db602df83c5aa72e08bb14353a"
+ integrity sha512-Mx2RzpCHJaBfmFdA2abXDKRHVJdzJ6R0Wqwb6TxCgM7NRR5wcC4cyiAsRL7Ga+lwG8GG1cKvb+4ENjic8y15jA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-proposal-unicode-property-regex@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78"
- integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==
+"@babel/plugin-syntax-json-strings@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.0.tgz#7f798eb7e8cfd3821388120679d23d530bae6e53"
+ integrity sha512-LPykaAbH86L5NnDfCRSpNxtEHZk+6GaFzXfWEFU/6R4v69EXQr6GOp7hwH+Uw0QlYVN++s6TukTJ3flFcspahA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-regex" "^7.4.4"
- regexpu-core "^4.5.4"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-async-generators@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f"
- integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==
+"@babel/plugin-syntax-jsx@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.0.tgz#657a0306e2c74de84e0dcf8b6cb024ed990224fc"
+ integrity sha512-zLDUckAuKeOtxJhfNE0TlR7iEApb2u7EYRlh5cxKzq6A5VzUbYEdyJGJlug41jDbjRbHTtsLKZUnUcy/8V3xZw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-dynamic-import@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612"
- integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.0.tgz#5d8f24ecffa4ae74164e53264953c5ea8ba6d149"
+ integrity sha512-Rv2hnBToN6rbA9hO2a4vtwXZLzNa+TWkoSIMMvUezFz5+D9NPeX7SFrArwtFzzbwndmWiqboTr5rNpzAz0MPpA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-json-strings@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470"
- integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==
+"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.0.tgz#9b37d580d459682364d8602494c69145b394fd4c"
+ integrity sha512-dt89fDlkfkTrQcy5KavMQPyF2A6tR0kYp8HAnIoQv5hO34iAUffHghP/hMGd7Gf/+uYTmLQO0ar7peX1SUWyIA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7"
- integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==
+"@babel/plugin-syntax-optional-catch-binding@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.0.tgz#180c7bdd6b7fd81cc6d18269de12d5ddd60cabce"
+ integrity sha512-EIgJVy+u1RvR2gJfX4ReLwAupO/twllUue1wPrRxhu18+eC3bGTEcOSXLQdaE9ya9NG1rE0eQs0GSiloUGFEwg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
- integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==
+"@babel/plugin-syntax-optional-chaining@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.0.tgz#c40f4d4d6a4f5e71d2bfd949b0a7f1e1e6792fe0"
+ integrity sha512-LV1c+TTAO8Vawe3t+WXBHYWbS7endP8MSlqKPKEZOyWPEJX2akl3jfvFG828/OE7RpyoC3JXfLJDFj/jN7A8hg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-optional-catch-binding@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c"
- integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==
+"@babel/plugin-syntax-top-level-await@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.0.tgz#8d45e3d68a1e26bce79c51b08dd9126290686207"
+ integrity sha512-iXR/Cw32fMfWlD1sK2zD/nXtuLStkalRv+xee6VrX84CFrn2LKwb/EOs/4UaDNUpUsws8YZYKeQjPagacFquug==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-arrow-functions@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
- integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==
+"@babel/plugin-transform-arrow-functions@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.0.tgz#d98b7c425fed35f70cb85024a2b10008936631b3"
+ integrity sha512-9KfteDp9d8cF388dxFMOh3Dum41qpOVUPVjQhXGd1kPyQBE05FJgYndiAriML2yhMIbZ2bjgweh2nnvBXDH2MQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-async-to-generator@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e"
- integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==
+"@babel/plugin-transform-async-to-generator@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.0.tgz#6561fb6445d89bc20b72150430944cad0e501e4a"
+ integrity sha512-9dvBvJnEdsDWYMrykoMyLNVRPGoub6SFlARtsYgSQ1riTjnyBjhctihSME4XsSku86F59PDeFpC9PCU+9I154w==
dependencies:
- "@babel/helper-module-imports" "^7.0.0"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-remap-async-to-generator" "^7.1.0"
+ "@babel/helper-module-imports" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/helper-remap-async-to-generator" "^7.8.0"
-"@babel/plugin-transform-block-scoped-functions@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190"
- integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==
+"@babel/plugin-transform-block-scoped-functions@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.0.tgz#2ea8a33ec78825ce91244980389cb96d4c6dc6bd"
+ integrity sha512-bim6gUfHq2kPN+aQst33ZEMeglpaUXAo6PWTZvOA8BOnWpNKgZcUzBvpZhh2ofL6YhZgzGoRwVVfzwynDEf47g==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-block-scoping@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz#a35f395e5402822f10d2119f6f8e045e3639a2ce"
- integrity sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==
+"@babel/plugin-transform-block-scoping@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.0.tgz#f6a81bc8c76dbbd202b718cb9e681a27f1d0af8f"
+ integrity sha512-FKTK4hzg7W950Yu9iqMl12WBixCmusMc5HBt3/ErvpFLnvr3/6mu/EBTZoCEJ0mw/lQUDfU01vTcZY9oEahlMg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
lodash "^4.17.13"
-"@babel/plugin-transform-classes@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9"
- integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.0.0"
- "@babel/helper-define-map" "^7.5.5"
- "@babel/helper-function-name" "^7.1.0"
- "@babel/helper-optimise-call-expression" "^7.0.0"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.5.5"
- "@babel/helper-split-export-declaration" "^7.4.4"
+"@babel/plugin-transform-classes@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.0.tgz#eb4699613b3ea3ccaf095bb0447dac55f7454fc9"
+ integrity sha512-18RLDwKtGXCLLbf5V03GojebPH7dKYCmIBqQGhgfZDoYsyEzR9kMZ6IxlJP72K5ROC9ADa4KPI6ywuh7NfQOgQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.8.0"
+ "@babel/helper-define-map" "^7.8.0"
+ "@babel/helper-function-name" "^7.8.0"
+ "@babel/helper-optimise-call-expression" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/helper-replace-supers" "^7.8.0"
+ "@babel/helper-split-export-declaration" "^7.8.0"
globals "^11.1.0"
-"@babel/plugin-transform-computed-properties@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da"
- integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==
+"@babel/plugin-transform-computed-properties@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.0.tgz#c86c200ea42cbecda754fdf636a04dfbf6371cc7"
+ integrity sha512-FaODHuQRdnWFVwxLPlTN85Lk/aitfvQBHTXahf58FnatCynfhkeNUO8ID+AqAxY4IJsZjeH6OnKDzcGfgKJcVw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-destructuring@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a"
- integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==
+"@babel/plugin-transform-destructuring@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.0.tgz#579d09e8dabf825cc3ac1524414ff99669f0abf9"
+ integrity sha512-D+69HT//cE86aBTLULzSBFLC5A7HcPQzJPiny6P4SLHkDF750MylRKO3iWvdgvb+OSp5dOrOxwXajvaxk1ZfYA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-dotall-regex@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3"
- integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==
+"@babel/plugin-transform-dotall-regex@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.0.tgz#7e9e439e85219be091c5dbf1be138320600d1172"
+ integrity sha512-pq/XLkDB4MPvTe9ktHJInfWksalXogrIGRZJUG7RiDXhEfdNrlducoMPbACZQuCFtelVgVpD0VyreiY0l38G7g==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-regex" "^7.4.4"
- regexpu-core "^4.5.4"
+ "@babel/helper-create-regexp-features-plugin" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-duplicate-keys@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853"
- integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==
+"@babel/plugin-transform-duplicate-keys@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.0.tgz#913b3fdb5cbd35e3208b017dac5ef335ef6b0d65"
+ integrity sha512-REtYWvpP4TDw4oVeP01vQJcAeewjgk8/i7tPFP11vUjvarUGGyxJLeq79WEnIdnKPQJirZaoDRT4kEWEdSWkDw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-exponentiation-operator@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008"
- integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==
+"@babel/plugin-transform-exponentiation-operator@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.0.tgz#72ddf89e1acfac75482992b8976df62f8ad813c4"
+ integrity sha512-vaDgF3gPLzVcoe3UZqnra6FA7O797sZc+UCHPd9eQTI34cPtpCA270LzopIXS3Fhc3UmFrijLmre9mHTmUKVgg==
dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-for-of@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556"
- integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==
+"@babel/plugin-transform-for-of@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.0.tgz#4a2960b76d42f4cc8a821edb66f4a7eadf6042ce"
+ integrity sha512-9j9g0qViCAo8E5qCBSaQdghymn7A9bRXSfS9jU7oLpYccYFZg9A+1KO8X+HV7fhJYH6mZ+e7MRg4p3sLo+RG6Q==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-function-name@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad"
- integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==
+"@babel/plugin-transform-function-name@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.0.tgz#9c5fdb20967f151c0e06419621d56d63120653c9"
+ integrity sha512-YL8Ol54UKeIyY1uUGfry+B9ppXAB3aVBB1gG9gxqhg/OBCPpV2QUNswmjvfmyXEdaWv8qODssBgX7on792h44w==
dependencies:
- "@babel/helper-function-name" "^7.1.0"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-function-name" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-literals@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1"
- integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==
+"@babel/plugin-transform-literals@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.0.tgz#bda7a4773293ee9b687174eb4e1f91fe37ed576f"
+ integrity sha512-7UDPKG+uVltsZt98Hw+rMbLg772r8fQC6YJ2fNDckcpAXgIWqQbMCmCpfYo0hBNhdhqocM73auk4P/zziQshQw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-member-expression-literals@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d"
- integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==
+"@babel/plugin-transform-member-expression-literals@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.0.tgz#da3e170e99c2fd1110785cc6146aa2f45429f664"
+ integrity sha512-lJSdaWR56wmrosCiyqKFRVnLrFYoVAk2mtZAyegt7akeJky/gguv0Rukx9GV3XwHGuM1ZPE06cZMjNlcLp8LrQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-modules-amd@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91"
- integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==
+"@babel/plugin-transform-modules-amd@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.0.tgz#09f4fb47a2a7d4471866afeb446bc9a068a091b0"
+ integrity sha512-mFr1O3TaDL4XozM3AzNPz9AsxzzjTxwn4aOShYP5TlO+4rufvjagV2KKDTPMZTQm1ZA/C/PxJDsDekEnnUGz5A==
dependencies:
- "@babel/helper-module-transforms" "^7.1.0"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-module-transforms" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
babel-plugin-dynamic-import-node "^2.3.0"
-"@babel/plugin-transform-modules-commonjs@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74"
- integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==
+"@babel/plugin-transform-modules-commonjs@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.0.tgz#69c682a41905f8885ffb9c37ab34ad1fe8ec3fd7"
+ integrity sha512-w2g8tmL7NgBYt6alc8YawMcmPiYqnVvvI0kLB++VOUOssqdJMAkfQOMGV+2M8H5uhJYDaAghAVMUYps3s+jMrw==
dependencies:
- "@babel/helper-module-transforms" "^7.4.4"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-simple-access" "^7.1.0"
+ "@babel/helper-module-transforms" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/helper-simple-access" "^7.8.0"
babel-plugin-dynamic-import-node "^2.3.0"
-"@babel/plugin-transform-modules-systemjs@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249"
- integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==
+"@babel/plugin-transform-modules-systemjs@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.0.tgz#b0ff0106a7f8a465a75ce5167c88b648770b0a0c"
+ integrity sha512-tKF9KLiIsiKyWTVU0yo+NcNAylGn7euggYwXw63/tMxGtDTPsB9Y7Ecqv4EoXEwtoJOJ0Lewf17oaWQtindxIA==
dependencies:
- "@babel/helper-hoist-variables" "^7.4.4"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-hoist-variables" "^7.8.0"
+ "@babel/helper-module-transforms" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
babel-plugin-dynamic-import-node "^2.3.0"
-"@babel/plugin-transform-modules-umd@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae"
- integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==
+"@babel/plugin-transform-modules-umd@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.0.tgz#edc1a7a587a31a185070421f97ae3798b15df9b7"
+ integrity sha512-lAwNfXwmfTy7fl2XOyoVpMXnLkJANgH0vdSYNFcS4RuJPBtHfunGA+Y0L7wsHmfPzyVYt8sUglLjaWtdZMNJNg==
dependencies:
- "@babel/helper-module-transforms" "^7.1.0"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-module-transforms" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5":
- version "7.4.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106"
- integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.0.tgz#718e168e7f5ab83fa7e4dfd0cf1831804fc016f0"
+ integrity sha512-kq1rxQ1HviCP13SMGZ4WjBBpdogTGK7yn/g/+p+g1AQledgHOWKVeMY1DwKYGlGJ/grDGTOqpJLF1v3Sb7ghKA==
dependencies:
- regexp-tree "^0.1.6"
+ "@babel/helper-create-regexp-features-plugin" "^7.8.0"
-"@babel/plugin-transform-new-target@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5"
- integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==
+"@babel/plugin-transform-new-target@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.0.tgz#54d126788abc648cab27bc9b74a8306b4158f70f"
+ integrity sha512-hH1Afz9Xy/wkcxhoI0vYw48kTBJqYUhMmhp3SLI1p817iByM6ItH4LS8tZatDAIKmAQAXj8d3Ups1BgVJECDrA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-object-super@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9"
- integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==
+"@babel/plugin-transform-object-super@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.0.tgz#aa35d295dd62b84bbea2e155e0b3a2017eb2f4e8"
+ integrity sha512-2DYqQ811nRlFVlni6iqfxBVVGqkBgfvEv/lcvmdNu2CaG+EA7zSP1hqYUsqamR+uCdDbsrV7uY6/0rkXbJo5YQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.5.5"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/helper-replace-supers" "^7.8.0"
-"@babel/plugin-transform-parameters@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16"
- integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==
+"@babel/plugin-transform-parameters@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.0.tgz#edc1531beed51fb8a49e0a3f11ca6b508d083d6f"
+ integrity sha512-9R2yykk7H92rntETO0fq52vJ4OFaTcDA49K9s8bQPyoD4o3/SkWEklukArCsQC6fowEuraPkH/umopr9uO539g==
dependencies:
- "@babel/helper-call-delegate" "^7.4.4"
- "@babel/helper-get-function-arity" "^7.0.0"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-call-delegate" "^7.8.0"
+ "@babel/helper-get-function-arity" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-property-literals@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905"
- integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==
+"@babel/plugin-transform-property-literals@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.0.tgz#af7538d916935ece100e72123fce109182c01ac3"
+ integrity sha512-vjZaQlojnZIahu5ofEW+hPJfDI5A6r2Sbi5C0RuCaAOFj7viDIR5kOR7ul3Fz5US8V1sVk5Zd2yuPaz7iBeysg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-react-display-name@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0"
- integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==
+"@babel/plugin-transform-react-display-name@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.0.tgz#4aa02b070a83bb12033f483bf65ab2444ba1832a"
+ integrity sha512-oozdOhU2hZ6Tb9LS9BceGqDSmiUrlZX8lmRqnxQuiGzqWlhflIRQ1oFBHdV+hv+Zi9e5BhRkfSYtMLRLEkuOVA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-react-jsx-self@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba"
- integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==
+"@babel/plugin-transform-react-jsx-self@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.0.tgz#bd067b0ca21cf33eac80b7dfddf8699f1d13a943"
+ integrity sha512-hJXfJdLDDlJoxW/rAjkuIpGUUTizQ6fN9tIciW1M8KIqFsmpEf9psBPNTXYRCOLYLEsra+/WgVq+sc+1z05nQw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-jsx" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/plugin-syntax-jsx" "^7.8.0"
-"@babel/plugin-transform-react-jsx-source@^7.0.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b"
- integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==
+"@babel/plugin-transform-react-jsx-source@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.0.tgz#97681728c12d770449d1c3657621afe974645e59"
+ integrity sha512-W+0VXOhMRdUTL7brjKXND+BiXbsxczfMdZongQ/Jtti0JVMtcTxWo66NMxNNtbPYvbc4aUXmgjl3eMms41sYtg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-jsx" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/plugin-syntax-jsx" "^7.8.0"
-"@babel/plugin-transform-react-jsx@^7.0.0":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290"
- integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==
+"@babel/plugin-transform-react-jsx@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.0.tgz#5676f2a13befc16fa2a78bc557e02ff150c02a28"
+ integrity sha512-r5DgP2ZblaGmW/azRS9rlaf3oY4r/ByXRDA5Lcr3iHUkx3cCfL9RM10gU7AQmzwKymoq8LZ55sHyq9VeQFHwyQ==
dependencies:
- "@babel/helper-builder-react-jsx" "^7.3.0"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-jsx" "^7.2.0"
+ "@babel/helper-builder-react-jsx" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/plugin-syntax-jsx" "^7.8.0"
-"@babel/plugin-transform-regenerator@^7.4.5":
- version "7.4.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f"
- integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==
+"@babel/plugin-transform-regenerator@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.0.tgz#4a0a40af2f7d60a54a3fd7ce58f06b12ab14eaf9"
+ integrity sha512-n88GT8PZuOHWxqxCJORW3g1QaYzQhHu5sEslxYeQkHVoewfnfuWN37t7YGaRLaNUdaZUlRPXhDcLGT7zBa/u0g==
dependencies:
regenerator-transform "^0.14.0"
-"@babel/plugin-transform-reserved-words@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634"
- integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==
+"@babel/plugin-transform-reserved-words@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.0.tgz#572f21e11b9271e67cc5695890b8d5e58186f51e"
+ integrity sha512-DnshRyDTXZhmAgO2c1QKZI4CfZjoP2t3fSwRsnbCP9P/FSBpf9I7ovnAELswklw5OeY+/D/JIiaGLoUt2II3LA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-shorthand-properties@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0"
- integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==
+"@babel/plugin-transform-shorthand-properties@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.0.tgz#38b43048e633878f82a3ef1353868c12015ac838"
+ integrity sha512-sExhzq63Gl2PMbl7ETpN7Z1A38rLD6GeCT6EEEIIKjTVt9u6dRqJ6nHhaquL7QgR3egj/8fcvq23UvzfPqGAYA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-spread@^7.2.0":
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406"
- integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==
+"@babel/plugin-transform-spread@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.0.tgz#939e17585b1f24535fdeafc5e11a439520f4b3ab"
+ integrity sha512-6Zjl0pv6x10YmFVRI0VhwJ/rE++geVHNJ9xwd+UIt3ON2VMRO7qI2lPsyLnzidR5HYNd/JXj47kdU9Rrn4YcnQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-sticky-regex@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1"
- integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==
+"@babel/plugin-transform-sticky-regex@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.0.tgz#98f634d133f7be471e1e6ccc613c6a95e7e9f1f5"
+ integrity sha512-uksok0Bqox8YeIRFhr6RRtlBXeGpN1ogiEVjEd7A7rVLPZBXKGbL7kODpE7MQ+avjDLv5EEKtDCeYuWZK7FF7g==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-regex" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/helper-regex" "^7.8.0"
-"@babel/plugin-transform-template-literals@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0"
- integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==
+"@babel/plugin-transform-template-literals@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.0.tgz#2e19e890cc5b0d58643ee6986840e928d707f7ef"
+ integrity sha512-EF7Q7LEgeMpogHcvmHMNXBWdLWG1tpA1ErXH3i8zTu3+UEKo6aBn+FldPAJ16UbbbOwSCUCiDP6oZxvVRPhwnQ==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.0.0"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-annotate-as-pure" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-typeof-symbol@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2"
- integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==
+"@babel/plugin-transform-typeof-symbol@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.0.tgz#a8d0dd317349d3dcbb9d659808099c94486554a5"
+ integrity sha512-rEUBEFzsA9mCS2r7EtXFlM/6GqtzgLdC4WVYM9fIgJX+HcSJ8oMmj8LinfKhbo0ipRauvUM2teE2iNDNqDwO1g==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-transform-unicode-regex@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f"
- integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==
+"@babel/plugin-transform-unicode-regex@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.0.tgz#20988246a9d98271f861be422e5a17898b80e5b0"
+ integrity sha512-qDg8wsnE47B/Sj8ZtOndPHrGBxJMssZJ71SzXrItum9n++iVFN7kYuJO+OHhjom7+/or0zzYqvJNzCkUjyNKqg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-regex" "^7.4.4"
- regexpu-core "^4.5.4"
+ "@babel/helper-create-regexp-features-plugin" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
"@babel/preset-env@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a"
- integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==
- dependencies:
- "@babel/helper-module-imports" "^7.0.0"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-proposal-async-generator-functions" "^7.2.0"
- "@babel/plugin-proposal-dynamic-import" "^7.5.0"
- "@babel/plugin-proposal-json-strings" "^7.2.0"
- "@babel/plugin-proposal-object-rest-spread" "^7.5.5"
- "@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
- "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
- "@babel/plugin-syntax-async-generators" "^7.2.0"
- "@babel/plugin-syntax-dynamic-import" "^7.2.0"
- "@babel/plugin-syntax-json-strings" "^7.2.0"
- "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
- "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
- "@babel/plugin-transform-arrow-functions" "^7.2.0"
- "@babel/plugin-transform-async-to-generator" "^7.5.0"
- "@babel/plugin-transform-block-scoped-functions" "^7.2.0"
- "@babel/plugin-transform-block-scoping" "^7.5.5"
- "@babel/plugin-transform-classes" "^7.5.5"
- "@babel/plugin-transform-computed-properties" "^7.2.0"
- "@babel/plugin-transform-destructuring" "^7.5.0"
- "@babel/plugin-transform-dotall-regex" "^7.4.4"
- "@babel/plugin-transform-duplicate-keys" "^7.5.0"
- "@babel/plugin-transform-exponentiation-operator" "^7.2.0"
- "@babel/plugin-transform-for-of" "^7.4.4"
- "@babel/plugin-transform-function-name" "^7.4.4"
- "@babel/plugin-transform-literals" "^7.2.0"
- "@babel/plugin-transform-member-expression-literals" "^7.2.0"
- "@babel/plugin-transform-modules-amd" "^7.5.0"
- "@babel/plugin-transform-modules-commonjs" "^7.5.0"
- "@babel/plugin-transform-modules-systemjs" "^7.5.0"
- "@babel/plugin-transform-modules-umd" "^7.2.0"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5"
- "@babel/plugin-transform-new-target" "^7.4.4"
- "@babel/plugin-transform-object-super" "^7.5.5"
- "@babel/plugin-transform-parameters" "^7.4.4"
- "@babel/plugin-transform-property-literals" "^7.2.0"
- "@babel/plugin-transform-regenerator" "^7.4.5"
- "@babel/plugin-transform-reserved-words" "^7.2.0"
- "@babel/plugin-transform-shorthand-properties" "^7.2.0"
- "@babel/plugin-transform-spread" "^7.2.0"
- "@babel/plugin-transform-sticky-regex" "^7.2.0"
- "@babel/plugin-transform-template-literals" "^7.4.4"
- "@babel/plugin-transform-typeof-symbol" "^7.2.0"
- "@babel/plugin-transform-unicode-regex" "^7.4.4"
- "@babel/types" "^7.5.5"
- browserslist "^4.6.0"
- core-js-compat "^3.1.1"
+ version "7.8.2"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.2.tgz#dd55bd61f5d0bb1237915173c0e94aa350de3089"
+ integrity sha512-AF2YUl2bGsLWTtFL68upTTB7nDo05aEcKjHmXJE+aXRvsx5K+9yRsHQP3MjnTrLOWe/eFyUr93dfILROsKC4eg==
+ dependencies:
+ "@babel/compat-data" "^7.8.0"
+ "@babel/helper-compilation-targets" "^7.8.0"
+ "@babel/helper-module-imports" "^7.8.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/plugin-proposal-async-generator-functions" "^7.8.0"
+ "@babel/plugin-proposal-dynamic-import" "^7.8.0"
+ "@babel/plugin-proposal-json-strings" "^7.8.0"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.8.0"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.8.0"
+ "@babel/plugin-proposal-optional-chaining" "^7.8.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.8.0"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+ "@babel/plugin-syntax-top-level-await" "^7.8.0"
+ "@babel/plugin-transform-arrow-functions" "^7.8.0"
+ "@babel/plugin-transform-async-to-generator" "^7.8.0"
+ "@babel/plugin-transform-block-scoped-functions" "^7.8.0"
+ "@babel/plugin-transform-block-scoping" "^7.8.0"
+ "@babel/plugin-transform-classes" "^7.8.0"
+ "@babel/plugin-transform-computed-properties" "^7.8.0"
+ "@babel/plugin-transform-destructuring" "^7.8.0"
+ "@babel/plugin-transform-dotall-regex" "^7.8.0"
+ "@babel/plugin-transform-duplicate-keys" "^7.8.0"
+ "@babel/plugin-transform-exponentiation-operator" "^7.8.0"
+ "@babel/plugin-transform-for-of" "^7.8.0"
+ "@babel/plugin-transform-function-name" "^7.8.0"
+ "@babel/plugin-transform-literals" "^7.8.0"
+ "@babel/plugin-transform-member-expression-literals" "^7.8.0"
+ "@babel/plugin-transform-modules-amd" "^7.8.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.8.0"
+ "@babel/plugin-transform-modules-systemjs" "^7.8.0"
+ "@babel/plugin-transform-modules-umd" "^7.8.0"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.0"
+ "@babel/plugin-transform-new-target" "^7.8.0"
+ "@babel/plugin-transform-object-super" "^7.8.0"
+ "@babel/plugin-transform-parameters" "^7.8.0"
+ "@babel/plugin-transform-property-literals" "^7.8.0"
+ "@babel/plugin-transform-regenerator" "^7.8.0"
+ "@babel/plugin-transform-reserved-words" "^7.8.0"
+ "@babel/plugin-transform-shorthand-properties" "^7.8.0"
+ "@babel/plugin-transform-spread" "^7.8.0"
+ "@babel/plugin-transform-sticky-regex" "^7.8.0"
+ "@babel/plugin-transform-template-literals" "^7.8.0"
+ "@babel/plugin-transform-typeof-symbol" "^7.8.0"
+ "@babel/plugin-transform-unicode-regex" "^7.8.0"
+ "@babel/types" "^7.8.0"
+ browserslist "^4.8.2"
+ core-js-compat "^3.6.2"
invariant "^2.2.2"
- js-levenshtein "^1.1.3"
+ levenary "^1.1.0"
semver "^5.5.0"
"@babel/preset-react@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0"
- integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.8.0.tgz#fe3bdecfc94e9b4eb3aa2751cfb284e739e810be"
+ integrity sha512-GP9t18RjtH67ea3DA2k71VqtMnTOupYJx34Z+KUEBRoRxvdETaucmtMWH5uoGHWzAD4qxbuV5ckxpewm39NXkA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-transform-react-display-name" "^7.0.0"
- "@babel/plugin-transform-react-jsx" "^7.0.0"
- "@babel/plugin-transform-react-jsx-self" "^7.0.0"
- "@babel/plugin-transform-react-jsx-source" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+ "@babel/plugin-transform-react-display-name" "^7.8.0"
+ "@babel/plugin-transform-react-jsx" "^7.8.0"
+ "@babel/plugin-transform-react-jsx-self" "^7.8.0"
+ "@babel/plugin-transform-react-jsx-source" "^7.8.0"
"@babel/runtime@^7.1.2":
- version "7.3.4"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.4.tgz#73d12ba819e365fcf7fd152aed56d6df97d21c83"
- integrity sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==
- dependencies:
- regenerator-runtime "^0.12.0"
-
-"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237"
- integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==
- dependencies:
- "@babel/code-frame" "^7.0.0"
- "@babel/parser" "^7.4.4"
- "@babel/types" "^7.4.4"
-
-"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb"
- integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==
- dependencies:
- "@babel/code-frame" "^7.5.5"
- "@babel/generator" "^7.5.5"
- "@babel/helper-function-name" "^7.1.0"
- "@babel/helper-split-export-declaration" "^7.4.4"
- "@babel/parser" "^7.5.5"
- "@babel/types" "^7.5.5"
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.0.tgz#8c81711517c56b3d00c6de706b0fb13dc3531549"
+ integrity sha512-Z7ti+HB0puCcLmFE3x90kzaVgbx6TRrYIReaygW6EkBEnJh1ajS4/inhF7CypzWeDV3NFl1AfWj0eMtdihojxw==
+ dependencies:
+ regenerator-runtime "^0.13.2"
+
+"@babel/template@^7.4.0", "@babel/template@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.0.tgz#a32f57ad3be89c0fa69ae87b53b4826844dc6330"
+ integrity sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==
+ dependencies:
+ "@babel/code-frame" "^7.8.0"
+ "@babel/parser" "^7.8.0"
+ "@babel/types" "^7.8.0"
+
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.0.tgz#d85266fdcff553c10e57b672604b36383a127c1f"
+ integrity sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==
+ dependencies:
+ "@babel/code-frame" "^7.8.0"
+ "@babel/generator" "^7.8.0"
+ "@babel/helper-function-name" "^7.8.0"
+ "@babel/helper-split-export-declaration" "^7.8.0"
+ "@babel/parser" "^7.8.0"
+ "@babel/types" "^7.8.0"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.13"
-"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a"
- integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==
+"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.0.tgz#1a2039a028057a2c888b668d94c98e61ea906e7f"
+ integrity sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==
dependencies:
esutils "^2.0.2"
lodash "^4.17.13"
@@ -908,9 +977,9 @@
webpack-manifest-plugin "^1.3.2"
"@types/babel__core@^7.1.0":
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.2.tgz#608c74f55928033fce18b99b213c16be4b3d114f"
- integrity sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30"
+ integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
@@ -919,9 +988,9 @@
"@types/babel__traverse" "*"
"@types/babel__generator@*":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc"
- integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==
+ version "7.6.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04"
+ integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==
dependencies:
"@babel/types" "^7.0.0"
@@ -934,9 +1003,9 @@
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
- version "7.0.7"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f"
- integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==
+ version "7.0.8"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012"
+ integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==
dependencies:
"@babel/types" "^7.3.0"
@@ -961,9 +1030,14 @@
"@types/istanbul-lib-report" "*"
"@types/node@*":
- version "12.7.2"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.2.tgz#c4e63af5e8823ce9cc3f0b34f7b998c2171f0c44"
- integrity sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg==
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.6.tgz#076028d0b0400be8105b89a0a55550c86684ffec"
+ integrity sha512-Jg1F+bmxcpENHP23sVKkNuU3uaxPnsBMW0cLjleiikFKomJQbsn0Cqk2yDvQArqzZN6ABfBkZ0To7pQ8sLdWDg==
+
+"@types/q@^1.5.1":
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
+ integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
"@types/stack-utils@^1.0.1":
version "1.0.1"
@@ -971,21 +1045,21 @@
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
"@types/yargs-parser@*":
- version "13.0.0"
- resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.0.0.tgz#453743c5bbf9f1bed61d959baab5b06be029b2d0"
- integrity sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw==
+ version "13.1.0"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228"
+ integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==
"@types/yargs@^13.0.0":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.2.tgz#a64674fc0149574ecd90ba746e932b5a5f7b3653"
- integrity sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==
+ version "13.0.5"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.5.tgz#18121bfd39dc12f280cee58f92c5b21d32041908"
+ integrity sha512-CF/+sxTO7FOwbIRL4wMv0ZYLCRfMid2HQpzDRyViH7kSpfoAFiMdGqKIxb1PxWfjtQXQhnQuD33lvRHNwr809Q==
dependencies:
"@types/yargs-parser" "*"
abab@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f"
- integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a"
+ integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==
abbrev@1:
version "1.1.1"
@@ -1000,9 +1074,9 @@ acorn-dynamic-import@^2.0.0:
acorn "^4.0.3"
acorn-globals@^4.1.0:
- version "4.3.3"
- resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.3.tgz#a86f75b69680b8780d30edd21eee4e0ea170c05e"
- integrity sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7"
+ integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==
dependencies:
acorn "^6.0.1"
acorn-walk "^6.0.1"
@@ -1035,11 +1109,11 @@ acorn@^5.0.0, acorn@^5.5.0, acorn@^5.5.3:
integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
acorn@^6.0.1:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e"
- integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784"
+ integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==
-airbnb-prop-types@^2.13.2:
+airbnb-prop-types@^2.15.0:
version "2.15.0"
resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz#5287820043af1eb469f5b0af0d6f70da6c52aaef"
integrity sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==
@@ -1061,9 +1135,9 @@ ajv-keywords@^2.1.0:
integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=
ajv-keywords@^3.1.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d"
- integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
ajv@^5.0.0, ajv@^5.2.3, ajv@^5.3.0:
version "5.5.2"
@@ -1076,9 +1150,9 @@ ajv@^5.0.0, ajv@^5.2.3, ajv@^5.3.0:
json-schema-traverse "^0.3.0"
ajv@^6.1.0, ajv@^6.4.0, ajv@^6.5.5:
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
- integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
+ version "6.10.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
+ integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
dependencies:
fast-deep-equal "^2.0.1"
fast-json-stable-stringify "^2.0.0"
@@ -1094,7 +1168,7 @@ align-text@^0.1.1, align-text@^0.1.3:
longest "^1.0.1"
repeat-string "^1.5.2"
-alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
+alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
@@ -1207,14 +1281,13 @@ array.prototype.find@^2.1.0:
define-properties "^1.1.3"
es-abstract "^1.13.0"
-array.prototype.flat@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4"
- integrity sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==
+array.prototype.flat@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
+ integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.10.0"
- function-bind "^1.1.1"
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
asap@~2.0.3:
version "2.0.6"
@@ -1243,10 +1316,11 @@ assert-plus@1.0.0, assert-plus@^1.0.0:
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
assert@^1.1.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
- integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
dependencies:
+ object-assign "^4.1.1"
util "0.10.3"
assign-symbols@^1.0.0:
@@ -1260,9 +1334,9 @@ astral-regex@^1.0.0:
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
async-each@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
- integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
async-foreach@^0.1.3:
version "0.1.3"
@@ -1275,18 +1349,18 @@ async-limiter@~1.0.0:
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
async@^2.1.2, async@^2.4.1:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381"
- integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
dependencies:
- lodash "^4.17.11"
+ lodash "^4.17.14"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-atob@^2.1.1:
+atob@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
@@ -1321,9 +1395,9 @@ aws-sign2@~0.7.0:
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
aws4@^1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
- integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c"
+ integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==
babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
version "6.26.0"
@@ -1965,9 +2039,9 @@ balanced-match@^1.0.0:
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
base64-js@^1.0.2:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
- integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+ integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
base@^0.11.1:
version "0.11.2"
@@ -1995,9 +2069,16 @@ big.js@^5.2.2:
integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
binary-extensions@^1.0.0:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1"
- integrity sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
block-stream@*:
version "0.0.9"
@@ -2007,16 +2088,16 @@ block-stream@*:
inherits "~2.0.0"
bluebird@^3.5.1:
- version "3.5.3"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
- integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.8"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
-boolbase@~1.0.0:
+boolbase@^1.0.0, boolbase@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
@@ -2145,19 +2226,19 @@ browserslist@^3.2.6:
caniuse-lite "^1.0.30000844"
electron-to-chromium "^1.3.47"
-browserslist@^4.6.0, browserslist@^4.6.6:
- version "4.6.6"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.6.tgz#6e4bf467cde520bc9dbdf3747dafa03531cec453"
- integrity sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==
+browserslist@^4.0.0, browserslist@^4.8.2, browserslist@^4.8.3:
+ version "4.8.3"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.3.tgz#65802fcd77177c878e015f0e3189f2c4f627ba44"
+ integrity sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==
dependencies:
- caniuse-lite "^1.0.30000984"
- electron-to-chromium "^1.3.191"
- node-releases "^1.1.25"
+ caniuse-lite "^1.0.30001017"
+ electron-to-chromium "^1.3.322"
+ node-releases "^1.1.44"
-bser@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5"
- integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
dependencies:
node-int64 "^0.4.0"
@@ -2172,9 +2253,9 @@ buffer-xor@^1.0.3:
integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
buffer@^4.3.0:
- version "4.9.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
- integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+ integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
dependencies:
base64-js "^1.0.2"
ieee754 "^1.1.4"
@@ -2219,6 +2300,13 @@ cache-base@^1.0.1:
union-value "^1.0.0"
unset-value "^1.0.0"
+caller-callsite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+ dependencies:
+ callsites "^2.0.0"
+
caller-path@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
@@ -2226,11 +2314,23 @@ caller-path@^0.1.0:
dependencies:
callsites "^0.2.0"
+caller-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+ dependencies:
+ caller-callsite "^2.0.0"
+
callsites@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
@@ -2289,20 +2389,25 @@ caniuse-api@^2.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
-caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
- version "1.0.30000942"
- resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000942.tgz#e29e4c6afa3558edafe7c190c7f8bdd93fb7c486"
- integrity sha512-HB+j2/Gywe+0JPtEMw8ioTi4ykIOco9nfSGspMGIBocqi4aMYZYALP992RmhVcUyB0oS5h8nrKGk9fCF9L1VXA==
+caniuse-api@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+ integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-lite "^1.0.0"
+ lodash.memoize "^4.1.2"
+ lodash.uniq "^4.5.0"
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000830, caniuse-lite@^1.0.30000844:
- version "1.0.30000942"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000942.tgz#454139b28274bce70bfe1d50c30970df7430c6e4"
- integrity sha512-wLf+IhZUy2rfz48tc40OH7jHjXjnvDFEYqBHluINs/6MgzoNLPf25zhE4NOVzqxLKndf+hau81sAW0RcGHIaBQ==
+caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
+ version "1.0.30001020"
+ resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001020.tgz#30c82517d283d6a64df76ea7734fade566e7e5e7"
+ integrity sha512-KMZ0k2Xg+UiQemGBh+cFKnnFi/oEYZcuGWSb1B0gofoP89ZI/fmjYJ8J9lQb9OnSupdG6cHZSxn+LtFli2Q07w==
-caniuse-lite@^1.0.30000984:
- version "1.0.30000989"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9"
- integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000830, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001017:
+ version "1.0.30001020"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001020.tgz#3f04c1737500ffda78be9beb0b5c1e2070e15926"
+ integrity sha512-yWIvwA68wRHKanAVS1GjN8vajAv7MBFshullKCeq/eKpK7pJBVDgFFEqvgWTkcP2+wIDeQGYFRXECjKZnLkUjA==
capture-exit@^2.0.0:
version "2.0.0"
@@ -2359,7 +2464,7 @@ chardet@^0.4.0:
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
-cheerio@^1.0.0-rc.2:
+cheerio@^1.0.0-rc.3:
version "1.0.0-rc.3"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==
@@ -2371,26 +2476,7 @@ cheerio@^1.0.0-rc.2:
lodash "^4.15.0"
parse5 "^3.0.1"
-chokidar@^2.0.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058"
- integrity sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==
- dependencies:
- anymatch "^2.0.0"
- async-each "^1.0.1"
- braces "^2.3.2"
- glob-parent "^3.1.0"
- inherits "^2.0.3"
- is-binary-path "^1.0.0"
- is-glob "^4.0.0"
- normalize-path "^3.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.2.1"
- upath "^1.1.0"
- optionalDependencies:
- fsevents "^1.2.7"
-
-chokidar@^2.0.4:
+chokidar@^2.0.2, chokidar@^2.1.8:
version "2.1.8"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
@@ -2409,10 +2495,10 @@ chokidar@^2.0.4:
optionalDependencies:
fsevents "^1.2.7"
-chownr@^1.0.1, chownr@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
- integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
+chownr@^1.0.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142"
+ integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==
ci-info@^2.0.0:
version "2.0.0"
@@ -2518,6 +2604,15 @@ co@^4.6.0:
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+coa@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+ integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+ dependencies:
+ "@types/q" "^1.5.1"
+ chalk "^2.4.1"
+ q "^1.1.2"
+
coa@~1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
@@ -2595,6 +2690,14 @@ color@^2.0.1:
color-convert "^1.9.1"
color-string "^1.5.2"
+color@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
+ integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
+ dependencies:
+ color-convert "^1.9.1"
+ color-string "^1.5.2"
+
colormin@^1.0.5:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
@@ -2610,16 +2713,21 @@ colors@~1.1.2:
integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM=
combined-stream@^1.0.6, combined-stream@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
- integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
-commander@^2.19.0, commander@^2.8.1, commander@~2.20.0:
- version "2.20.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
- integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
+commander@^2.19.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83"
+ integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw==
commander@~2.13.0:
version "2.13.0"
@@ -2632,9 +2740,9 @@ commondir@^1.0.1:
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
component-emitter@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
- integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
compression-webpack-plugin@^1.1.11:
version "1.1.12"
@@ -2663,11 +2771,9 @@ concat-stream@^1.5.0, concat-stream@^1.6.0:
typedarray "^0.0.6"
console-browserify@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
- integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
- dependencies:
- date-now "^0.1.4"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
@@ -2679,10 +2785,10 @@ constants-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
-convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
- integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
dependencies:
safe-buffer "~5.1.1"
@@ -2703,13 +2809,13 @@ copy-descriptor@^0.1.0:
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-core-js-compat@^3.1.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.2.1.tgz#0cbdbc2e386e8e00d3b85dc81c848effec5b8150"
- integrity sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==
+core-js-compat@^3.6.2:
+ version "3.6.3"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.3.tgz#41e281ca771209d5f2eb63ce34f96037d0928538"
+ integrity sha512-Y3YNGU3bU1yrnzVodop23ghArbKv4IqkZg9MMOWv/h7KT6NRk1/SzHhWDDlubg2+tlcUzAqgj1/GyeJ9fUKMeg==
dependencies:
- browserslist "^4.6.6"
- semver "^6.3.0"
+ browserslist "^4.8.3"
+ semver "7.0.0"
core-js@^1.0.0:
version "1.2.7"
@@ -2717,24 +2823,24 @@ core-js@^1.0.0:
integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
core-js@^2.4.0, core-js@^2.5.0:
- version "2.6.5"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895"
- integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
+ integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-cosmiconfig@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc"
- integrity sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==
+cosmiconfig@^5.0.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
dependencies:
+ import-fresh "^2.0.0"
is-directory "^0.3.1"
- js-yaml "^3.9.0"
+ js-yaml "^3.13.1"
parse-json "^4.0.0"
- require-from-string "^2.0.1"
create-ecdh@^4.0.0:
version "4.0.3"
@@ -2831,11 +2937,19 @@ css-color-function@~1.3.3:
debug "^3.1.0"
rgb "~0.1.0"
-css-color-names@0.0.4:
+css-color-names@0.0.4, css-color-names@^0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
+css-declaration-sorter@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22"
+ integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==
+ dependencies:
+ postcss "^7.0.1"
+ timsort "^0.3.0"
+
css-loader@^0.28.11:
version "0.28.11"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7"
@@ -2856,6 +2970,21 @@ css-loader@^0.28.11:
postcss-value-parser "^3.3.0"
source-list-map "^2.0.0"
+css-select-base-adapter@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+ integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
+ integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^3.2.1"
+ domutils "^1.7.0"
+ nth-check "^1.0.2"
+
css-select@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
@@ -2875,6 +3004,14 @@ css-selector-tokenizer@^0.7.0:
fastparse "^1.1.1"
regexpu-core "^1.0.0"
+css-tree@1.0.0-alpha.37:
+ version "1.0.0-alpha.37"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
+ integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==
+ dependencies:
+ mdn-data "2.0.4"
+ source-map "^0.6.1"
+
css-unit-converter@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
@@ -2885,12 +3022,80 @@ css-what@2.1:
resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
+css-what@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1"
+ integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==
+
cssesc@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=
-cssnano@^3.10.0, cssnano@^3.4.0:
+cssesc@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703"
+ integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==
+
+cssnano-preset-default@^4.0.7:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76"
+ integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==
+ dependencies:
+ css-declaration-sorter "^4.0.1"
+ cssnano-util-raw-cache "^4.0.1"
+ postcss "^7.0.0"
+ postcss-calc "^7.0.1"
+ postcss-colormin "^4.0.3"
+ postcss-convert-values "^4.0.1"
+ postcss-discard-comments "^4.0.2"
+ postcss-discard-duplicates "^4.0.2"
+ postcss-discard-empty "^4.0.1"
+ postcss-discard-overridden "^4.0.1"
+ postcss-merge-longhand "^4.0.11"
+ postcss-merge-rules "^4.0.3"
+ postcss-minify-font-values "^4.0.2"
+ postcss-minify-gradients "^4.0.2"
+ postcss-minify-params "^4.0.2"
+ postcss-minify-selectors "^4.0.2"
+ postcss-normalize-charset "^4.0.1"
+ postcss-normalize-display-values "^4.0.2"
+ postcss-normalize-positions "^4.0.2"
+ postcss-normalize-repeat-style "^4.0.2"
+ postcss-normalize-string "^4.0.2"
+ postcss-normalize-timing-functions "^4.0.2"
+ postcss-normalize-unicode "^4.0.1"
+ postcss-normalize-url "^4.0.1"
+ postcss-normalize-whitespace "^4.0.2"
+ postcss-ordered-values "^4.1.2"
+ postcss-reduce-initial "^4.0.3"
+ postcss-reduce-transforms "^4.0.2"
+ postcss-svgo "^4.0.2"
+ postcss-unique-selectors "^4.0.1"
+
+cssnano-util-get-arguments@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f"
+ integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=
+
+cssnano-util-get-match@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d"
+ integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=
+
+cssnano-util-raw-cache@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"
+ integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==
+ dependencies:
+ postcss "^7.0.0"
+
+cssnano-util-same-parent@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
+ integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
+
+cssnano@^3.10.0:
version "3.10.0"
resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=
@@ -2928,6 +3133,23 @@ cssnano@^3.10.0, cssnano@^3.4.0:
postcss-value-parser "^3.2.3"
postcss-zindex "^2.0.1"
+cssnano@^4.1.10:
+ version "4.1.10"
+ resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2"
+ integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==
+ dependencies:
+ cosmiconfig "^5.0.0"
+ cssnano-preset-default "^4.0.7"
+ is-resolvable "^1.0.0"
+ postcss "^7.0.0"
+
+csso@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d"
+ integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==
+ dependencies:
+ css-tree "1.0.0-alpha.37"
+
csso@~2.3.1:
version "2.3.2"
resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
@@ -2955,17 +3177,18 @@ currently-unhandled@^0.4.1:
dependencies:
array-find-index "^1.0.1"
-cyclist@~0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
- integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
-d@1:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
- integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=
+d@1, d@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
dependencies:
- es5-ext "^0.10.9"
+ es5-ext "^0.10.50"
+ type "^1.0.1"
dashdash@^1.12.0:
version "1.14.1"
@@ -2983,12 +3206,7 @@ data-urls@^1.0.0:
whatwg-mimetype "^2.2.0"
whatwg-url "^7.0.0"
-date-now@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
- integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
-
-debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
+debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -3026,11 +3244,6 @@ deep-equal-ident@^1.1.1:
dependencies:
lodash.isequal "^3.0"
-deep-extend@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
- integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
@@ -3081,9 +3294,9 @@ delegates@^1.0.0:
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
des.js@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
- integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+ integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
dependencies:
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
@@ -3095,11 +3308,6 @@ detect-indent@^4.0.0:
dependencies:
repeating "^2.0.0"
-detect-libc@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
- integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
-
detect-newline@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
@@ -3131,7 +3339,7 @@ doctrine@^2.1.0:
dependencies:
esutils "^2.0.2"
-dom-helpers@^3.2.0, dom-helpers@^3.3.1:
+dom-helpers@^3.2.0, dom-helpers@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
@@ -3139,9 +3347,9 @@ dom-helpers@^3.2.0, dom-helpers@^3.3.1:
"@babel/runtime" "^7.1.2"
dom-serializer@0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb"
- integrity sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+ integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
dependencies:
domelementtype "^2.0.1"
entities "^2.0.0"
@@ -3191,7 +3399,7 @@ domutils@1.5.1:
dom-serializer "0"
domelementtype "1"
-domutils@^1.5.1:
+domutils@^1.5.1, domutils@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
@@ -3199,6 +3407,13 @@ domutils@^1.5.1:
dom-serializer "0"
domelementtype "1"
+dot-prop@^4.1.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+ integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
+ dependencies:
+ is-obj "^1.0.0"
+
duplexify@^3.4.2, duplexify@^3.6.0:
version "3.7.1"
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
@@ -3217,20 +3432,15 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
-electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.47:
- version "1.3.113"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9"
- integrity sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==
-
-electron-to-chromium@^1.3.191:
- version "1.3.243"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.243.tgz#32f64f00fa121532d1d49f5c0a15fd77f52ae889"
- integrity sha512-+edFdHGxLSmAKftXa5xZIg19rHkkJLiW+tRu0VMVG3RKztyeKX7d3pXf707lS6+BxB9uBun3RShbxCI1PtBAgQ==
+electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.322, electron-to-chromium@^1.3.47:
+ version "1.3.332"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.332.tgz#283df02d8269e25d9e2f424e11e909c9730a8a82"
+ integrity sha512-AP2HkLhfSOIxP7gDjlyZ4ywGWIcxRMZoU9+JriuVkQe2pSLDdWBsE6+eI6BQOqun1dohLrUTOPHsQLLhhFA7Eg==
elliptic@^6.0.0:
- version "6.4.1"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
- integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
+ integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
dependencies:
bn.js "^4.4.0"
brorand "^1.0.1"
@@ -3258,9 +3468,9 @@ encoding@^0.1.11:
iconv-lite "~0.4.13"
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
- integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
dependencies:
once "^1.4.0"
@@ -3285,72 +3495,82 @@ entities@^2.0.0:
integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==
enzyme-adapter-react-16@^1.14.0:
- version "1.14.0"
- resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.14.0.tgz#204722b769172bcf096cb250d33e6795c1f1858f"
- integrity sha512-7PcOF7pb4hJUvjY7oAuPGpq3BmlCig3kxXGi2kFx0YzJHppqX1K8IIV9skT1IirxXlu8W7bneKi+oQ10QRnhcA==
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.2.tgz#b16db2f0ea424d58a808f9df86ab6212895a4501"
+ integrity sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q==
dependencies:
- enzyme-adapter-utils "^1.12.0"
+ enzyme-adapter-utils "^1.13.0"
+ enzyme-shallow-equal "^1.0.1"
has "^1.0.3"
object.assign "^4.1.0"
- object.values "^1.1.0"
+ object.values "^1.1.1"
prop-types "^15.7.2"
- react-is "^16.8.6"
+ react-is "^16.12.0"
react-test-renderer "^16.0.0-0"
semver "^5.7.0"
-enzyme-adapter-utils@^1.12.0:
- version "1.12.0"
- resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.0.tgz#96e3730d76b872f593e54ce1c51fa3a451422d93"
- integrity sha512-wkZvE0VxcFx/8ZsBw0iAbk3gR1d9hK447ebnSYBf95+r32ezBq+XDSAvRErkc4LZosgH8J7et7H7/7CtUuQfBA==
+enzyme-adapter-utils@^1.13.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.0.tgz#01c885dde2114b4690bf741f8dc94cee3060eb78"
+ integrity sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ==
dependencies:
- airbnb-prop-types "^2.13.2"
- function.prototype.name "^1.1.0"
+ airbnb-prop-types "^2.15.0"
+ function.prototype.name "^1.1.2"
object.assign "^4.1.0"
- object.fromentries "^2.0.0"
+ object.fromentries "^2.0.2"
prop-types "^15.7.2"
- semver "^5.6.0"
+ semver "^5.7.1"
-enzyme-matchers@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/enzyme-matchers/-/enzyme-matchers-7.1.0.tgz#7224298028679af41d224fdff02b9a9a61f2ad86"
- integrity sha512-PCfIvyNnZh4ougBaMXKeqNrN6yilzkbtphpi2X74uFeqbPabDUcvNq30Bcw29sSIv7QI1ZCTlQ2ktGep/4jIBw==
+enzyme-matchers@^7.1.2:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/enzyme-matchers/-/enzyme-matchers-7.1.2.tgz#d80530a61f22d28bb993dd7588abba38bd4de282"
+ integrity sha512-03WqAg2XDl7id9rARIO97HQ1JIw9F2heJ3R4meGu/13hx0ULTDEgl0E67MGl2Uq1jq1DyRnJfto1/VSzskdV5A==
dependencies:
circular-json-es6 "^2.0.1"
deep-equal-ident "^1.1.1"
+enzyme-shallow-equal@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz#7afe03db3801c9b76de8440694096412a8d9d49e"
+ integrity sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ==
+ dependencies:
+ has "^1.0.3"
+ object-is "^1.0.2"
+
enzyme-to-json@^3.3.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.4.0.tgz#2b6330a784a57ba68298e3c0d6cef17ee4fedc0e"
- integrity sha512-gbu8P8PMAtb+qtKuGVRdZIYxWHC03q1dGS3EKRmUzmTDIracu3o6cQ0d4xI2YWojbelbxjYOsmqM5EgAL0WgIA==
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.4.3.tgz#ed4386f48768ed29e2d1a2910893542c34e7e0af"
+ integrity sha512-jqNEZlHqLdz7OTpXSzzghArSS3vigj67IU/fWkPyl1c0TCj9P5s6Ze0kRkYZWNEoCqCR79xlQbigYlMx5erh8A==
dependencies:
- lodash "^4.17.12"
+ lodash "^4.17.15"
enzyme@^3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.10.0.tgz#7218e347c4a7746e133f8e964aada4a3523452f6"
- integrity sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==
- dependencies:
- array.prototype.flat "^1.2.1"
- cheerio "^1.0.0-rc.2"
- function.prototype.name "^1.1.0"
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.11.0.tgz#71d680c580fe9349f6f5ac6c775bc3e6b7a79c28"
+ integrity sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==
+ dependencies:
+ array.prototype.flat "^1.2.3"
+ cheerio "^1.0.0-rc.3"
+ enzyme-shallow-equal "^1.0.1"
+ function.prototype.name "^1.1.2"
has "^1.0.3"
- html-element-map "^1.0.0"
- is-boolean-object "^1.0.0"
- is-callable "^1.1.4"
- is-number-object "^1.0.3"
- is-regex "^1.0.4"
- is-string "^1.0.4"
+ html-element-map "^1.2.0"
+ is-boolean-object "^1.0.1"
+ is-callable "^1.1.5"
+ is-number-object "^1.0.4"
+ is-regex "^1.0.5"
+ is-string "^1.0.5"
is-subset "^0.1.1"
lodash.escape "^4.0.1"
lodash.isequal "^4.5.0"
- object-inspect "^1.6.0"
- object-is "^1.0.1"
+ object-inspect "^1.7.0"
+ object-is "^1.0.2"
object.assign "^4.1.0"
- object.entries "^1.0.4"
- object.values "^1.0.4"
- raf "^3.4.0"
+ object.entries "^1.1.1"
+ object.values "^1.1.1"
+ raf "^3.4.1"
rst-selector-parser "^2.2.3"
- string.prototype.trim "^1.1.2"
+ string.prototype.trim "^1.2.1"
errno@^0.1.3, errno@~0.1.7:
version "0.1.7"
@@ -3366,37 +3586,42 @@ error-ex@^1.2.0, error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.5.1:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
- integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
+es-abstract@^1.13.0, es-abstract@^1.17.0-next.1:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0.tgz#f42a517d0036a5591dbb2c463591dc8bb50309b1"
+ integrity sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==
dependencies:
- es-to-primitive "^1.2.0"
+ es-to-primitive "^1.2.1"
function-bind "^1.1.1"
has "^1.0.3"
- is-callable "^1.1.4"
- is-regex "^1.0.4"
- object-keys "^1.0.12"
+ has-symbols "^1.0.1"
+ is-callable "^1.1.5"
+ is-regex "^1.0.5"
+ object-inspect "^1.7.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimleft "^2.1.1"
+ string.prototype.trimright "^2.1.1"
-es-to-primitive@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
- integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
dependencies:
is-callable "^1.1.4"
is-date-object "^1.0.1"
is-symbol "^1.0.2"
-es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
- version "0.10.48"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.48.tgz#9a0b31eeded39e64453bcedf6f9d50bbbfb43850"
- integrity sha512-CdRvPlX/24Mj5L4NVxTs4804sxiS2CjVprgCmrgoDkdmjdY4D+ySHa7K3jJf8R40dFg0tIm3z/dk326LrnuSGw==
+es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14:
+ version "0.10.53"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
+ integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
dependencies:
es6-iterator "~2.0.3"
- es6-symbol "~3.1.1"
- next-tick "1"
+ es6-symbol "~3.1.3"
+ next-tick "~1.0.0"
-es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
+es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
@@ -3428,7 +3653,7 @@ es6-set@~0.1.5:
es6-symbol "3.1.1"
event-emitter "~0.3.5"
-es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
+es6-symbol@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
@@ -3436,14 +3661,22 @@ es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
d "1"
es5-ext "~0.10.14"
+es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
+ integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
+ dependencies:
+ d "^1.0.1"
+ ext "^1.1.2"
+
es6-weak-map@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
- integrity sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
+ integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
dependencies:
d "1"
- es5-ext "^0.10.14"
- es6-iterator "^2.0.1"
+ es5-ext "^0.10.46"
+ es6-iterator "^2.0.3"
es6-symbol "^3.1.1"
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
@@ -3452,9 +3685,9 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
escodegen@^1.9.1:
- version "1.12.0"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541"
- integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==
+ version "1.12.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.1.tgz#08770602a74ac34c7a90ca9229e7d51e379abc76"
+ integrity sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ==
dependencies:
esprima "^3.1.3"
estraverse "^4.2.0"
@@ -3489,9 +3722,9 @@ eslint-scope@^3.7.1:
estraverse "^4.1.1"
eslint-visitor-keys@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
- integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
+ integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
eslint@^4.19.1:
version "4.19.1"
@@ -3574,26 +3807,16 @@ esrecurse@^4.1.0:
dependencies:
estraverse "^4.1.0"
-estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
- integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
-
-estraverse@^4.2.0:
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-esutils@^2.0.0:
+esutils@^2.0.0, esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
-esutils@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
- integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
-
event-emitter@~0.3.5:
version "0.3.5"
resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
@@ -3603,9 +3826,9 @@ event-emitter@~0.3.5:
es5-ext "~0.10.14"
events@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
- integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
+ integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==
evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
version "1.0.3"
@@ -3616,9 +3839,9 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
safe-buffer "^5.1.1"
exec-sh@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b"
- integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5"
+ integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==
execa@^0.7.0:
version "0.7.0"
@@ -3676,6 +3899,13 @@ expect@^24.9.0:
jest-message-util "^24.9.0"
jest-regex-util "^24.9.0"
+ext@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
+ integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==
+ dependencies:
+ type "^2.0.0"
+
extend-shallow@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
@@ -3750,11 +3980,11 @@ fast-deep-equal@^2.0.1:
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
fast-json-stable-stringify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
- integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-fast-levenshtein@~2.0.4:
+fast-levenshtein@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
@@ -3765,11 +3995,11 @@ fastparse@^1.1.1:
integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
fb-watchman@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
- integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
dependencies:
- bser "^2.0.0"
+ bser "2.1.1"
fbjs@^0.8.9:
version "0.8.17"
@@ -3807,6 +4037,11 @@ file-loader@^1.1.11:
loader-utils "^1.0.2"
schema-utils "^0.4.5"
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
fill-range@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
@@ -3880,9 +4115,9 @@ flat-cache@^1.2.1:
write "^0.2.1"
flatten@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
- integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
+ integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==
flush-write-stream@^1.0.0:
version "1.1.1"
@@ -3949,13 +4184,6 @@ fs-extra@^0.30.0:
path-is-absolute "^1.0.0"
rimraf "^2.2.8"
-fs-minipass@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
- integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
- dependencies:
- minipass "^2.2.1"
-
fs-readdir-recursive@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
@@ -3977,17 +4205,17 @@ fs.realpath@^1.0.0:
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
fsevents@^1.2.7:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4"
- integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==
+ version "1.2.11"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3"
+ integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==
dependencies:
- nan "^2.9.2"
- node-pre-gyp "^0.10.0"
+ bindings "^1.5.0"
+ nan "^2.12.1"
-fstream@^1.0.0, fstream@^1.0.2:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
- integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=
+fstream@^1.0.0, fstream@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
+ integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
dependencies:
graceful-fs "^4.1.2"
inherits "~2.0.0"
@@ -3999,25 +4227,24 @@ function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-function.prototype.name@^1.1.0, function.prototype.name@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.1.tgz#6d252350803085abc2ad423d4fe3be2f9cbda392"
- integrity sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q==
+function.prototype.name@^1.1.1, function.prototype.name@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.2.tgz#5cdf79d7c05db401591dfde83e3b70c5123e9a45"
+ integrity sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==
dependencies:
define-properties "^1.1.3"
- function-bind "^1.1.1"
- functions-have-names "^1.1.1"
- is-callable "^1.1.4"
+ es-abstract "^1.17.0-next.1"
+ functions-have-names "^1.2.0"
functional-red-black-tree@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
-functions-have-names@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.1.1.tgz#79d35927f07b8e7103d819fed475b64ccf7225ea"
- integrity sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw==
+functions-have-names@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.0.tgz#83da7583e4ea0c9ac5ff530f73394b033e0bf77d"
+ integrity sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ==
gauge@~2.7.3:
version "2.7.4"
@@ -4040,6 +4267,11 @@ gaze@^1.0.0:
dependencies:
globule "^1.0.0"
+gensync@^1.0.0-beta.1:
+ version "1.0.0-beta.1"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
+ integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
+
get-caller-file@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
@@ -4092,10 +4324,10 @@ glob-parent@^3.1.0:
is-glob "^3.1.0"
path-dirname "^1.0.0"
-glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
- integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@@ -4104,24 +4336,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.1.1:
- version "7.1.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
- integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-globals@^11.0.1:
- version "11.11.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e"
- integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==
-
-globals@^11.1.0:
+globals@^11.0.1, globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
@@ -4132,40 +4347,24 @@ globals@^9.18.0:
integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
globule@^1.0.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d"
- integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.0.tgz#41d0e9fb44afd4b80d93a23263714f90b3dec904"
+ integrity sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg==
dependencies:
glob "~7.1.1"
lodash "~4.17.10"
minimatch "~3.0.2"
-graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
- version "4.1.15"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
- integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
-
-graceful-fs@^4.1.15:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
- integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
+ integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
growly@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
-handlebars@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67"
- integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==
- dependencies:
- neo-async "^2.6.0"
- optimist "^0.6.1"
- source-map "^0.6.1"
- optionalDependencies:
- uglify-js "^3.1.4"
-
har-schema@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
@@ -4206,10 +4405,10 @@ has-flag@^3.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-has-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
- integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
+has-symbols@^1.0.0, has-symbols@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
has-unicode@^2.0.0:
version "2.0.1"
@@ -4247,7 +4446,7 @@ has-values@^1.0.0:
is-number "^3.0.0"
kind-of "^4.0.0"
-has@^1.0.1, has@^1.0.3:
+has@^1.0.0, has@^1.0.1, has@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
@@ -4270,6 +4469,11 @@ hash.js@^1.0.0, hash.js@^1.0.3:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
+hex-color-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
+ integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
+
hmac-drbg@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -4288,19 +4492,29 @@ home-or-tmp@^2.0.0:
os-tmpdir "^1.0.1"
hosted-git-info@^2.1.4:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
- integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
+ version "2.8.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c"
+ integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==
+
+hsl-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
+ integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=
+
+hsla-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
+ integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg=
html-comment-regex@^1.1.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
-html-element-map@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.1.0.tgz#e5aab9a834caf883b421f8bd9eaedcaac887d63c"
- integrity sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA==
+html-element-map@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.2.0.tgz#dfbb09efe882806af63d990cf6db37993f099f22"
+ integrity sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw==
dependencies:
array-filter "^1.0.0"
@@ -4311,6 +4525,11 @@ html-encoding-sniffer@^1.0.2:
dependencies:
whatwg-encoding "^1.0.1"
+html-escaper@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491"
+ integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==
+
htmlparser2@^3.9.1:
version "3.10.1"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
@@ -4346,7 +4565,7 @@ https-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
-iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
+iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@~0.4.13:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -4373,22 +4592,15 @@ identity-obj-proxy@^3.0.0:
harmony-reflect "^1.4.6"
ieee754@^1.1.4:
- version "1.1.12"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
- integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
iferr@^0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
-ignore-walk@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
- integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
- dependencies:
- minimatch "^3.0.4"
-
ignore@^3.3.3:
version "3.3.10"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
@@ -4401,6 +4613,14 @@ import-cwd@^2.0.0:
dependencies:
import-from "^2.1.0"
+import-fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+ dependencies:
+ caller-path "^2.0.0"
+ resolve-from "^3.0.0"
+
import-from@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
@@ -4438,11 +4658,6 @@ indexes-of@^1.0.1:
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
-indexof@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
- integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
-
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -4451,20 +4666,20 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
inherits@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
-ini@~1.3.0:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
- integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
inquirer@^3.0.6:
version "3.3.0"
@@ -4539,20 +4754,20 @@ is-binary-path@^1.0.0:
dependencies:
binary-extensions "^1.0.0"
-is-boolean-object@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93"
- integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=
+is-boolean-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e"
+ integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==
is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-is-callable@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
- integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+is-callable@^1.1.4, is-callable@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
+ integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
is-ci@^2.0.0:
version "2.0.0"
@@ -4561,6 +4776,18 @@ is-ci@^2.0.0:
dependencies:
ci-info "^2.0.0"
+is-color-stop@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
+ integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=
+ dependencies:
+ css-color-names "^0.0.4"
+ hex-color-regex "^1.1.0"
+ hsl-regex "^1.0.0"
+ hsla-regex "^1.0.0"
+ rgb-regex "^1.0.1"
+ rgba-regex "^1.0.0"
+
is-data-descriptor@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
@@ -4576,9 +4803,9 @@ is-data-descriptor@^1.0.0:
kind-of "^6.0.0"
is-date-object@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
- integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+ integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
is-descriptor@^0.1.0:
version "0.1.6"
@@ -4652,16 +4879,16 @@ is-glob@^3.1.0:
is-extglob "^2.1.0"
is-glob@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
- integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
dependencies:
is-extglob "^2.1.1"
-is-number-object@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799"
- integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=
+is-number-object@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197"
+ integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==
is-number@^3.0.0:
version "3.0.0"
@@ -4670,12 +4897,17 @@ is-number@^3.0.0:
dependencies:
kind-of "^3.0.2"
-is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-plain-obj@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
-is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
@@ -4687,12 +4919,12 @@ is-promise@^2.1.0:
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
-is-regex@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
- integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
+is-regex@^1.0.4, is-regex@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
+ integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
dependencies:
- has "^1.0.1"
+ has "^1.0.3"
is-resolvable@^1.0.0:
version "1.1.0"
@@ -4704,10 +4936,10 @@ is-stream@^1.0.1, is-stream@^1.1.0:
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
-is-string@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64"
- integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=
+is-string@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+ integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
is-subset@^0.1.1:
version "0.1.1"
@@ -4721,12 +4953,19 @@ is-svg@^2.0.0:
dependencies:
html-comment-regex "^1.1.0"
+is-svg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
+ integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==
+ dependencies:
+ html-comment-regex "^1.1.0"
+
is-symbol@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
- integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
dependencies:
- has-symbols "^1.0.0"
+ has-symbols "^1.0.1"
is-typedarray@~1.0.0:
version "1.0.0"
@@ -4827,11 +5066,11 @@ istanbul-lib-source-maps@^3.0.1:
source-map "^0.6.1"
istanbul-reports@^2.2.6:
- version "2.2.6"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af"
- integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931"
+ integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==
dependencies:
- handlebars "^4.1.2"
+ html-escaper "^2.0.0"
jest-changed-files@^24.9.0:
version "24.9.0"
@@ -4912,10 +5151,10 @@ jest-each@^24.9.0:
jest-util "^24.9.0"
pretty-format "^24.9.0"
-jest-environment-enzyme@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/jest-environment-enzyme/-/jest-environment-enzyme-7.1.0.tgz#1181d174034a2a4d8ba8fd6ba2123f243ccaf7ec"
- integrity sha512-31nPBYx1MZfihsKUgZg16zLS4+f4gBvo4YpYMU4TIvQ2IjbREU9bLFwAszTgcs5mkE7SNOykm/68OjPmgDd4/Q==
+jest-environment-enzyme@^7.1.2:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/jest-environment-enzyme/-/jest-environment-enzyme-7.1.2.tgz#4561f26a719e8e87ce8c9a6d3f540a92663ba8d5"
+ integrity sha512-3tfaYAzO7qZSRrv+srQnfK16Vu5XwH/pHi8FpoqSHjKKngbHzXf7aBCBuWh8y3w0OtknHRfDMFrC60Khj+g1hA==
dependencies:
jest-environment-jsdom "^24.0.0"
@@ -4943,13 +5182,13 @@ jest-environment-node@^24.9.0:
jest-util "^24.9.0"
jest-enzyme@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/jest-enzyme/-/jest-enzyme-7.1.0.tgz#4345e989382a6cd70c15c7225dad9c9a9bb79cbc"
- integrity sha512-ukL9jFwvQ3xbzhoKniDVTkAgZzGCFJNeJVU058RyY0R46fVhjJlPEV/hYlmJl518qfCmKNW6zXgtmyPcaDgxhA==
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/jest-enzyme/-/jest-enzyme-7.1.2.tgz#91a10b2d3be1b56c0d65b34286e5bdc41ab4ba3d"
+ integrity sha512-j+jkph3t5hGBS12eOldpfsnERYRCHi4c/0KWPMnqRPoJJXvCpLIc5th1MHl0xDznQDXVU0AHUXg3rqMrf8vGpA==
dependencies:
- enzyme-matchers "^7.1.0"
+ enzyme-matchers "^7.1.2"
enzyme-to-json "^3.3.0"
- jest-environment-enzyme "^7.1.0"
+ jest-environment-enzyme "^7.1.2"
jest-get-type@^24.9.0:
version "24.9.0"
@@ -5213,11 +5452,6 @@ js-base64@^2.1.8, js-base64@^2.1.9:
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121"
integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==
-js-levenshtein@^1.1.3:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
- integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
-
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -5228,10 +5462,10 @@ js-tokens@^3.0.2:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
-js-yaml@^3.12.0, js-yaml@^3.9.0, js-yaml@^3.9.1:
- version "3.12.2"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc"
- integrity sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==
+js-yaml@^3.12.0, js-yaml@^3.13.1, js-yaml@^3.9.1:
+ version "3.13.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+ integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
@@ -5344,9 +5578,9 @@ json5@^1.0.1:
minimist "^1.2.0"
json5@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850"
- integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6"
+ integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==
dependencies:
minimist "^1.2.0"
@@ -5433,6 +5667,13 @@ leven@^3.1.0:
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+levenary@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.0.tgz#fc146fe75f32dc483a0a2c64aef720f602cd6210"
+ integrity sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ==
+ dependencies:
+ leven "^3.1.0"
+
levn@^0.3.0, levn@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
@@ -5533,26 +5774,16 @@ lodash._getnative@^3.0.0:
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
-lodash._reinterpolate@~3.0.0:
+lodash._reinterpolate@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
-lodash.assign@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
- integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=
-
lodash.camelcase@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
-lodash.clonedeep@^4.3.2:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
- integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
-
lodash.escape@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98"
@@ -5605,11 +5836,6 @@ lodash.memoize@^4.1.2:
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
-lodash.mergewith@^4.6.0:
- version "4.6.1"
- resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
- integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==
-
lodash.sortby@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
@@ -5621,31 +5847,26 @@ lodash.tail@^4.1.1:
integrity sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=
lodash.template@^4.2.4:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
- integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
+ integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
dependencies:
- lodash._reinterpolate "~3.0.0"
+ lodash._reinterpolate "^3.0.0"
lodash.templatesettings "^4.0.0"
lodash.templatesettings@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316"
- integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33"
+ integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
dependencies:
- lodash._reinterpolate "~3.0.0"
+ lodash._reinterpolate "^3.0.0"
lodash.uniq@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.3.0, lodash@~4.17.10:
- version "4.17.11"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
- integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
-
-lodash@^4.15.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.6.1:
+"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.6.1, lodash@~4.17.10:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
@@ -5731,6 +5952,11 @@ md5.js@^1.3.4:
inherits "^2.0.1"
safe-buffer "^5.1.2"
+mdn-data@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+ integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
+
mem@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
@@ -5794,17 +6020,17 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0"
brorand "^1.0.1"
-mime-db@~1.38.0:
- version "1.38.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad"
- integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==
+mime-db@1.43.0:
+ version "1.43.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
+ integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==
mime-types@^2.1.12, mime-types@~2.1.19:
- version "2.1.22"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd"
- integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==
+ version "2.1.26"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06"
+ integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==
dependencies:
- mime-db "~1.38.0"
+ mime-db "1.43.0"
mimic-fn@^1.0.0:
version "1.2.0"
@@ -5838,26 +6064,6 @@ minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-minimist@~0.0.1:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
- integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
-
-minipass@^2.2.1, minipass@^2.3.4:
- version "2.3.5"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
- integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
- dependencies:
- safe-buffer "^5.1.2"
- yallist "^3.0.0"
-
-minizlib@^1.1.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
- integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
- dependencies:
- minipass "^2.2.1"
-
mississippi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
@@ -5875,9 +6081,9 @@ mississippi@^2.0.0:
through2 "^2.0.0"
mixin-deep@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
- integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
dependencies:
for-in "^1.0.2"
is-extendable "^1.0.1"
@@ -5925,19 +6131,19 @@ ms@2.0.0:
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
ms@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
- integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
mute-stream@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
-nan@^2.10.0, nan@^2.9.2:
- version "2.12.1"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
- integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==
+nan@^2.12.1, nan@^2.13.2:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+ integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
nanomatch@^1.2.9:
version "1.2.13"
@@ -5962,9 +6168,9 @@ natural-compare@^1.4.0:
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
nearley@^2.7.10:
- version "2.18.0"
- resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.18.0.tgz#a9193612dd6d528a2e47e743b1dc694cfe105223"
- integrity sha512-/zQOMCeJcioI0xJtd5RpBiWw2WP7wLe6vq8/3Yu0rEwgus/G/+pViX80oA87JdVgjRt2895mZSv2VfZmy4W1uw==
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.0.tgz#37717781d0fd0f2bfc95e233ebd75678ca4bda46"
+ integrity sha512-2v52FTw7RPqieZr3Gth1luAXZR7Je6q3KaDHY5bjl/paDUdMu35fZ8ICNgiYJRr3tf3NMvIQQR1r27AvEr9CRA==
dependencies:
commander "^2.19.0"
moo "^0.4.3"
@@ -5972,26 +6178,12 @@ nearley@^2.7.10:
randexp "0.4.6"
semver "^5.4.1"
-needle@^2.2.1:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
- integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==
- dependencies:
- debug "^2.1.2"
- iconv-lite "^0.4.4"
- sax "^1.2.4"
-
neo-async@^2.5.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835"
- integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==
-
-neo-async@^2.6.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
-next-tick@1:
+next-tick@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
@@ -6038,9 +6230,9 @@ node-int64@^0.4.0:
integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
node-libs-browser@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77"
- integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
dependencies:
assert "^1.1.1"
browserify-zlib "^0.2.0"
@@ -6052,7 +6244,7 @@ node-libs-browser@^2.0.0:
events "^3.0.0"
https-browserify "^1.0.0"
os-browserify "^0.3.0"
- path-browserify "0.0.0"
+ path-browserify "0.0.1"
process "^0.11.10"
punycode "^1.2.4"
querystring-es3 "^0.2.0"
@@ -6064,7 +6256,7 @@ node-libs-browser@^2.0.0:
tty-browserify "0.0.0"
url "^0.11.0"
util "^0.11.0"
- vm-browserify "0.0.4"
+ vm-browserify "^1.0.1"
node-modules-regexp@^1.0.0:
version "1.0.0"
@@ -6082,33 +6274,17 @@ node-notifier@^5.4.2:
shellwords "^0.1.1"
which "^1.3.0"
-node-pre-gyp@^0.10.0:
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
- integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==
+node-releases@^1.1.44:
+ version "1.1.45"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.45.tgz#4cf7e9175d71b1317f15ffd68ce63bce1d53e9f2"
+ integrity sha512-cXvGSfhITKI8qsV116u2FTzH5EWZJfgG7d4cpqwF8I8+1tWpD6AsvvGRKq2onR0DNj1jfqsjkXZsm14JMS7Cyg==
dependencies:
- detect-libc "^1.0.2"
- mkdirp "^0.5.1"
- needle "^2.2.1"
- nopt "^4.0.1"
- npm-packlist "^1.1.6"
- npmlog "^4.0.2"
- rc "^1.2.7"
- rimraf "^2.6.1"
- semver "^5.3.0"
- tar "^4"
-
-node-releases@^1.1.25:
- version "1.1.28"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.28.tgz#503c3c70d0e4732b84e7aaa2925fbdde10482d4a"
- integrity sha512-AQw4emh6iSXnCpDiFe0phYcThiccmkNWMZnFZ+lDJjAP8J0m2fVd59duvUUyuTirQOhIAajTFkzG6FHCLBO59g==
- dependencies:
- semver "^5.3.0"
+ semver "^6.3.0"
-node-sass@^4.9.2:
- version "4.11.0"
- resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a"
- integrity sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==
+node-sass@^4.12.0, node-sass@^4.9.2:
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.0.tgz#b647288babdd6a1cb726de4545516b31f90da066"
+ integrity sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==
dependencies:
async-foreach "^0.1.3"
chalk "^1.1.1"
@@ -6117,12 +6293,10 @@ node-sass@^4.9.2:
get-stdin "^4.0.1"
glob "^7.0.3"
in-publish "^2.0.0"
- lodash.assign "^4.2.0"
- lodash.clonedeep "^4.3.2"
- lodash.mergewith "^4.6.0"
+ lodash "^4.17.15"
meow "^3.7.0"
mkdirp "^0.5.1"
- nan "^2.10.0"
+ nan "^2.13.2"
node-gyp "^3.8.0"
npmlog "^4.0.0"
request "^2.88.0"
@@ -6131,9 +6305,9 @@ node-sass@^4.9.2:
"true-case-path" "^1.0.2"
node@^10.0.0:
- version "10.15.3"
- resolved "https://registry.yarnpkg.com/node/-/node-10.15.3.tgz#ab238afa60540e04adcb349265d32b480d3f733a"
- integrity sha512-8FAchZpzFwaxNLcdgr1QrXMj2D5taqRi6DwW70d560HApdHW+bkrdLjiGcPZCRG3xVxtvv1JAkCKilIPHvhljA==
+ version "10.18.1"
+ resolved "https://registry.yarnpkg.com/node/-/node-10.18.1.tgz#f3228f223df9feb13e9b14a04130ace74db3877b"
+ integrity sha512-q1a2p7bUcAGN3NCpIkD3J/RtXXUToiwaqgJHzAZltHFZVq37l3+XQq/G1fU5limbxdUYf0LNEs/b6Icz/JGMog==
dependencies:
node-bin-setup "^1.0.0"
@@ -6144,14 +6318,6 @@ node@^10.0.0:
dependencies:
abbrev "1"
-nopt@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
- integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
- dependencies:
- abbrev "1"
- osenv "^0.1.4"
-
normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@@ -6189,18 +6355,10 @@ normalize-url@^1.4.0:
query-string "^4.1.0"
sort-keys "^1.0.0"
-npm-bundled@^1.0.1:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
- integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
-
-npm-packlist@^1.1.6:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc"
- integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==
- dependencies:
- ignore-walk "^3.0.1"
- npm-bundled "^1.0.1"
+normalize-url@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
+ integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
npm-run-path@^2.0.0:
version "2.0.2"
@@ -6209,7 +6367,7 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"
-"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2:
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
@@ -6219,7 +6377,7 @@ npm-run-path@^2.0.0:
gauge "~2.7.3"
set-blocking "~2.0.0"
-nth-check@~1.0.1:
+nth-check@^1.0.2, nth-check@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
@@ -6237,9 +6395,9 @@ number-is-nan@^1.0.0:
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
nwsapi@^2.0.7:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f"
- integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+ integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
oauth-sign@~0.9.0:
version "0.9.0"
@@ -6265,26 +6423,21 @@ object-copy@^0.1.0:
define-property "^0.2.5"
kind-of "^3.0.3"
-object-inspect@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
- integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
+object-inspect@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+ integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
-object-is@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
- integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=
+object-is@^1.0.1, object-is@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4"
+ integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==
-object-keys@^1.0.11:
+object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-object-keys@^1.0.12:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032"
- integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==
-
object-visit@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
@@ -6302,33 +6455,33 @@ object.assign@^4.1.0:
has-symbols "^1.0.0"
object-keys "^1.0.11"
-object.entries@^1.0.4, object.entries@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519"
- integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==
+object.entries@^1.1.0, object.entries@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b"
+ integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==
dependencies:
define-properties "^1.1.3"
- es-abstract "^1.12.0"
+ es-abstract "^1.17.0-next.1"
function-bind "^1.1.1"
has "^1.0.3"
-object.fromentries@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab"
- integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==
+object.fromentries@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
+ integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==
dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.11.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
function-bind "^1.1.1"
- has "^1.0.1"
+ has "^1.0.3"
object.getownpropertydescriptors@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
- integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
+ integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.5.1"
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
object.pick@^1.3.0:
version "1.3.0"
@@ -6337,13 +6490,13 @@ object.pick@^1.3.0:
dependencies:
isobject "^3.0.1"
-object.values@^1.0.4, object.values@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
- integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==
+object.values@^1.1.0, object.values@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
+ integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
dependencies:
define-properties "^1.1.3"
- es-abstract "^1.12.0"
+ es-abstract "^1.17.0-next.1"
function-bind "^1.1.1"
has "^1.0.3"
@@ -6366,33 +6519,25 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
-optimist@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
- integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
- dependencies:
- minimist "~0.0.1"
- wordwrap "~0.0.2"
-
optimize-css-assets-webpack-plugin@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-3.2.0.tgz#09a40c4cefde1dd0142444a873c56aa29eb18e6f"
- integrity sha512-Fjn7wyyadPAriuH2DHamDQw5B8GohEWbroBkKoPeP+vSF2PIAPI7WDihi8WieMRb/At4q7Ea7zTKaMDuSoIAAg==
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-3.2.1.tgz#9d18654a0e058c090bdd991b04bcb0f6f2486573"
+ integrity sha512-FSoF15xKSEM2qCE3/y2gH92PysJSBY58Wx/hmSdIzVSOd0vg+FRS28NWZADId1wh6PDlbVt0lfPduV0IBufItQ==
dependencies:
- cssnano "^3.4.0"
+ cssnano "^4.1.10"
last-call-webpack-plugin "^2.1.2"
optionator@^0.8.1, optionator@^0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
- integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
dependencies:
deep-is "~0.1.3"
- fast-levenshtein "~2.0.4"
+ fast-levenshtein "~2.0.6"
levn "~0.3.0"
prelude-ls "~1.1.2"
type-check "~0.3.2"
- wordwrap "~1.0.0"
+ word-wrap "~1.2.3"
os-browserify@^0.3.0:
version "0.3.0"
@@ -6425,7 +6570,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
-osenv@0, osenv@^0.1.4:
+osenv@0:
version "0.1.5"
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
@@ -6433,15 +6578,6 @@ osenv@0, osenv@^0.1.4:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
-output-file-sync@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-2.0.1.tgz#f53118282f5f553c2799541792b723a4c71430c0"
- integrity sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==
- dependencies:
- graceful-fs "^4.1.11"
- is-plain-obj "^1.1.0"
- mkdirp "^0.5.1"
-
p-each-series@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71"
@@ -6462,9 +6598,9 @@ p-limit@^1.1.0:
p-try "^1.0.0"
p-limit@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537"
- integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e"
+ integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==
dependencies:
p-try "^2.0.0"
@@ -6503,18 +6639,18 @@ pako@~1.0.5:
integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
parallel-transform@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
- integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
dependencies:
- cyclist "~0.2.2"
+ cyclist "^1.0.1"
inherits "^2.0.3"
readable-stream "^2.1.5"
parse-asn1@^5.0.0:
- version "5.1.4"
- resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc"
- integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
+ integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
dependencies:
asn1.js "^4.0.0"
browserify-aes "^1.0.0"
@@ -6555,10 +6691,10 @@ pascalcase@^0.1.1:
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
-path-browserify@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
- integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
path-complete-extname@^1.0.0:
version "1.0.0"
@@ -6757,15 +6893,25 @@ postcss-calc@^6.0.0:
postcss-selector-parser "^2.2.2"
reduce-css-calc "^2.0.0"
+postcss-calc@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436"
+ integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==
+ dependencies:
+ css-unit-converter "^1.1.1"
+ postcss "^7.0.5"
+ postcss-selector-parser "^5.0.0-rc.4"
+ postcss-value-parser "^3.3.1"
+
postcss-color-function@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/postcss-color-function/-/postcss-color-function-4.0.1.tgz#402b3f2cebc3f6947e618fb6be3654fbecef6444"
- integrity sha1-QCs/LOvD9pR+YY+2vjZU++zvZEQ=
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-color-function/-/postcss-color-function-4.1.0.tgz#b6f9355e07b12fcc5c34dab957834769b03d8f57"
+ integrity sha512-2/fuv6mP5Lt03XbRpVfMdGC8lRP1sykme+H1bR4ARyOmSMB8LPSjcL6EAI1iX6dqUF+jNEvKIVVXhan1w/oFDQ==
dependencies:
css-color-function "~1.3.3"
- postcss "^6.0.1"
+ postcss "^6.0.23"
postcss-message-helpers "^2.0.0"
- postcss-value-parser "^3.3.0"
+ postcss-value-parser "^3.3.1"
postcss-color-gray@^4.0.0:
version "4.1.0"
@@ -6839,6 +6985,17 @@ postcss-colormin@^2.1.8:
postcss "^5.0.13"
postcss-value-parser "^3.2.3"
+postcss-colormin@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381"
+ integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==
+ dependencies:
+ browserslist "^4.0.0"
+ color "^3.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
postcss-convert-values@^2.3.4:
version "2.6.1"
resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
@@ -6847,6 +7004,14 @@ postcss-convert-values@^2.3.4:
postcss "^5.0.11"
postcss-value-parser "^3.1.2"
+postcss-convert-values@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f"
+ integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
postcss-cssnext@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/postcss-cssnext/-/postcss-cssnext-3.1.0.tgz#927dc29341a938254cde38ea60a923b9dfedead9"
@@ -6914,6 +7079,13 @@ postcss-discard-comments@^2.0.4:
dependencies:
postcss "^5.0.14"
+postcss-discard-comments@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033"
+ integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==
+ dependencies:
+ postcss "^7.0.0"
+
postcss-discard-duplicates@^2.0.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
@@ -6921,6 +7093,13 @@ postcss-discard-duplicates@^2.0.1:
dependencies:
postcss "^5.0.4"
+postcss-discard-duplicates@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb"
+ integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==
+ dependencies:
+ postcss "^7.0.0"
+
postcss-discard-empty@^2.0.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
@@ -6928,6 +7107,13 @@ postcss-discard-empty@^2.0.1:
dependencies:
postcss "^5.0.14"
+postcss-discard-empty@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765"
+ integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==
+ dependencies:
+ postcss "^7.0.0"
+
postcss-discard-overridden@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
@@ -6935,6 +7121,13 @@ postcss-discard-overridden@^0.1.1:
dependencies:
postcss "^5.0.16"
+postcss-discard-overridden@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57"
+ integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==
+ dependencies:
+ postcss "^7.0.0"
+
postcss-discard-unused@^2.2.1:
version "2.2.3"
resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
@@ -6991,11 +7184,11 @@ postcss-initial@^2.0.0:
postcss "^6.0.1"
postcss-load-config@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484"
- integrity sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003"
+ integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==
dependencies:
- cosmiconfig "^4.0.0"
+ cosmiconfig "^5.0.0"
import-cwd "^2.0.0"
postcss-loader@^2.1.5:
@@ -7036,6 +7229,16 @@ postcss-merge-longhand@^2.0.1:
dependencies:
postcss "^5.0.4"
+postcss-merge-longhand@^4.0.11:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
+ integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==
+ dependencies:
+ css-color-names "0.0.4"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ stylehacks "^4.0.0"
+
postcss-merge-rules@^2.0.3:
version "2.1.2"
resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
@@ -7047,6 +7250,18 @@ postcss-merge-rules@^2.0.3:
postcss-selector-parser "^2.2.2"
vendors "^1.0.0"
+postcss-merge-rules@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650"
+ integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-api "^3.0.0"
+ cssnano-util-same-parent "^4.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+ vendors "^1.0.0"
+
postcss-message-helpers@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
@@ -7061,6 +7276,14 @@ postcss-minify-font-values@^1.0.2:
postcss "^5.0.4"
postcss-value-parser "^3.0.2"
+postcss-minify-font-values@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6"
+ integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
postcss-minify-gradients@^1.0.1:
version "1.0.5"
resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
@@ -7069,6 +7292,16 @@ postcss-minify-gradients@^1.0.1:
postcss "^5.0.12"
postcss-value-parser "^3.3.0"
+postcss-minify-gradients@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471"
+ integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ is-color-stop "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
postcss-minify-params@^1.0.4:
version "1.2.2"
resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
@@ -7079,6 +7312,18 @@ postcss-minify-params@^1.0.4:
postcss-value-parser "^3.0.2"
uniqs "^2.0.0"
+postcss-minify-params@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874"
+ integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ browserslist "^4.0.0"
+ cssnano-util-get-arguments "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ uniqs "^2.0.0"
+
postcss-minify-selectors@^2.0.4:
version "2.1.1"
resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
@@ -7089,6 +7334,16 @@ postcss-minify-selectors@^2.0.4:
postcss "^5.0.14"
postcss-selector-parser "^2.0.0"
+postcss-minify-selectors@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"
+ integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+
postcss-modules-extract-imports@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a"
@@ -7134,6 +7389,69 @@ postcss-normalize-charset@^1.1.0:
dependencies:
postcss "^5.0.5"
+postcss-normalize-charset@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"
+ integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-normalize-display-values@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a"
+ integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-positions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f"
+ integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-repeat-style@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c"
+ integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-string@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"
+ integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==
+ dependencies:
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-timing-functions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"
+ integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-unicode@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"
+ integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==
+ dependencies:
+ browserslist "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
postcss-normalize-url@^3.0.7:
version "3.0.8"
resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
@@ -7144,6 +7462,24 @@ postcss-normalize-url@^3.0.7:
postcss "^5.0.14"
postcss-value-parser "^3.2.3"
+postcss-normalize-url@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1"
+ integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==
+ dependencies:
+ is-absolute-url "^2.0.0"
+ normalize-url "^3.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-whitespace@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"
+ integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
postcss-ordered-values@^2.1.0:
version "2.2.3"
resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
@@ -7152,6 +7488,15 @@ postcss-ordered-values@^2.1.0:
postcss "^5.0.4"
postcss-value-parser "^3.0.1"
+postcss-ordered-values@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee"
+ integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
postcss-pseudo-class-any-link@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-4.0.0.tgz#9152a0613d3450720513e8892854bae42d0ee68e"
@@ -7182,6 +7527,16 @@ postcss-reduce-initial@^1.0.0:
dependencies:
postcss "^5.0.4"
+postcss-reduce-initial@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df"
+ integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-api "^3.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+
postcss-reduce-transforms@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
@@ -7191,6 +7546,16 @@ postcss-reduce-transforms@^1.0.3:
postcss "^5.0.8"
postcss-value-parser "^3.0.1"
+postcss-reduce-transforms@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29"
+ integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
postcss-replace-overflow-wrap@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-2.0.0.tgz#794db6faa54f8db100854392a93af45768b4e25b"
@@ -7223,6 +7588,24 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2, postcss-selector
indexes-of "^1.0.1"
uniq "^1.0.1"
+postcss-selector-parser@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865"
+ integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=
+ dependencies:
+ dot-prop "^4.1.1"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-selector-parser@^5.0.0-rc.4:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c"
+ integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==
+ dependencies:
+ cssesc "^2.0.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
postcss-svgo@^2.1.1:
version "2.1.6"
resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
@@ -7233,6 +7616,16 @@ postcss-svgo@^2.1.1:
postcss-value-parser "^3.2.3"
svgo "^0.7.0"
+postcss-svgo@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258"
+ integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==
+ dependencies:
+ is-svg "^3.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ svgo "^1.0.0"
+
postcss-unique-selectors@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
@@ -7242,7 +7635,16 @@ postcss-unique-selectors@^2.0.2:
postcss "^5.0.4"
uniqs "^2.0.0"
-postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
+postcss-unique-selectors@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac"
+ integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ postcss "^7.0.0"
+ uniqs "^2.0.0"
+
+postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
@@ -7275,7 +7677,7 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0
source-map "^0.5.6"
supports-color "^3.2.3"
-postcss@^6.0, postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.11, postcss@^6.0.14, postcss@^6.0.17, postcss@^6.0.18, postcss@^6.0.22, postcss@^6.0.5, postcss@^6.0.6:
+postcss@^6.0, postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.11, postcss@^6.0.14, postcss@^6.0.17, postcss@^6.0.18, postcss@^6.0.22, postcss@^6.0.23, postcss@^6.0.5, postcss@^6.0.6:
version "6.0.23"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
@@ -7284,10 +7686,10 @@ postcss@^6.0, postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.11, postcss@^6.0.14,
source-map "^0.6.1"
supports-color "^5.4.0"
-postcss@^7.0.2:
- version "7.0.14"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5"
- integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.5:
+ version "7.0.26"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587"
+ integrity sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==
dependencies:
chalk "^2.4.2"
source-map "^0.6.1"
@@ -7319,9 +7721,9 @@ private@^0.1.6, private@^0.1.8:
integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
process-nextick-args@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
- integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
process@^0.11.10:
version "0.11.10"
@@ -7346,9 +7748,9 @@ promise@^7.1.1:
asap "~2.0.3"
prompts@^2.0.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.2.1.tgz#f901dd2a2dfee080359c0e20059b24188d75ad35"
- integrity sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4"
+ integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==
dependencies:
kleur "^3.0.3"
sisteransi "^1.0.3"
@@ -7381,15 +7783,10 @@ pseudomap@^1.0.2:
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
-psl@^1.1.24:
- version "1.1.31"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184"
- integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==
-
-psl@^1.1.28:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd"
- integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==
+psl@^1.1.24, psl@^1.1.28:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c"
+ integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==
public-encrypt@^4.0.0:
version "4.0.3"
@@ -7471,7 +7868,7 @@ querystring@0.2.0:
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
-raf@^3.4.0:
+raf@^3.4.1:
version "3.4.1"
resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
@@ -7506,25 +7903,15 @@ randomfill@^1.0.3:
randombytes "^2.0.5"
safe-buffer "^5.1.0"
-rc@^1.2.7:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
- integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
- dependencies:
- deep-extend "^0.6.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
react-dom@^16.4.1:
- version "16.8.4"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.4.tgz#1061a8e01a2b3b0c8160037441c3bf00a0e3bc48"
- integrity sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ==
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11"
+ integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
prop-types "^15.6.2"
- scheduler "^0.13.4"
+ scheduler "^0.18.0"
react-fine-uploader@^1.1.0:
version "1.1.1"
@@ -7553,15 +7940,10 @@ react-inlinesvg@^0.8.1:
httpplease "^0.16.4"
once "^1.4.0"
-react-is@^16.8.1:
- version "16.8.4"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.4.tgz#90f336a68c3a29a096a3d648ab80e87ec61482a2"
- integrity sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA==
-
-react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0:
- version "16.9.0"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb"
- integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==
+react-is@^16.12.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0:
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c"
+ integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==
react-lifecycles-compat@^3.0.4:
version "3.0.4"
@@ -7592,9 +7974,9 @@ react-spinkit@^3.0.0:
prop-types "^15.5.8"
react-split-pane@^0.1.87:
- version "0.1.87"
- resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.87.tgz#a7027ae554abfacca35f5f780288b07fe4ec4cbd"
- integrity sha512-F22jqWyKB1WximT0U5HKdSuB9tmJGjjP+WUyveHxJJys3ANsljj163kCdsI6M3gdfyCVC+B2rq8sc5m2Ko02RA==
+ version "0.1.89"
+ resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.89.tgz#e111e5f7e6e1cd3c86a5aa0d9ddf987c2165f0d0"
+ integrity sha512-bGEiOevi6nBE1evEJOsZjd5A7plLboFAU4+HGASWWVm94XUg7QdsuPInGOB+5Ym4RtY3TZCpmUvLe6qQmrZUOg==
dependencies:
prop-types "^15.5.10"
react-lifecycles-compat "^3.0.4"
@@ -7608,36 +7990,36 @@ react-style-proptype@^3.0.0:
prop-types "^15.5.4"
react-test-renderer@^16.0.0-0:
- version "16.9.0"
- resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.9.0.tgz#7ed657a374af47af88f66f33a3ef99c9610c8ae9"
- integrity sha512-R62stB73qZyhrJo7wmCW9jgl/07ai+YzvouvCXIJLBkRlRqLx4j9RqcLEAfNfU3OxTGucqR2Whmn3/Aad6L3hQ==
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.12.0.tgz#11417ffda579306d4e841a794d32140f3da1b43f"
+ integrity sha512-Vj/teSqt2oayaWxkbhQ6gKis+t5JrknXfPVo+aIJ8QwYAqMPH77uptOdrlphyxl8eQI/rtkOYg86i/UWkpFu0w==
dependencies:
object-assign "^4.1.1"
prop-types "^15.6.2"
- react-is "^16.9.0"
- scheduler "^0.15.0"
+ react-is "^16.8.6"
+ scheduler "^0.18.0"
react-toggle@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.0.2.tgz#77f487860efb87fafd197672a2db8c885be1440f"
- integrity sha512-EPTWnN7gQHgEAUEmjheanZXNzY5TPnQeyyHfEs3YshaiWZf5WNjfYDrglO5F1Hl/dNveX18i4l0grTEsYH2Ccw==
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.1.1.tgz#2317f67bf918ea3508a96b09dd383efd9da572af"
+ integrity sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw==
dependencies:
classnames "^2.2.5"
react-tooltip@^3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-3.10.0.tgz#268b5ef519fd8a1369288d1f086f42c90d5da7ef"
- integrity sha512-GGdxJvM1zSFztkTP7gCQbLTstWr1OOoMpJ5WZUGhimj0nhRY+MPz+92MpEnKmj0cftJ9Pd/M6FfSl0sfzmZWkg==
+ version "3.11.2"
+ resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-3.11.2.tgz#78972910657d6184defdcdc9a0182c1e44e01ce6"
+ integrity sha512-7EJ7Cv7lgctw02j0hyp+PpJklIP3gyDbm4CvVQvq7U6zgZtuI+bFFnRzsQB1oTiHPkkhE2NU04EIkgBDiVNzxw==
dependencies:
classnames "^2.2.5"
prop-types "^15.6.0"
react-transition-group@2.x:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.6.0.tgz#3c41cbdd9c044c5f8604d4e8d319e860919c9fae"
- integrity sha512-VzZ+6k/adL3pJHo4PU/MHEPjW59/TGQtRsXC+wnxsx2mxjQKNHnDdJL/GpYuPJIsyHGjYbBQfIJ2JNOAdPc8GQ==
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d"
+ integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==
dependencies:
- dom-helpers "^3.3.1"
+ dom-helpers "^3.4.0"
loose-envify "^1.4.0"
prop-types "^15.6.2"
react-lifecycles-compat "^3.0.4"
@@ -7654,19 +8036,20 @@ react-transition-group@^1.2.1:
warning "^3.0.0"
react@^16.2.0:
- version "16.8.4"
- resolved "https://registry.yarnpkg.com/react/-/react-16.8.4.tgz#fdf7bd9ae53f03a9c4cd1a371432c206be1c4768"
- integrity sha512-0GQ6gFXfUH7aZcjGVymlPOASTuSjlQL4ZtVC5YKH+3JL6bBLCVO21DknzmaPlI90LN253ojj02nsapy+j7wIjg==
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83"
+ integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
prop-types "^15.6.2"
- scheduler "^0.13.4"
-react_ujs@^2.4.4:
- version "2.4.4"
- resolved "https://registry.yarnpkg.com/react_ujs/-/react_ujs-2.4.4.tgz#49bac535d24024a96b0a35d7514d18188aea42bc"
- integrity sha512-RON6mgV+I3s6KkmvxTQi+WGuoLbhZ+TzRat06EE/RHFvzU+Na1Eom6XnesQeOP7WCrTZGOdcZEPP0P7QrJrHfg==
+react_ujs@^2.4.4, react_ujs@^2.6.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/react_ujs/-/react_ujs-2.6.1.tgz#a202a33c95c9e2bb18ab56926b7e79f3325ec855"
+ integrity sha512-9M33/A8cubStkZ2cpJSimcTD0RlCWiqXF6e90IQmMw/Caf/W0dtAzOtHtiQE3JjLbt/nhRR7NLPxMfnlm141ig==
+ dependencies:
+ react_ujs "^2.6.0"
read-cache@^1.0.0:
version "1.0.0"
@@ -7727,9 +8110,9 @@ read-pkg@^3.0.0:
path-type "^3.0.0"
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
- integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.3"
@@ -7782,19 +8165,19 @@ reduce-css-calc@^1.2.6, reduce-css-calc@^1.2.7:
reduce-function-call "^1.0.1"
reduce-css-calc@^2.0.0:
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.6.tgz#050fe6ee7d98a1d70775d2e93ce0b713cee394d2"
- integrity sha512-+l5/qlQmdsbM9h6JerJ/y5vR5Ci0k93aszLNpCmbadC3nBcbRGmIBm0s9Nj59i22LvCjTGftWzdQRwdknayxhw==
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.7.tgz#1ace2e02c286d78abcd01fd92bfe8097ab0602c2"
+ integrity sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA==
dependencies:
css-unit-converter "^1.1.1"
postcss-value-parser "^3.3.0"
reduce-function-call@^1.0.1, reduce-function-call@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
- integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f"
+ integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==
dependencies:
- balanced-match "^0.4.2"
+ balanced-match "^1.0.0"
reflect.ownkeys@^0.2.0:
version "0.2.0"
@@ -7823,12 +8206,7 @@ regenerator-runtime@^0.11.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
-regenerator-runtime@^0.12.0:
- version "0.12.1"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
- integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==
-
-regenerator-runtime@^0.13.3:
+regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3:
version "0.13.3"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
@@ -7857,11 +8235,6 @@ regex-not@^1.0.0, regex-not@^1.0.2:
extend-shallow "^3.0.2"
safe-regex "^1.1.0"
-regexp-tree@^0.1.6:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.12.tgz#28eaaa6e66eeb3527c15108a3ff740d9e574e420"
- integrity sha512-TsXZ8+cv2uxMEkLfgwO0E068gsNMLfuYwMMhiUxf0Kw2Vcgzq93vgl6wIlIYuPmfMqMjfQ9zAporiozqCnwLuQ==
-
regexpp@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
@@ -7885,10 +8258,10 @@ regexpu-core@^2.0.0:
regjsgen "^0.2.0"
regjsparser "^0.1.4"
-regexpu-core@^4.5.4:
- version "4.5.5"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.5.tgz#aaffe61c2af58269b3e516b61a73790376326411"
- integrity sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==
+regexpu-core@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6"
+ integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==
dependencies:
regenerate "^1.4.0"
regenerate-unicode-properties "^8.1.0"
@@ -7903,9 +8276,9 @@ regjsgen@^0.2.0:
integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
regjsgen@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
- integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c"
+ integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==
regjsparser@^0.1.4:
version "0.1.5"
@@ -7915,9 +8288,9 @@ regjsparser@^0.1.4:
jsesc "~0.5.0"
regjsparser@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c"
- integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96"
+ integrity sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==
dependencies:
jsesc "~0.5.0"
@@ -7943,19 +8316,19 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
-request-promise-core@1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346"
- integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==
+request-promise-core@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9"
+ integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==
dependencies:
- lodash "^4.17.11"
+ lodash "^4.17.15"
request-promise-native@^1.0.5:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59"
- integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36"
+ integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==
dependencies:
- request-promise-core "1.1.2"
+ request-promise-core "1.1.3"
stealthy-require "^1.1.1"
tough-cookie "^2.3.3"
@@ -7990,11 +8363,6 @@ require-directory@^2.1.1:
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
-require-from-string@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
- integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
-
require-main-filename@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
@@ -8040,17 +8408,10 @@ resolve@1.1.7:
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
-resolve@^1.1.7, resolve@^1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba"
- integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==
- dependencies:
- path-parse "^1.0.6"
-
-resolve@^1.3.2:
- version "1.12.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
- integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
+resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2:
+ version "1.14.2"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2"
+ integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==
dependencies:
path-parse "^1.0.6"
@@ -8072,11 +8433,21 @@ rgb-hex@^2.1.0:
resolved "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-2.1.0.tgz#c773c5fe2268a25578d92539a82a7a5ce53beda6"
integrity sha1-x3PF/iJoolV42SU5qCp6XOU77aY=
+rgb-regex@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
+ integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE=
+
rgb@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/rgb/-/rgb-0.1.0.tgz#be27b291e8feffeac1bd99729721bfa40fc037b5"
integrity sha1-vieykej+/+rBvZlylyG/pA/AN7U=
+rgba-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
+ integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=
+
right-align@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
@@ -8084,20 +8455,20 @@ right-align@^0.1.1:
dependencies:
align-text "^0.1.1"
-rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2.6.2:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
- integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
- dependencies:
- glob "^7.1.3"
-
-rimraf@^2.6.3:
+rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
dependencies:
glob "^7.1.3"
+rimraf@~2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -8145,16 +8516,16 @@ rx-lite@*, rx-lite@^4.0.8:
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
-safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@~5.2.0:
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
safe-regex@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
@@ -8203,23 +8574,15 @@ sass-loader@^6.0.7:
neo-async "^2.5.0"
pify "^3.0.0"
-sax@^1.2.4, sax@~1.2.1:
+sax@^1.2.4, sax@~1.2.1, sax@~1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-scheduler@^0.13.4:
- version "0.13.4"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.4.tgz#8fef05e7a3580c76c0364d2df5e550e4c9140298"
- integrity sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA==
- dependencies:
- loose-envify "^1.1.0"
- object-assign "^4.1.1"
-
-scheduler@^0.15.0:
- version "0.15.0"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e"
- integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==
+scheduler@^0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4"
+ integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
@@ -8247,16 +8610,16 @@ scss-tokenizer@^0.2.3:
js-base64 "^2.1.8"
source-map "^0.4.2"
-"semver@2 || 3 || 4 || 5", semver@^5.3.0:
- version "5.6.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
- integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
-
-semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0:
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+semver@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
@@ -8268,29 +8631,19 @@ semver@~5.3.0:
integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
serialize-javascript@^1.4.0:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879"
- integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb"
+ integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-set-value@^0.4.3:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
- integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.1"
- to-object-path "^0.3.0"
-
-set-value@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
- integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
dependencies:
extend-shallow "^2.0.1"
is-extendable "^0.1.1"
@@ -8349,9 +8702,9 @@ simple-swizzle@^0.2.2:
is-arrayish "^0.3.1"
sisteransi@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb"
- integrity sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3"
+ integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==
slash@^1.0.0:
version "1.0.0"
@@ -8413,11 +8766,11 @@ source-list-map@^2.0.0:
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
source-map-resolve@^0.5.0:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
- integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
dependencies:
- atob "^2.1.1"
+ atob "^2.1.2"
decode-uri-component "^0.2.0"
resolve-url "^0.2.1"
source-map-url "^0.4.0"
@@ -8431,9 +8784,9 @@ source-map-support@^0.4.15:
source-map "^0.5.6"
source-map-support@^0.5.6:
- version "0.5.13"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
- integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
+ version "0.5.16"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
+ integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
@@ -8482,9 +8835,9 @@ spdx-expression-parse@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-license-ids@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e"
- integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+ integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
split-string@^3.0.1, split-string@^3.0.2:
version "3.1.0"
@@ -8520,6 +8873,11 @@ ssri@^5.2.4:
dependencies:
safe-buffer "^5.1.1"
+stable@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+ integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
stack-utils@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
@@ -8573,9 +8931,9 @@ stream-http@^2.7.2:
xtend "^4.0.0"
stream-shift@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
- integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
strict-uri-encode@^1.0.0:
version "1.1.0"
@@ -8616,23 +8974,32 @@ string-width@^3.0.0, string-width@^3.1.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^5.1.0"
-string.prototype.trim@^1.1.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz#75a729b10cfc1be439543dae442129459ce61e3d"
- integrity sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==
+string.prototype.trim@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782"
+ integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==
dependencies:
define-properties "^1.1.3"
- es-abstract "^1.13.0"
+ es-abstract "^1.17.0-next.1"
function-bind "^1.1.1"
-string_decoder@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
- integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
+string.prototype.trimleft@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74"
+ integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==
dependencies:
- safe-buffer "~5.1.0"
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
+
+string.prototype.trimright@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9"
+ integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==
+ dependencies:
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
-string_decoder@^1.1.1:
+string_decoder@^1.0.0, string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
@@ -8704,6 +9071,15 @@ style-loader@^0.21.0:
loader-utils "^1.1.0"
schema-utils "^0.4.5"
+stylehacks@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
+ integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==
+ dependencies:
+ browserslist "^4.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -8750,6 +9126,25 @@ svgo@^0.7.0:
sax "~1.2.1"
whet.extend "~0.9.9"
+svgo@^1.0.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
+ integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
+ dependencies:
+ chalk "^2.4.1"
+ coa "^2.0.2"
+ css-select "^2.0.0"
+ css-select-base-adapter "^0.1.1"
+ css-tree "1.0.0-alpha.37"
+ csso "^4.0.2"
+ js-yaml "^3.13.1"
+ mkdirp "~0.5.1"
+ object.values "^1.1.0"
+ sax "~1.2.4"
+ stable "^0.1.8"
+ unquote "~1.1.1"
+ util.promisify "~1.0.0"
+
symbol-tree@^3.2.2:
version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
@@ -8773,27 +9168,14 @@ tapable@^0.2.7:
integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==
tar@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
- integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
+ integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
dependencies:
block-stream "*"
- fstream "^1.0.2"
+ fstream "^1.0.12"
inherits "2"
-tar@^4:
- version "4.4.8"
- resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
- integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
- dependencies:
- chownr "^1.1.1"
- fs-minipass "^1.2.5"
- minipass "^2.3.4"
- minizlib "^1.1.1"
- mkdirp "^0.5.0"
- safe-buffer "^5.1.2"
- yallist "^3.0.2"
-
test-exclude@^5.2.3:
version "5.2.3"
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0"
@@ -8828,16 +9210,21 @@ through@^2.3.6:
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
timers-browserify@^2.0.4:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae"
- integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
+ integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
dependencies:
setimmediate "^1.0.4"
+timsort@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
+ integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
+
tlds@^1.121.0:
- version "1.203.1"
- resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.203.1.tgz#4dc9b02f53de3315bc98b80665e13de3edfc1dfc"
- integrity sha512-7MUlYyGJ6rSitEZ3r1Q1QNV8uSIzapS8SmmhSusBuIc7uIxPPwsKllEP0GRp1NS6Ik6F+fRZvnjDWm3ecv2hDw==
+ version "1.207.0"
+ resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.207.0.tgz#459264e644cf63ddc0965fece3898913286b1afd"
+ integrity sha512-k7d7Q1LqjtAvhtEOs3yN14EabsNO8ZCoY6RESSJDB9lst3bTx3as/m1UuAeCKzYxiyhR1qq72ZPhpSf+qlqiwg==
tmp@^0.0.33:
version "0.0.33"
@@ -8960,15 +9347,25 @@ type-check@~0.3.2:
dependencies:
prelude-ls "~1.1.2"
+type@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
+ integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
+
+type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3"
+ integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==
+
typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
ua-parser-js@^0.7.18:
- version "0.7.19"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b"
- integrity sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==
+ version "0.7.21"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777"
+ integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==
uc.micro@^1.0.1:
version "1.0.6"
@@ -8993,14 +9390,6 @@ uglify-js@^2.8.29:
optionalDependencies:
uglify-to-browserify "~1.0.0"
-uglify-js@^3.1.4:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5"
- integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==
- dependencies:
- commander "~2.20.0"
- source-map "~0.6.1"
-
uglify-to-browserify@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
@@ -9053,14 +9442,14 @@ unicode-property-aliases-ecmascript@^1.0.4:
integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
union-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
- integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
dependencies:
arr-union "^3.1.0"
get-value "^2.0.6"
is-extendable "^0.1.1"
- set-value "^0.4.3"
+ set-value "^2.0.1"
uniq@^1.0.1:
version "1.0.1"
@@ -9080,9 +9469,9 @@ unique-filename@^1.1.0:
unique-slug "^2.0.0"
unique-slug@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6"
- integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
dependencies:
imurmurhash "^0.1.4"
@@ -9094,6 +9483,11 @@ units-css@^0.4.0:
isnumeric "^0.2.0"
viewport-dimensions "^0.2.0"
+unquote@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+ integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
+
unset-value@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
@@ -9102,15 +9496,10 @@ unset-value@^1.0.0:
has-value "^0.3.1"
isobject "^3.0.0"
-upath@^1.0.5, upath@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.1.tgz#497f7c1090b0818f310bbfb06783586a68d28014"
- integrity sha512-D0yetkpIOKiZQquxjM2Syvy48Y1DbZ0SWxgsZiwd9GCWRpc75vN8ytzem14WDSg+oiX6+Qt31FpiS/ExODCrLg==
-
-upath@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
- integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==
+upath@^1.0.5, upath@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
uri-js@^4.2.2:
version "4.2.2"
@@ -9149,7 +9538,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-util.promisify@^1.0.0:
+util.promisify@^1.0.0, util.promisify@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
@@ -9172,9 +9561,9 @@ util@^0.11.0:
inherits "2.0.3"
uuid@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
- integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
+ integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
validate-npm-package-license@^3.0.1:
version "3.0.4"
@@ -9185,9 +9574,9 @@ validate-npm-package-license@^3.0.1:
spdx-expression-parse "^3.0.0"
vendors@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801"
- integrity sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0"
+ integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==
verror@1.10.0:
version "1.10.0"
@@ -9203,12 +9592,10 @@ viewport-dimensions@^0.2.0:
resolved "https://registry.yarnpkg.com/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz#de740747db5387fd1725f5175e91bac76afdf36c"
integrity sha1-3nQHR9tTh/0XJfUXXpG6x2r982w=
-vm-browserify@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
- integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
- dependencies:
- indexof "0.0.1"
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
w3c-hr-time@^1.0.1:
version "1.0.1"
@@ -9254,9 +9641,9 @@ webpack-manifest-plugin@^1.3.2:
lodash ">=3.5 <5"
webpack-sources@^1.0.1, webpack-sources@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"
- integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
dependencies:
source-list-map "^2.0.0"
source-map "~0.6.1"
@@ -9321,9 +9708,9 @@ whatwg-url@^6.4.1:
webidl-conversions "^4.0.2"
whatwg-url@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd"
- integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+ integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
dependencies:
lodash.sortby "^4.7.0"
tr46 "^1.0.1"
@@ -9363,25 +9750,20 @@ window-size@0.1.0:
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
+word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
wordwrap@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
-wordwrap@~0.0.2:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
- integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
-
-wordwrap@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
- integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
-
worker-farm@^1.5.2:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0"
- integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
dependencies:
errno "~0.1.7"
@@ -9441,9 +9823,9 @@ xmlhttprequest@*:
integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=
xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
- integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
xtend@~3.0.0:
version "3.0.0"
@@ -9465,11 +9847,6 @@ yallist@^2.1.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
-yallist@^3.0.0, yallist@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
- integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
-
yargs-parser@^13.1.1:
version "13.1.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"