From ea85519163d97c4b9faf563643cfac44dad8a93c Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Mon, 3 Jan 2022 18:11:17 +0100 Subject: [PATCH] Update bundle (with newest rubocop version) and fix offenses --- Gemfile.lock | 52 +- app/controllers/concerns/redirect_behavior.rb | 2 +- app/controllers/exercises_controller.rb | 2 +- app/controllers/proxy_exercises_controller.rb | 4 +- app/controllers/study_groups_controller.rb | 2 +- app/controllers/submissions_controller.rb | 4 +- .../user_exercise_feedbacks_controller.rb | 4 +- app/models/code_ocean/file.rb | 1 - app/models/concerns/creation.rb | 3 - app/models/exercise.rb | 4 +- app/models/external_user.rb | 1 - app/models/proxy_exercise.rb | 2 +- app/models/runner.rb | 2 +- app/models/submission.rb | 3 +- app/models/user_exercise_intervention.rb | 4 - app/models/user_proxy_exercise_exercise.rb | 5 - .../convert_task_to_exercise.rb | 4 +- db/migrate/20181129093207_drop_errors.rb | 1 - .../validations/boolean_presence_validator.rb | 2 +- lib/assessor.rb | 2 +- lib/code_ocean/config.rb | 4 +- lib/cpp_catch2_adapter.rb | 2 +- lib/docker_client.rb | 6 +- lib/junit5_adapter.rb | 2 +- lib/junit_adapter.rb | 2 +- lib/py_lint_adapter.rb | 4 +- lib/py_unit_adapter.rb | 2 +- lib/r_script_adapter.rb | 2 +- lib/runner/strategy/docker_container_pool.rb | 2 +- spec/concerns/file_parameters_spec.rb | 18 +- spec/concerns/lti_spec.rb | 20 +- .../admin/dashboard_controller_spec.rb | 2 +- .../application_controller_spec.rb | 4 +- .../code_ocean/files_controller_spec.rb | 10 +- .../codeharbor_links_controller_spec.rb | 8 +- spec/controllers/consumers_controller_spec.rb | 12 +- ...ror_template_attributes_controller_spec.rb | 6 +- .../error_templates_controller_spec.rb | 6 +- spec/controllers/events_controller_spec.rb | 4 +- .../execution_environments_controller_spec.rb | 16 +- spec/controllers/exercises_controller_spec.rb | 44 +- .../external_users_controller_spec.rb | 4 +- .../controllers/file_types_controller_spec.rb | 12 +- .../internal_users_controller_spec.rb | 12 +- .../request_for_comments_controller_spec.rb | 12 +- spec/controllers/sessions_controller_spec.rb | 20 +- .../controllers/statistics_controller_spec.rb | 2 +- .../submissions_controller_spec.rb | 16 +- spec/features/authentication_spec.rb | 4 +- spec/features/authorization_spec.rb | 6 +- spec/features/editor_spec.rb | 8 +- spec/features/prometheus/controller_spec.rb | 18 +- .../request_for_comments_filter_spec.rb | 10 +- spec/helpers/admin/dashboard_helper_spec.rb | 2 +- spec/helpers/exercise_helper_spec.rb | 2 +- spec/lib/assessor_spec.rb | 4 +- spec/lib/docker_client_spec.rb | 10 +- spec/lib/file_tree_spec.rb | 20 +- .../strategy/docker_container_pool_spec.rb | 24 +- spec/lib/runner/strategy/poseidon_spec.rb | 8 +- spec/mailers/user_mailer_spec.rb | 2 +- spec/models/code_ocean/file_spec.rb | 2 +- spec/models/codeharbor_link_spec.rb | 2 +- spec/models/consumer_spec.rb | 2 +- spec/models/execution_environment_spec.rb | 15 +- spec/models/exercise_spec.rb | 25 +- spec/models/external_user_spec.rb | 6 +- spec/models/file_type_spec.rb | 3 +- spec/models/internal_user_spec.rb | 16 +- spec/models/request_for_comment_spec.rb | 4 +- spec/models/runner_spec.rb | 18 +- spec/models/submission_spec.rb | 41 +- spec/policies/admin/dashboard_policy_spec.rb | 6 +- spec/policies/code_ocean/file_policy_spec.rb | 16 +- spec/policies/codeharbor_link_policy_spec.rb | 14 +- spec/policies/consumer_policy_spec.rb | 4 +- .../execution_environment_policy_spec.rb | 20 +- spec/policies/exercise_policy_spec.rb | 38 +- spec/policies/external_user_policy_spec.rb | 10 +- spec/policies/file_type_policy_spec.rb | 6 +- spec/policies/internal_user_policy_spec.rb | 10 +- spec/policies/submission_policy_spec.rb | 12 +- .../exercise_service/check_external_spec.rb | 4 +- .../exercise_service/push_external_spec.rb | 8 +- .../convert_exercise_to_task_spec.rb | 20 +- .../convert_task_to_exercise_spec.rb | 10 +- .../proforma_service/export_task_spec.rb | 4 +- spec/services/proforma_service/import_spec.rb | 26 +- spec/support/factory_bot.rb | 4 + spec/uploaders/file_uploader_spec.rb | 2 +- .../shell.html.slim_spec.rb | 2 +- .../exercises/implement.html.slim_spec.rb | 4 +- yarn.lock | 1123 +++++++++-------- 93 files changed, 968 insertions(+), 985 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 946098ff..d414b084 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,9 +1,9 @@ GIT remote: https://github.com/evolve75/RubyTree.git - revision: eb045068f73529c66d9d84f0553fdf85fc98bc4f + revision: 6081d0959b706dcefb85e85faa329ebb2dabcf9e specs: rubytree (1.0.2) - json (~> 2.3.1) + json (~> 2.6.1) structured_warnings (~> 0.4.0) GIT @@ -151,7 +151,7 @@ GEM database_cleaner-core (~> 2.0.0) database_cleaner-core (2.0.1) debug_inspector (1.1.0) - diff-lcs (1.4.4) + diff-lcs (1.5.0) docile (1.4.0) docker-api (2.2.0) excon (>= 0.47.0) @@ -226,25 +226,25 @@ GEM railties (>= 3.2.16) js-routes (2.2.0) railties (>= 4) - json (2.3.1) + json (2.6.1) json_schemer (0.2.18) ecma-re-validator (~> 0.3) hana (~> 1.3) regexp_parser (~> 2.0) uri_template (~> 0.7) jwt (2.3.0) - kaminari (1.2.1) + kaminari (1.2.2) activesupport (>= 4.1.0) - kaminari-actionview (= 1.2.1) - kaminari-activerecord (= 1.2.1) - kaminari-core (= 1.2.1) - kaminari-actionview (1.2.1) + kaminari-actionview (= 1.2.2) + kaminari-activerecord (= 1.2.2) + kaminari-core (= 1.2.2) + kaminari-actionview (1.2.2) actionview - kaminari-core (= 1.2.1) - kaminari-activerecord (1.2.1) + kaminari-core (= 1.2.2) + kaminari-activerecord (1.2.2) activerecord - kaminari-core (= 1.2.1) - kaminari-core (1.2.1) + kaminari-core (= 1.2.2) + kaminari-core (1.2.2) kramdown (2.3.1) rexml listen (3.7.0) @@ -266,7 +266,7 @@ GEM rake mini_magick (4.11.0) mini_mime (1.1.2) - mini_portile2 (2.5.3) + mini_portile2 (2.6.1) minitest (5.15.0) minitest-autotest (1.1.1) minitest-server (~> 1.0) @@ -286,8 +286,8 @@ GEM netrc (0.11.0) newrelic_rpm (8.2.0) nio4r (2.5.8) - nokogiri (1.11.7) - mini_portile2 (~> 2.5.0) + nokogiri (1.12.5) + mini_portile2 (~> 2.6.1) racc (~> 1.4) nyan-cat-formatter (0.12.0) rspec (>= 2.99, >= 2.14.2, < 4) @@ -301,7 +301,7 @@ GEM pagedown-bootstrap-rails (2.1.4) railties (> 3.1) parallel (1.21.0) - parser (3.0.3.2) + parser (3.1.0.0) ast (~> 2.4.1) path_expander (1.1.0) pg (1.2.3) @@ -381,7 +381,7 @@ GEM thor (~> 1.0) rainbow (3.0.0) rake (13.0.6) - ransack (2.4.2) + ransack (2.5.0) activerecord (>= 5.2.4) activesupport (>= 5.2.4) i18n @@ -422,25 +422,25 @@ GEM rspec-mocks (~> 3.10) rspec-support (~> 3.10) rspec-support (3.10.3) - rubocop (1.23.0) + rubocop (1.24.1) parallel (~> 1.10) parser (>= 3.0.0.0) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml - rubocop-ast (>= 1.12.0, < 2.0) + rubocop-ast (>= 1.15.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.15.0) + rubocop-ast (1.15.1) parser (>= 3.0.1.1) - rubocop-performance (1.12.0) + rubocop-performance (1.13.1) rubocop (>= 1.7.0, < 2.0) rubocop-ast (>= 0.4.0) - rubocop-rails (2.12.4) + rubocop-rails (2.13.0) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.7.0, < 2.0) - rubocop-rspec (2.6.0) + rubocop-rspec (2.7.0) rubocop (~> 1.19) ruby-progressbar (1.11.0) ruby-vips (2.1.4) @@ -544,7 +544,7 @@ GEM will_paginate (3.3.1) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.5.1) + zeitwerk (2.5.3) PLATFORMS ruby @@ -625,4 +625,4 @@ DEPENDENCIES whenever BUNDLED WITH - 2.2.32 + 2.3.4 diff --git a/app/controllers/concerns/redirect_behavior.rb b/app/controllers/concerns/redirect_behavior.rb index 5292e0d7..a3d6fd24 100644 --- a/app/controllers/concerns/redirect_behavior.rb +++ b/app/controllers/concerns/redirect_behavior.rb @@ -5,7 +5,7 @@ module RedirectBehavior def redirect_after_submit Rails.logger.debug { "Redirecting user with score:s #{@submission.normalized_score}" } - if @submission.normalized_score.to_d == 1.0.to_d + if @submission.normalized_score.to_d == BigDecimal('1.0') if redirect_to_community_solution? redirect_to_community_solution return diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index a49a5ef0..02c184b4 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -59,7 +59,7 @@ raise: false end def collect_paths(files) - unique_paths = files.map(&:path).reject(&:blank?).uniq + unique_paths = files.map(&:path).compact_blank.uniq subpaths = unique_paths.map do |path| Array.new((path.split('/').length + 1)) do |n| path.split('/').shift(n).join('/') diff --git a/app/controllers/proxy_exercises_controller.rb b/app/controllers/proxy_exercises_controller.rb index 74ff9908..d6f0863a 100644 --- a/app/controllers/proxy_exercises_controller.rb +++ b/app/controllers/proxy_exercises_controller.rb @@ -24,7 +24,7 @@ class ProxyExercisesController < ApplicationController def create myparams = proxy_exercise_params - myparams[:exercises] = Exercise.find(myparams[:exercise_ids].reject(&:empty?)) + myparams[:exercises] = Exercise.find(myparams[:exercise_ids].compact_blank) @proxy_exercise = ProxyExercise.new(myparams) authorize! @@ -78,7 +78,7 @@ class ProxyExercisesController < ApplicationController def update myparams = proxy_exercise_params - myparams[:exercises] = Exercise.find(myparams[:exercise_ids].reject(&:blank?)) + myparams[:exercises] = Exercise.find(myparams[:exercise_ids].compact_blank) update_and_respond(object: @proxy_exercise, params: myparams) end end diff --git a/app/controllers/study_groups_controller.rb b/app/controllers/study_groups_controller.rb index 1bd3a4fa..87b8f8ea 100644 --- a/app/controllers/study_groups_controller.rb +++ b/app/controllers/study_groups_controller.rb @@ -23,7 +23,7 @@ class StudyGroupsController < ApplicationController def update myparams = study_group_params myparams[:external_users] = - StudyGroupMembership.find(myparams[:study_group_membership_ids].reject(&:empty?)).map(&:user) + StudyGroupMembership.find(myparams[:study_group_membership_ids].compact_blank).map(&:user) myparams.delete(:study_group_membership_ids) update_and_respond(object: @study_group, params: myparams) end diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb index 5188320e..de9cf368 100644 --- a/app/controllers/submissions_controller.rb +++ b/app/controllers/submissions_controller.rb @@ -244,9 +244,7 @@ class SubmissionsController < ApplicationController @submission.files.each do |file| content += "#{file.filepath}=#{file.file_id}\n" end - File.open(path, 'w+') do |f| - f.write(content) - end + File.write(path, content) path end diff --git a/app/controllers/user_exercise_feedbacks_controller.rb b/app/controllers/user_exercise_feedbacks_controller.rb index bde9bd43..e07b9c4a 100644 --- a/app/controllers/user_exercise_feedbacks_controller.rb +++ b/app/controllers/user_exercise_feedbacks_controller.rb @@ -39,7 +39,7 @@ class UserExerciseFeedbacksController < ApplicationController authorize! if validate_inputs(uef_params) path = - if rfc && submission && submission.normalized_score.to_d == 1.0.to_d + if rfc && submission && submission.normalized_score.to_d == BigDecimal('1.0') request_for_comment_path(rfc) else implement_exercise_path(@exercise) @@ -82,7 +82,7 @@ class UserExerciseFeedbacksController < ApplicationController authorize! if @exercise && validate_inputs(uef_params) path = - if rfc && submission && submission.normalized_score.to_d == 1.0.to_d + if rfc && submission && submission.normalized_score.to_d == BigDecimal('1.0') request_for_comment_path(rfc) else implement_exercise_path(@exercise) diff --git a/app/models/code_ocean/file.rb b/app/models/code_ocean/file.rb index 7a97427d..152286dd 100644 --- a/app/models/code_ocean/file.rb +++ b/app/models/code_ocean/file.rb @@ -41,7 +41,6 @@ module CodeOcean validates :feedback_message, if: :teacher_defined_assessment?, presence: true validates :feedback_message, absence: true, unless: :teacher_defined_assessment? - validates :file_type_id, presence: true validates :hashed_content, if: :content_present?, presence: true validates :hidden, boolean_presence: true validates :name, presence: true diff --git a/app/models/concerns/creation.rb b/app/models/concerns/creation.rb index ec16164f..926245bc 100644 --- a/app/models/concerns/creation.rb +++ b/app/models/concerns/creation.rb @@ -7,8 +7,5 @@ module Creation belongs_to :user, polymorphic: true alias_method :author, :user alias_method :creator, :user - - validates :user_id, presence: true - validates :user_type, presence: true end end diff --git a/app/models/exercise.rb b/app/models/exercise.rb index 9aae3476..5f9a927a 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -49,7 +49,7 @@ class Exercise < ApplicationRecord MAX_GROUP_EXERCISE_FEEDBACKS = 20 def average_percentage - if average_score && (maximum_score.to_d != 0.0.to_d) && submissions.exists?(cause: 'submit') + if average_score && (maximum_score.to_d != BigDecimal('0.0')) && submissions.exists?(cause: 'submit') (average_score / maximum_score * 100).round(2) else 0 @@ -580,7 +580,7 @@ cause: %w[submit assess remoteSubmit remoteAssess]}).distinct private :valid_submission_deadlines? def needs_more_feedback?(submission) - if submission.normalized_score.to_d == 1.0.to_d + if submission.normalized_score.to_d == BigDecimal('1.0') user_exercise_feedbacks.final.size <= MAX_GROUP_EXERCISE_FEEDBACKS else user_exercise_feedbacks.intermediate.size <= MAX_GROUP_EXERCISE_FEEDBACKS diff --git a/app/models/external_user.rb b/app/models/external_user.rb index 9081f850..25df7be7 100644 --- a/app/models/external_user.rb +++ b/app/models/external_user.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true class ExternalUser < User - validates :consumer_id, presence: true validates :external_id, presence: true def displayname diff --git a/app/models/proxy_exercise.rb b/app/models/proxy_exercise.rb index 6ef8cf7b..497a2d70 100644 --- a/app/models/proxy_exercise.rb +++ b/app/models/proxy_exercise.rb @@ -175,7 +175,7 @@ class ProxyExercise < ApplicationRecord return 0.0 end points_ratio = exercise.maximum_score(user) / max_score - if points_ratio.to_d == 0.0.to_d + if points_ratio.to_d == BigDecimal('0.0') Rails.logger.debug { "scoring user #{user.id} for exercise #{exercise.id}: points_ratio=#{points_ratio} score: 0" } return 0.0 elsif points_ratio > 1.0 diff --git a/app/models/runner.rb b/app/models/runner.rb index 63f080f1..67edef2e 100644 --- a/app/models/runner.rb +++ b/app/models/runner.rb @@ -6,7 +6,7 @@ class Runner < ApplicationRecord before_validation :request_id - validates :execution_environment, :user, :runner_id, presence: true + validates :runner_id, presence: true attr_accessor :strategy diff --git a/app/models/submission.rb b/app/models/submission.rb index 5acf4f34..6b8a4fd8 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -45,7 +45,6 @@ class Submission < ApplicationRecord scope :in_study_group_of, ->(user) { where(study_group_id: user.study_groups) unless user.admin? } validates :cause, inclusion: {in: CAUSES} - validates :exercise_id, presence: true # after_save :trigger_working_times_action_cable @@ -293,7 +292,7 @@ class Submission < ApplicationRecord end # Prevent floating point precision issues by converting to BigDecimal, e.g., for `0.28 * 25` update(score: score.to_d) - if normalized_score.to_d == 1.0.to_d + if normalized_score.to_d == BigDecimal('1.0') Thread.new do RequestForComment.where(exercise_id: exercise_id, user_id: user_id, user_type: user_type).find_each do |rfc| rfc.full_score_reached = true diff --git a/app/models/user_exercise_intervention.rb b/app/models/user_exercise_intervention.rb index e246ae80..ff5e7749 100644 --- a/app/models/user_exercise_intervention.rb +++ b/app/models/user_exercise_intervention.rb @@ -4,8 +4,4 @@ class UserExerciseIntervention < ApplicationRecord belongs_to :user, polymorphic: true belongs_to :intervention belongs_to :exercise - - validates :user, presence: true - validates :exercise, presence: true - validates :intervention, presence: true end diff --git a/app/models/user_proxy_exercise_exercise.rb b/app/models/user_proxy_exercise_exercise.rb index 971d7e72..05a57c24 100644 --- a/app/models/user_proxy_exercise_exercise.rb +++ b/app/models/user_proxy_exercise_exercise.rb @@ -5,10 +5,5 @@ class UserProxyExerciseExercise < ApplicationRecord belongs_to :exercise belongs_to :proxy_exercise - validates :user_id, presence: true - validates :user_type, presence: true - validates :exercise_id, presence: true - validates :proxy_exercise_id, presence: true - validates :user_id, uniqueness: {scope: %i[proxy_exercise_id user_type]} end diff --git a/app/services/proforma_service/convert_task_to_exercise.rb b/app/services/proforma_service/convert_task_to_exercise.rb index 8a13f835..a147c7cd 100644 --- a/app/services/proforma_service/convert_task_to_exercise.rb +++ b/app/services/proforma_service/convert_task_to_exercise.rb @@ -40,9 +40,9 @@ module ProformaService end def task_files - @task_files ||= @task.all_files.reject {|file| file.id == 'ms-placeholder-file' }.map do |task_file| + @task_files ||= @task.all_files.reject {|file| file.id == 'ms-placeholder-file' }.to_h do |task_file| [task_file.id, codeocean_file_from_task_file(task_file)] - end.to_h + end end def codeocean_file_from_task_file(file) diff --git a/db/migrate/20181129093207_drop_errors.rb b/db/migrate/20181129093207_drop_errors.rb index 59418c38..90973d62 100644 --- a/db/migrate/20181129093207_drop_errors.rb +++ b/db/migrate/20181129093207_drop_errors.rb @@ -9,7 +9,6 @@ class DropErrors < ActiveRecord::Migration[5.2] scope :for_execution_environment, ->(execution_environment) { where(execution_environment_id: execution_environment.id) } scope :grouped_by_message, -> { select('MAX(created_at) AS created_at, MAX(id) AS id, message, COUNT(id) AS count').group(:message).order('count DESC') } - validates :execution_environment_id, presence: true validates :message, presence: true def self.nested_resource? diff --git a/lib/active_model/validations/boolean_presence_validator.rb b/lib/active_model/validations/boolean_presence_validator.rb index fa959e6e..7a2e606f 100644 --- a/lib/active_model/validations/boolean_presence_validator.rb +++ b/lib/active_model/validations/boolean_presence_validator.rb @@ -8,7 +8,7 @@ module ActiveModel def validate(record) [attributes].flatten.each do |attribute| value = record.send(:read_attribute_for_validation, attribute) - record.errors.add(attribute, nil, options) unless BOOLEAN_VALUES.include?(value) + record.errors.add(attribute, nil, **options) unless BOOLEAN_VALUES.include?(value) end end end diff --git a/lib/assessor.rb b/lib/assessor.rb index 7d4bf600..b7f68e16 100644 --- a/lib/assessor.rb +++ b/lib/assessor.rb @@ -12,7 +12,7 @@ class Assessor def calculate_score(test_outcome) score = 0.0 - if test_outcome[:passed].to_d != 0.0.to_d && test_outcome[:count].to_d != 0.0.to_d + if test_outcome[:passed].to_d != BigDecimal('0.0') && test_outcome[:count].to_d != BigDecimal('0.0') score = (test_outcome[:passed].to_f / test_outcome[:count]) # prevent negative scores score = [0.0, score].max diff --git a/lib/code_ocean/config.rb b/lib/code_ocean/config.rb index e8623254..c8055a54 100644 --- a/lib/code_ocean/config.rb +++ b/lib/code_ocean/config.rb @@ -9,7 +9,9 @@ module CodeOcean def read(options = {}) path = Rails.root.join('config', "#{@filename}.yml#{options[:erb] ? '.erb' : ''}") if ::File.exist?(path) - content = options[:erb] ? YAML.safe_load(ERB.new(::File.new(path, 'r').read).result, aliases: true, permitted_classes: [Range]) : YAML.load_file(path) + yaml_content = ::File.new(path, 'r').read || '' + yaml_content = ERB.new(yaml_content).result if options[:erb] + content = YAML.safe_load(yaml_content, aliases: true, permitted_classes: [Range, Symbol]) content[Rails.env].with_indifferent_access else raise Error.new("Configuration file not found: #{path}") diff --git a/lib/cpp_catch2_adapter.rb b/lib/cpp_catch2_adapter.rb index 02dc9ea0..232ca7d7 100644 --- a/lib/cpp_catch2_adapter.rb +++ b/lib/cpp_catch2_adapter.rb @@ -17,7 +17,7 @@ class CppCatch2Adapter < TestingFrameworkAdapter count = output[:stdout].scan(COUNT_REGEXP).try(:last).try(:first).try(:to_i) || 0 failed = output[:stdout].scan(FAILURES_REGEXP).try(:last).try(:first).try(:to_i) || 0 error_matches = output[:stdout].scan(ASSERTION_ERROR_REGEXP) || [] - {count: count, failed: failed, error_messages: error_matches.flatten.reject(&:blank?)} + {count: count, failed: failed, error_messages: error_matches.flatten.compact_blank} end end end diff --git a/lib/docker_client.rb b/lib/docker_client.rb index af8667f3..8355e03e 100644 --- a/lib/docker_client.rb +++ b/lib/docker_client.rb @@ -315,7 +315,7 @@ container_execution_time: nil} @tubesock&.send_data JSON.dump({'cmd' => 'timeout'}) if @socket begin - @socket.send('#timeout') + @socket.send('#timeout') # rubocop:disable Performance/StringIdentifierArgument # sleep one more second to ensure that the message reaches the submissions_controller. sleep(1) @socket.close @@ -434,9 +434,9 @@ container_execution_time: nil} end def self.mapped_ports(execution_environment) - execution_environment.exposed_ports.map do |port| + execution_environment.exposed_ports.to_h do |port| ["#{port}/tcp", [{'HostPort' => PortPool.available_port.to_s}]] - end.to_h + end end def self.pull(docker_image) diff --git a/lib/junit5_adapter.rb b/lib/junit5_adapter.rb index d482a867..0d615ae6 100644 --- a/lib/junit5_adapter.rb +++ b/lib/junit5_adapter.rb @@ -16,7 +16,7 @@ class Junit5Adapter < TestingFrameworkAdapter {count: count, passed: count} else error_matches = output[:stdout].scan(ASSERTION_ERROR_REGEXP) || [] - {count: count, failed: failed, error_messages: error_matches.flatten.reject(&:blank?)} + {count: count, failed: failed, error_messages: error_matches.flatten.compact_blank} end end end diff --git a/lib/junit_adapter.rb b/lib/junit_adapter.rb index 705f85b2..0ca905ae 100644 --- a/lib/junit_adapter.rb +++ b/lib/junit_adapter.rb @@ -17,7 +17,7 @@ class JunitAdapter < TestingFrameworkAdapter count = output[:stdout].scan(COUNT_REGEXP).try(:last).try(:first).try(:to_i) || 0 failed = output[:stdout].scan(FAILURES_REGEXP).try(:last).try(:first).try(:to_i) || 0 error_matches = output[:stdout].scan(ASSERTION_ERROR_REGEXP) || [] - {count: count, failed: failed, error_messages: error_matches.flatten.reject(&:blank?)} + {count: count, failed: failed, error_messages: error_matches.flatten.compact_blank} end end end diff --git a/lib/py_lint_adapter.rb b/lib/py_lint_adapter.rb index b9dc9235..ed62676b 100644 --- a/lib/py_lint_adapter.rb +++ b/lib/py_lint_adapter.rb @@ -43,8 +43,8 @@ class PyLintAdapter < TestingFrameworkAdapter { count: count, failed: failed, - error_messages: concatenated_errors.flatten.reject(&:blank?), - detailed_linter_results: assertion_error_matches.flatten.reject(&:blank?), + error_messages: concatenated_errors.flatten.compact_blank, + detailed_linter_results: assertion_error_matches.flatten.compact_blank, } end diff --git a/lib/py_unit_adapter.rb b/lib/py_unit_adapter.rb index 70217caa..fbb79f59 100644 --- a/lib/py_unit_adapter.rb +++ b/lib/py_unit_adapter.rb @@ -32,6 +32,6 @@ class PyUnitAdapter < TestingFrameworkAdapter Sentry.capture_message({stderr: output[:stderr], regex: ASSERTION_ERROR_REGEXP}.to_json) assertion_error_matches = [] end - {count: count, failed: failed + errors, error_messages: assertion_error_matches.flatten.reject(&:blank?)} + {count: count, failed: failed + errors, error_messages: assertion_error_matches.flatten.compact_blank} end end diff --git a/lib/r_script_adapter.rb b/lib/r_script_adapter.rb index 6fdb04c6..773ae1be 100644 --- a/lib/r_script_adapter.rb +++ b/lib/r_script_adapter.rb @@ -14,6 +14,6 @@ class RScriptAdapter < TestingFrameworkAdapter passed = captures.second failed = count - passed assertion_error_matches = output[:stdout].scan(ASSERTION_ERROR_REGEXP) || [] - {count: count, failed: failed, error_messages: assertion_error_matches.flatten.reject(&:blank?)} + {count: count, failed: failed, error_messages: assertion_error_matches.flatten.compact_blank} end end diff --git a/lib/runner/strategy/docker_container_pool.rb b/lib/runner/strategy/docker_container_pool.rb index 526a7c76..dca17ad8 100644 --- a/lib/runner/strategy/docker_container_pool.rb +++ b/lib/runner/strategy/docker_container_pool.rb @@ -97,7 +97,7 @@ class Runner::Strategy::DockerContainerPool < Runner::Strategy FileUtils.cp(file.native_file.path, local_file_path) else begin - File.open(local_file_path, 'w') {|f| f.write(file.content) } + File.write(local_file_path, file.content) rescue IOError => e raise Runner::Error::WorkspaceError.new("Could not create file #{file.filepath}: #{e.inspect}") end diff --git a/spec/concerns/file_parameters_spec.rb b/spec/concerns/file_parameters_spec.rb index 65e209a2..8d00ca4c 100644 --- a/spec/concerns/file_parameters_spec.rb +++ b/spec/concerns/file_parameters_spec.rb @@ -8,11 +8,11 @@ end describe FileParameters do let(:controller) { Controller.new } - let(:hello_world) { FactoryBot.create(:hello_world) } + let(:hello_world) { create(:hello_world) } describe '#reject_illegal_file_attributes!' do def file_accepted?(file) - files = [[0, FactoryBot.attributes_for(:file, context: hello_world, file_id: file.id)]] + files = [[0, attributes_for(:file, context: hello_world, file_id: file.id)]] filtered_files = controller.send(:reject_illegal_file_attributes, hello_world, files) files.eql?(filtered_files) end @@ -24,31 +24,31 @@ describe FileParameters do end it 'new file' do - submission = FactoryBot.create(:submission, exercise: hello_world, id: 1337) - new_file = FactoryBot.create(:file, context: submission) + submission = create(:submission, exercise: hello_world, id: 1337) + new_file = create(:file, context: submission) expect(file_accepted?(new_file)).to be true end end describe 'rejects' do it 'file of different exercise' do - fibonacci = FactoryBot.create(:fibonacci, allow_file_creation: true) - other_exercises_file = FactoryBot.create(:file, context: fibonacci) + fibonacci = create(:fibonacci, allow_file_creation: true) + other_exercises_file = create(:file, context: fibonacci) expect(file_accepted?(other_exercises_file)).to be false end it 'hidden file' do - hidden_file = FactoryBot.create(:file, context: hello_world, hidden: true) + hidden_file = create(:file, context: hello_world, hidden: true) expect(file_accepted?(hidden_file)).to be false end it 'read only file' do - read_only_file = FactoryBot.create(:file, context: hello_world, read_only: true) + read_only_file = create(:file, context: hello_world, read_only: true) expect(file_accepted?(read_only_file)).to be false end it 'non existent file' do - non_existent_file = FactoryBot.build(:file, context: hello_world, id: 42) + non_existent_file = build(:file, context: hello_world, id: 42) expect(file_accepted?(non_existent_file)).to be false end end diff --git a/spec/concerns/lti_spec.rb b/spec/concerns/lti_spec.rb index 71ac0bd9..9423a951 100644 --- a/spec/concerns/lti_spec.rb +++ b/spec/concerns/lti_spec.rb @@ -13,7 +13,7 @@ describe Lti do describe '#build_tool_provider' do it 'instantiates a tool provider' do expect(IMS::LTI::ToolProvider).to receive(:new) - controller.send(:build_tool_provider, consumer: FactoryBot.build(:consumer), parameters: {}) + controller.send(:build_tool_provider, consumer: build(:consumer), parameters: {}) end end @@ -101,12 +101,12 @@ describe Lti do end describe '#send_score' do - let(:consumer) { FactoryBot.create(:consumer) } + let(:consumer) { create(:consumer) } let(:score) { 0.5 } - let(:submission) { FactoryBot.create(:submission) } + let(:submission) { create(:submission) } before do - FactoryBot.create(:lti_parameter, consumers_id: consumer.id, external_users_id: submission.user_id, exercises_id: submission.exercise_id) + create(:lti_parameter, consumers_id: consumer.id, external_users_id: submission.user_id, exercises_id: submission.exercise_id) end context 'with an invalid score' do @@ -168,18 +168,18 @@ describe Lti do let(:parameters) { ActionController::Parameters.new({}) } it 'stores data in the session' do - controller.instance_variable_set(:@current_user, FactoryBot.create(:external_user)) - controller.instance_variable_set(:@exercise, FactoryBot.create(:fibonacci)) + controller.instance_variable_set(:@current_user, create(:external_user)) + controller.instance_variable_set(:@exercise, create(:fibonacci)) expect(controller.session).to receive(:[]=).with(:external_user_id, anything) expect(controller.session).to receive(:[]=).with(:lti_parameters_id, anything) - controller.send(:store_lti_session_data, consumer: FactoryBot.build(:consumer), parameters: parameters) + controller.send(:store_lti_session_data, consumer: build(:consumer), parameters: parameters) end it 'creates an LtiParameter Object' do before_count = LtiParameter.count - controller.instance_variable_set(:@current_user, FactoryBot.create(:external_user)) - controller.instance_variable_set(:@exercise, FactoryBot.create(:fibonacci)) - controller.send(:store_lti_session_data, consumer: FactoryBot.build(:consumer), parameters: parameters) + controller.instance_variable_set(:@current_user, create(:external_user)) + controller.instance_variable_set(:@exercise, create(:fibonacci)) + controller.send(:store_lti_session_data, consumer: build(:consumer), parameters: parameters) expect(LtiParameter.count).to eq(before_count + 1) end end diff --git a/spec/controllers/admin/dashboard_controller_spec.rb b/spec/controllers/admin/dashboard_controller_spec.rb index 55d4ede5..21db904e 100644 --- a/spec/controllers/admin/dashboard_controller_spec.rb +++ b/spec/controllers/admin/dashboard_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Admin::DashboardController do - before { allow(controller).to receive(:current_user).and_return(FactoryBot.build(:admin)) } + before { allow(controller).to receive(:current_user).and_return(build(:admin)) } describe 'GET #show' do describe 'with format HTML' do diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb index 89d77833..307c6498 100644 --- a/spec/controllers/application_controller_spec.rb +++ b/spec/controllers/application_controller_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' describe ApplicationController do describe '#current_user' do context 'with an external user' do - let(:external_user) { FactoryBot.create(:external_user) } + let(:external_user) { create(:external_user) } before { session[:external_user_id] = external_user.id } @@ -15,7 +15,7 @@ describe ApplicationController do end context 'without an external user' do - let(:internal_user) { FactoryBot.create(:teacher) } + let(:internal_user) { create(:teacher) } before { login_user(internal_user) } diff --git a/spec/controllers/code_ocean/files_controller_spec.rb b/spec/controllers/code_ocean/files_controller_spec.rb index 8097cd70..759ab849 100644 --- a/spec/controllers/code_ocean/files_controller_spec.rb +++ b/spec/controllers/code_ocean/files_controller_spec.rb @@ -3,15 +3,15 @@ require 'rails_helper' describe CodeOcean::FilesController do - let(:user) { FactoryBot.create(:admin) } + let(:user) { create(:admin) } before { allow(controller).to receive(:current_user).and_return(user) } describe 'POST #create' do - let(:submission) { FactoryBot.create(:submission, user: user) } + let(:submission) { create(:submission, user: user) } context 'with a valid file' do - let(:perform_request) { proc { post :create, params: {code_ocean_file: FactoryBot.build(:file, context: submission).attributes, format: :json} } } + let(:perform_request) { proc { post :create, params: {code_ocean_file: build(:file, context: submission).attributes, format: :json} } } before do submission.exercise.update(allow_file_creation: true) @@ -41,7 +41,7 @@ describe CodeOcean::FilesController do end describe 'DELETE #destroy' do - let(:exercise) { FactoryBot.create(:fibonacci) } + let(:exercise) { create(:fibonacci) } let(:perform_request) { proc { delete :destroy, params: {id: exercise.files.first.id} } } before { perform_request.call } @@ -49,7 +49,7 @@ describe CodeOcean::FilesController do expect_assigns(file: CodeOcean::File) it 'destroys the file' do - FactoryBot.create(:fibonacci) + create(:fibonacci) expect { perform_request.call }.to change(CodeOcean::File, :count).by(-1) end diff --git a/spec/controllers/codeharbor_links_controller_spec.rb b/spec/controllers/codeharbor_links_controller_spec.rb index 4b073fe7..092e9f38 100644 --- a/spec/controllers/codeharbor_links_controller_spec.rb +++ b/spec/controllers/codeharbor_links_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe CodeharborLinksController do - let(:user) { FactoryBot.create(:teacher) } + let(:user) { create(:teacher) } let(:codeocean_config) { instance_double(CodeOcean::Config) } let(:codeharbor_config) { {codeharbor: {enabled: true, url: 'http://test.url'}} } @@ -23,7 +23,7 @@ describe CodeharborLinksController do end describe 'GET #edit' do - let(:codeharbor_link) { FactoryBot.create(:codeharbor_link, user: user) } + let(:codeharbor_link) { create(:codeharbor_link, user: user) } before { get :edit, params: {id: codeharbor_link.id} } @@ -57,7 +57,7 @@ describe CodeharborLinksController do end describe 'PUT #update' do - let(:codeharbor_link) { FactoryBot.create(:codeharbor_link, user: user) } + let(:codeharbor_link) { create(:codeharbor_link, user: user) } let(:put_request) { patch :update, params: {id: codeharbor_link.id, codeharbor_link: params} } let(:params) { {push_url: 'http://foo.bar/push', check_uuid_url: 'http://foo.bar/check', api_key: 'api_key'} } @@ -92,7 +92,7 @@ describe CodeharborLinksController do end describe 'DELETE #destroy' do - let!(:codeharbor_link) { FactoryBot.create(:codeharbor_link, user: user) } + let!(:codeharbor_link) { create(:codeharbor_link, user: user) } let(:destroy_request) { delete :destroy, params: {id: codeharbor_link.id} } it 'deletes codeharbor_link' do diff --git a/spec/controllers/consumers_controller_spec.rb b/spec/controllers/consumers_controller_spec.rb index 6868ba96..b5e5a1a8 100644 --- a/spec/controllers/consumers_controller_spec.rb +++ b/spec/controllers/consumers_controller_spec.rb @@ -3,14 +3,14 @@ require 'rails_helper' describe ConsumersController do - let(:consumer) { FactoryBot.create(:consumer) } - let(:user) { FactoryBot.create(:admin) } + let(:consumer) { create(:consumer) } + let(:user) { create(:admin) } before { allow(controller).to receive(:current_user).and_return(user) } describe 'POST #create' do context 'with a valid consumer' do - let(:perform_request) { proc { post :create, params: {consumer: FactoryBot.attributes_for(:consumer)} } } + let(:perform_request) { proc { post :create, params: {consumer: attributes_for(:consumer)} } } before { perform_request.call } @@ -38,7 +38,7 @@ describe ConsumersController do expect_assigns(consumer: Consumer) it 'destroys the consumer' do - consumer = FactoryBot.create(:consumer) + consumer = create(:consumer) expect { delete :destroy, params: {id: consumer.id} }.to change(Consumer, :count).by(-1) end @@ -55,7 +55,7 @@ describe ConsumersController do describe 'GET #index' do before do - FactoryBot.create_pair(:consumer) + create_pair(:consumer) get :index end @@ -82,7 +82,7 @@ describe ConsumersController do describe 'PUT #update' do context 'with a valid consumer' do - before { put :update, params: {consumer: FactoryBot.attributes_for(:consumer), id: consumer.id} } + before { put :update, params: {consumer: attributes_for(:consumer), id: consumer.id} } expect_assigns(consumer: Consumer) expect_redirect(:consumer) diff --git a/spec/controllers/error_template_attributes_controller_spec.rb b/spec/controllers/error_template_attributes_controller_spec.rb index a80ee6a2..521052df 100644 --- a/spec/controllers/error_template_attributes_controller_spec.rb +++ b/spec/controllers/error_template_attributes_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe ErrorTemplateAttributesController do - let!(:error_template_attribute) { FactoryBot.create(:error_template_attribute) } - let(:user) { FactoryBot.create(:admin) } + let!(:error_template_attribute) { create(:error_template_attribute) } + let(:user) { create(:admin) } before { allow(controller).to receive(:current_user).and_return(user) } @@ -35,7 +35,7 @@ describe ErrorTemplateAttributesController do end it 'updates error_template_attribute' do - patch :update, params: {id: error_template_attribute, error_template_attribute: FactoryBot.attributes_for(:error_template_attribute)} + patch :update, params: {id: error_template_attribute, error_template_attribute: attributes_for(:error_template_attribute)} expect(response).to redirect_to(error_template_attribute_path(assigns(:error_template_attribute))) end diff --git a/spec/controllers/error_templates_controller_spec.rb b/spec/controllers/error_templates_controller_spec.rb index 4f7dfbaa..5a79cddf 100644 --- a/spec/controllers/error_templates_controller_spec.rb +++ b/spec/controllers/error_templates_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe ErrorTemplatesController do - let!(:error_template) { FactoryBot.create(:error_template) } - let(:user) { FactoryBot.create(:admin) } + let!(:error_template) { create(:error_template) } + let(:user) { create(:admin) } before { allow(controller).to receive(:current_user).and_return(user) } @@ -35,7 +35,7 @@ describe ErrorTemplatesController do end it 'updates error_template' do - patch :update, params: {id: error_template, error_template: FactoryBot.attributes_for(:error_template)} + patch :update, params: {id: error_template, error_template: attributes_for(:error_template)} expect(response).to redirect_to(error_template_path(assigns(:error_template))) end diff --git a/spec/controllers/events_controller_spec.rb b/spec/controllers/events_controller_spec.rb index e59922cd..f9baf1c8 100644 --- a/spec/controllers/events_controller_spec.rb +++ b/spec/controllers/events_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe EventsController do - let(:user) { FactoryBot.create(:admin) } - let(:exercise) { FactoryBot.create(:fibonacci) } + let(:user) { create(:admin) } + let(:exercise) { create(:fibonacci) } before { allow(controller).to receive(:current_user).and_return(user) } diff --git a/spec/controllers/execution_environments_controller_spec.rb b/spec/controllers/execution_environments_controller_spec.rb index 32acd572..9f34792c 100644 --- a/spec/controllers/execution_environments_controller_spec.rb +++ b/spec/controllers/execution_environments_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe ExecutionEnvironmentsController do - let(:execution_environment) { FactoryBot.create(:ruby) } - let(:user) { FactoryBot.create(:admin) } + let(:execution_environment) { create(:ruby) } + let(:user) { create(:admin) } before do allow(controller).to receive(:current_user).and_return(user) @@ -13,7 +13,7 @@ describe ExecutionEnvironmentsController do describe 'POST #create' do context 'with a valid execution environment' do - let(:perform_request) { proc { post :create, params: {execution_environment: FactoryBot.build(:ruby, pool_size: 1).attributes} } } + let(:perform_request) { proc { post :create, params: {execution_environment: build(:ruby, pool_size: 1).attributes} } } before do allow(Rails.env).to receive(:test?).and_return(false, true) @@ -64,7 +64,7 @@ describe ExecutionEnvironmentsController do expect_assigns(execution_environment: :execution_environment) it 'destroys the execution environment' do - execution_environment = FactoryBot.create(:ruby) + execution_environment = create(:ruby) expect { delete :destroy, params: {id: execution_environment.id} }.to change(ExecutionEnvironment, :count).by(-1) end @@ -103,7 +103,7 @@ describe ExecutionEnvironmentsController do describe 'GET #index' do before do - FactoryBot.create_pair(:ruby) + create_pair(:ruby) get :index end @@ -186,7 +186,7 @@ describe ExecutionEnvironmentsController do runner = instance_double 'runner' allow(Runner).to receive(:for).and_return(runner) allow(runner).to receive(:execute_command).and_return({}) - put :update, params: {execution_environment: FactoryBot.attributes_for(:ruby, pool_size: 1), id: execution_environment.id} + put :update, params: {execution_environment: attributes_for(:ruby, pool_size: 1), id: execution_environment.id} end expect_assigns(docker_images: Array) @@ -216,8 +216,8 @@ describe ExecutionEnvironmentsController do end describe '#sync_all_to_runner_management' do - let(:execution_environments) { %i[ruby java python].map {|environment| FactoryBot.create(environment) } } - let(:outdated_execution_environments) { %i[node_js html].map {|environment| FactoryBot.build_stubbed(environment) } } + let(:execution_environments) { %i[ruby java python].map {|environment| create(environment) } } + let(:outdated_execution_environments) { %i[node_js html].map {|environment| build_stubbed(environment) } } let(:codeocean_config) { instance_double(CodeOcean::Config) } let(:runner_management_config) { {runner_management: {enabled: true, strategy: :poseidon}} } diff --git a/spec/controllers/exercises_controller_spec.rb b/spec/controllers/exercises_controller_spec.rb index 683f0d40..caf76a98 100644 --- a/spec/controllers/exercises_controller_spec.rb +++ b/spec/controllers/exercises_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe ExercisesController do - let(:exercise) { FactoryBot.create(:dummy) } - let(:user) { FactoryBot.create(:admin) } + let(:exercise) { create(:dummy) } + let(:user) { create(:admin) } before { allow(controller).to receive(:current_user).and_return(user) } @@ -56,7 +56,7 @@ describe ExercisesController do end describe 'POST #create' do - let(:exercise_attributes) { FactoryBot.build(:dummy).attributes } + let(:exercise_attributes) { build(:dummy).attributes } context 'with a valid exercise' do let(:perform_request) { proc { post :create, params: {exercise: exercise_attributes} } } @@ -76,7 +76,7 @@ describe ExercisesController do let(:perform_request) { proc { post :create, params: {exercise: exercise_attributes.merge(files_attributes: files_attributes)} } } context 'when specifying the file content within the form' do - let(:files_attributes) { {'0' => FactoryBot.build(:file).attributes} } + let(:files_attributes) { {'0' => build(:file).attributes} } it 'creates the file' do expect { perform_request.call }.to change(CodeOcean::File, :count) @@ -84,11 +84,11 @@ describe ExercisesController do end context 'when uploading a file' do - let(:files_attributes) { {'0' => FactoryBot.build(:file, file_type: file_type).attributes.merge(content: uploaded_file)} } + let(:files_attributes) { {'0' => build(:file, file_type: file_type).attributes.merge(content: uploaded_file)} } context 'when uploading a binary file' do let(:file_path) { Rails.root.join('db/seeds/audio_video/devstories.mp4') } - let(:file_type) { FactoryBot.create(:dot_mp4) } + let(:file_type) { create(:dot_mp4) } let(:uploaded_file) { Rack::Test::UploadedFile.new(file_path, 'video/mp4', true) } it 'creates the file' do @@ -103,7 +103,7 @@ describe ExercisesController do context 'when uploading a non-binary file' do let(:file_path) { Rails.root.join('db/seeds/fibonacci/exercise.rb') } - let(:file_type) { FactoryBot.create(:dot_rb) } + let(:file_type) { create(:dot_rb) } let(:uploaded_file) { Rack::Test::UploadedFile.new(file_path, 'text/x-ruby', false) } it 'creates the file' do @@ -133,7 +133,7 @@ describe ExercisesController do expect_assigns(exercise: :exercise) it 'destroys the exercise' do - exercise = FactoryBot.create(:dummy) + exercise = create(:dummy) expect { delete :destroy, params: {id: exercise.id} }.to change(Exercise, :count).by(-1) end @@ -152,14 +152,14 @@ describe ExercisesController do let(:perform_request) { proc { get :implement, params: {id: exercise.id} } } context 'with an exercise with visible files' do - let(:exercise) { FactoryBot.create(:fibonacci) } + let(:exercise) { create(:fibonacci) } before { perform_request.call } expect_assigns(exercise: :exercise) context 'with an existing submission' do - let!(:submission) { FactoryBot.create(:submission, exercise_id: exercise.id, user_id: user.id, user_type: user.class.name) } + let!(:submission) { create(:submission, exercise_id: exercise.id, user_id: user.id, user_type: user.class.name) } it "populates the editors with the submission's files' content" do perform_request.call @@ -190,7 +190,7 @@ describe ExercisesController do let(:scope) { Pundit.policy_scope!(user, Exercise) } before do - FactoryBot.create_pair(:dummy) + create_pair(:dummy) get :index end @@ -239,7 +239,7 @@ describe ExercisesController do describe 'POST #submit' do let(:output) { {} } let(:perform_request) { post :submit, format: :json, params: {id: exercise.id, submission: {cause: 'submit', exercise_id: exercise.id}} } - let(:user) { FactoryBot.create(:external_user) } + let(:user) { create(:external_user) } let(:scoring_response) do [{ status: :ok, @@ -260,8 +260,8 @@ describe ExercisesController do end before do - FactoryBot.create(:lti_parameter, external_user: user, exercise: exercise) - submission = FactoryBot.build(:submission, exercise: exercise, user: user) + create(:lti_parameter, external_user: user, exercise: exercise) + submission = build(:submission, exercise: exercise, user: user) allow(submission).to receive(:normalized_score).and_return(1) allow(submission).to receive(:calculate_score).and_return(scoring_response) allow(Submission).to receive(:create).and_return(submission) @@ -328,7 +328,7 @@ describe ExercisesController do describe 'PUT #update' do context 'with a valid exercise' do - let(:exercise_attributes) { FactoryBot.build(:dummy).attributes } + let(:exercise_attributes) { build(:dummy).attributes } before { put :update, params: {exercise: exercise_attributes, id: exercise.id} } @@ -352,7 +352,7 @@ describe ExercisesController do render_views let(:post_request) { post :export_external_check, params: {id: exercise.id} } - let!(:codeharbor_link) { FactoryBot.create(:codeharbor_link, user: user) } + let!(:codeharbor_link) { create(:codeharbor_link, user: user) } let(:external_check_hash) { {message: message, exercise_found: true, update_right: update_right, error: error} } let(:message) { 'message' } let(:update_right) { true } @@ -405,7 +405,7 @@ describe ExercisesController do describe '#export_external_confirm' do render_views - let!(:codeharbor_link) { FactoryBot.create(:codeharbor_link, user: user) } + let!(:codeharbor_link) { create(:codeharbor_link, user: user) } let(:post_request) { post :export_external_confirm, params: {id: exercise.id, codeharbor_link: codeharbor_link.id} } let(:error) { nil } let(:zip) { 'zip' } @@ -440,8 +440,8 @@ describe ExercisesController do end describe '#import_uuid_check' do - let(:exercise) { FactoryBot.create(:dummy, uuid: SecureRandom.uuid) } - let!(:codeharbor_link) { FactoryBot.create(:codeharbor_link, user: user) } + let(:exercise) { create(:dummy, uuid: SecureRandom.uuid) } + let!(:codeharbor_link) { create(:codeharbor_link, user: user) } let(:uuid) { exercise.reload.uuid } let(:post_request) { post :import_uuid_check, params: {uuid: uuid} } let(:headers) { {'Authorization' => "Bearer #{codeharbor_link.api_key}"} } @@ -466,7 +466,7 @@ describe ExercisesController do end context 'when the user cannot update the exercise' do - let(:codeharbor_link) { FactoryBot.create(:codeharbor_link, api_key: 'anotherkey') } + let(:codeharbor_link) { create(:codeharbor_link, api_key: 'anotherkey') } it 'renders correct response' do post_request @@ -490,8 +490,8 @@ describe ExercisesController do end describe 'POST #import_exercise' do - let(:codeharbor_link) { FactoryBot.create(:codeharbor_link, user: user) } - let!(:imported_exercise) { FactoryBot.create(:fibonacci) } + let(:codeharbor_link) { create(:codeharbor_link, user: user) } + let!(:imported_exercise) { create(:fibonacci) } let(:post_request) { post :import_exercise, body: zip_file_content } let(:zip_file_content) { 'zipped task xml' } let(:headers) { {'Authorization' => "Bearer #{codeharbor_link.api_key}"} } diff --git a/spec/controllers/external_users_controller_spec.rb b/spec/controllers/external_users_controller_spec.rb index 40286549..d39acb26 100644 --- a/spec/controllers/external_users_controller_spec.rb +++ b/spec/controllers/external_users_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe ExternalUsersController do - let(:user) { FactoryBot.build(:admin) } - let!(:users) { FactoryBot.create_pair(:external_user) } + let(:user) { build(:admin) } + let!(:users) { create_pair(:external_user) } before { allow(controller).to receive(:current_user).and_return(user) } diff --git a/spec/controllers/file_types_controller_spec.rb b/spec/controllers/file_types_controller_spec.rb index 5035ceb8..3f13df2d 100644 --- a/spec/controllers/file_types_controller_spec.rb +++ b/spec/controllers/file_types_controller_spec.rb @@ -3,14 +3,14 @@ require 'rails_helper' describe FileTypesController do - let(:file_type) { FactoryBot.create(:dot_rb) } - let(:user) { FactoryBot.create(:admin) } + let(:file_type) { create(:dot_rb) } + let(:user) { create(:admin) } before { allow(controller).to receive(:current_user).and_return(user) } describe 'POST #create' do context 'with a valid file type' do - let(:perform_request) { proc { post :create, params: {file_type: FactoryBot.attributes_for(:dot_rb)} } } + let(:perform_request) { proc { post :create, params: {file_type: attributes_for(:dot_rb)} } } before { perform_request.call } @@ -40,7 +40,7 @@ describe FileTypesController do expect_assigns(file_type: FileType) it 'destroys the file type' do - file_type = FactoryBot.create(:dot_rb) + file_type = create(:dot_rb) expect { delete :destroy, params: {id: file_type.id} }.to change(FileType, :count).by(-1) end @@ -58,7 +58,7 @@ describe FileTypesController do describe 'GET #index' do before do - FactoryBot.create_pair(:dot_rb) + create_pair(:dot_rb) get :index end @@ -86,7 +86,7 @@ describe FileTypesController do describe 'PUT #update' do context 'with a valid file type' do - before { put :update, params: {file_type: FactoryBot.attributes_for(:dot_rb), id: file_type.id} } + before { put :update, params: {file_type: attributes_for(:dot_rb), id: file_type.id} } expect_assigns(editor_modes: Array) expect_assigns(file_type: FileType) diff --git a/spec/controllers/internal_users_controller_spec.rb b/spec/controllers/internal_users_controller_spec.rb index c6a1cb9a..7ff2fb7b 100644 --- a/spec/controllers/internal_users_controller_spec.rb +++ b/spec/controllers/internal_users_controller_spec.rb @@ -3,11 +3,11 @@ require 'rails_helper' describe InternalUsersController do - let(:user) { FactoryBot.build(:admin) } - let!(:users) { FactoryBot.create_pair(:teacher) } + let(:user) { build(:admin) } + let!(:users) { create_pair(:teacher) } describe 'GET #activate' do - let(:user) { InternalUser.create(FactoryBot.attributes_for(:teacher)) } + let(:user) { InternalUser.create(attributes_for(:teacher)) } before do user.send(:setup_activation) @@ -39,7 +39,7 @@ describe InternalUsersController do end describe 'PUT #activate' do - let(:user) { InternalUser.create(FactoryBot.build(:teacher).attributes) } + let(:user) { InternalUser.create(build(:teacher).attributes) } let(:password) { SecureRandom.hex } before do @@ -108,7 +108,7 @@ describe InternalUsersController do before { allow(controller).to receive(:current_user).and_return(user) } context 'with a valid internal user' do - let(:perform_request) { proc { post :create, params: {internal_user: FactoryBot.build(:teacher).attributes} } } + let(:perform_request) { proc { post :create, params: {internal_user: build(:teacher).attributes} } } before { perform_request.call } @@ -316,7 +316,7 @@ describe InternalUsersController do before { allow(controller).to receive(:current_user).and_return(user) } context 'with a valid internal user' do - before { put :update, params: {internal_user: FactoryBot.attributes_for(:teacher), id: users.first.id} } + before { put :update, params: {internal_user: attributes_for(:teacher), id: users.first.id} } expect_assigns(user: InternalUser) expect_redirect { user } diff --git a/spec/controllers/request_for_comments_controller_spec.rb b/spec/controllers/request_for_comments_controller_spec.rb index 2be03f34..1950ff24 100644 --- a/spec/controllers/request_for_comments_controller_spec.rb +++ b/spec/controllers/request_for_comments_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe RequestForCommentsController do - let(:user) { FactoryBot.create(:admin) } + let(:user) { create(:admin) } before { allow(controller).to receive(:current_user).and_return(user) } @@ -16,13 +16,13 @@ describe RequestForCommentsController do end it 'shows only rfc`s belonging to selected study group' do - my_study_group = FactoryBot.create(:study_group) - rfc_within_my_study_group = FactoryBot.create(:rfc, user: user) + my_study_group = create(:study_group) + rfc_within_my_study_group = create(:rfc, user: user) user.update(study_groups: [my_study_group]) rfc_within_my_study_group.submission.update(study_group: my_study_group) - another_study_group = FactoryBot.create(:study_group) - rfc_other_study_group = FactoryBot.create(:rfc) + another_study_group = create(:study_group) + rfc_other_study_group = create(:rfc) rfc_other_study_group.user.update(study_groups: [another_study_group]) rfc_other_study_group.submission.update(study_group: another_study_group) @@ -48,7 +48,7 @@ describe RequestForCommentsController do describe 'GET #rfcs_for_exercise' do before do - exercise = FactoryBot.create(:even_odd) + exercise = create(:even_odd) get :rfcs_for_exercise, params: {exercise_id: exercise.id} end diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb index 7388f7ef..4b7b54c0 100644 --- a/spec/controllers/sessions_controller_spec.rb +++ b/spec/controllers/sessions_controller_spec.rb @@ -3,12 +3,12 @@ require 'rails_helper' describe SessionsController do - let(:consumer) { FactoryBot.create(:consumer) } + let(:consumer) { create(:consumer) } describe 'POST #create' do - let(:password) { FactoryBot.attributes_for(:teacher)[:password] } + let(:password) { attributes_for(:teacher)[:password] } let(:user) { InternalUser.create(user_attributes.merge(password: password)) } - let(:user_attributes) { FactoryBot.build(:teacher).attributes } + let(:user_attributes) { build(:teacher).attributes } context 'with valid credentials' do before do @@ -29,8 +29,8 @@ describe SessionsController do end describe 'POST #create_through_lti' do - let(:exercise) { FactoryBot.create(:dummy) } - let(:exercise2) { FactoryBot.create(:dummy) } + let(:exercise) { create(:dummy) } + let(:exercise2) { create(:dummy) } let(:nonce) { SecureRandom.hex } context 'without OAuth parameters' do @@ -74,7 +74,7 @@ describe SessionsController do context 'with valid launch parameters' do let(:locale) { :de } let(:perform_request) { post :create_through_lti, params: {custom_locale: locale, custom_token: exercise.token, oauth_consumer_key: consumer.oauth_key, oauth_nonce: nonce, oauth_signature: SecureRandom.hex, user_id: user.external_id} } - let(:user) { FactoryBot.create(:external_user, consumer_id: consumer.id) } + let(:user) { create(:external_user, consumer_id: consumer.id) } before { allow_any_instance_of(IMS::LTI::ToolProvider).to receive(:valid_request?).and_return(true) } @@ -139,14 +139,14 @@ describe SessionsController do end it 'redirects to recommended exercise if requested token of proxy exercise' do - FactoryBot.create(:proxy_exercise, exercises: [exercise]) + create(:proxy_exercise, exercises: [exercise]) post :create_through_lti, params: {custom_locale: locale, custom_token: ProxyExercise.first.token, oauth_consumer_key: consumer.oauth_key, oauth_nonce: nonce, oauth_signature: SecureRandom.hex, user_id: user.external_id} expect(controller).to redirect_to(implement_exercise_path(exercise.id)) end it 'recommends only exercises who are 1 degree more complicated than what user has seen' do # dummy user has no exercises finished, therefore his highest difficulty is 0 - FactoryBot.create(:proxy_exercise, exercises: [exercise, exercise2]) + create(:proxy_exercise, exercises: [exercise, exercise2]) exercise.expected_difficulty = 3 exercise.save exercise2.expected_difficulty = 1 @@ -202,7 +202,7 @@ describe SessionsController do describe 'GET #destroy_through_lti' do let(:perform_request) { proc { get :destroy_through_lti, params: {consumer_id: consumer.id, submission_id: submission.id} } } - let(:submission) { FactoryBot.create(:submission, exercise: FactoryBot.create(:dummy)) } + let(:submission) { create(:submission, exercise: create(:dummy)) } before do # Todo replace session with lti_parameter @@ -238,7 +238,7 @@ describe SessionsController do before do allow(controller).to receive(:set_sentry_context).and_return(nil) - allow(controller).to receive(:current_user).and_return(FactoryBot.build(:teacher)) + allow(controller).to receive(:current_user).and_return(build(:teacher)) get :new end diff --git a/spec/controllers/statistics_controller_spec.rb b/spec/controllers/statistics_controller_spec.rb index 8ddd30c2..9a0cbcb6 100644 --- a/spec/controllers/statistics_controller_spec.rb +++ b/spec/controllers/statistics_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe StatisticsController do - let(:user) { FactoryBot.create(:admin) } + let(:user) { create(:admin) } before { allow(controller).to receive(:current_user).and_return(user) } diff --git a/spec/controllers/submissions_controller_spec.rb b/spec/controllers/submissions_controller_spec.rb index b92f92d8..cb764d86 100644 --- a/spec/controllers/submissions_controller_spec.rb +++ b/spec/controllers/submissions_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe SubmissionsController do - let(:submission) { FactoryBot.create(:submission) } - let(:user) { FactoryBot.create(:admin) } + let(:submission) { create(:submission) } + let(:user) { create(:admin) } before { allow(controller).to receive(:current_user).and_return(user) } @@ -14,8 +14,8 @@ describe SubmissionsController do end context 'with a valid submission' do - let(:exercise) { FactoryBot.create(:hello_world) } - let(:perform_request) { proc { post :create, format: :json, params: {submission: FactoryBot.attributes_for(:submission, exercise_id: exercise.id)} } } + let(:exercise) { create(:hello_world) } + let(:perform_request) { proc { post :create, format: :json, params: {submission: attributes_for(:submission, exercise_id: exercise.id)} } } before { perform_request.call } @@ -46,7 +46,7 @@ describe SubmissionsController do end context 'with a valid binary filename' do - let(:submission) { FactoryBot.create(:submission, exercise: FactoryBot.create(:sql_select)) } + let(:submission) { create(:submission, exercise: create(:sql_select)) } before { get :download_file, params: {filename: file.name_with_extension, id: submission.id} } @@ -65,7 +65,7 @@ describe SubmissionsController do end context 'with a valid filename' do - let(:submission) { FactoryBot.create(:submission, exercise: FactoryBot.create(:audio_video)) } + let(:submission) { create(:submission, exercise: create(:audio_video)) } before { get :download_file, params: {filename: file.name_with_extension, id: submission.id} } @@ -99,7 +99,7 @@ describe SubmissionsController do describe 'GET #index' do before do - FactoryBot.create_pair(:submission) + create_pair(:submission) get :index end @@ -118,7 +118,7 @@ describe SubmissionsController do end context 'with a valid filename' do - let(:submission) { FactoryBot.create(:submission, exercise: FactoryBot.create(:audio_video)) } + let(:submission) { create(:submission, exercise: create(:audio_video)) } before { get :render_file, params: {filename: file.name_with_extension, id: submission.id} } diff --git a/spec/features/authentication_spec.rb b/spec/features/authentication_spec.rb index 39704038..a5cf7a59 100644 --- a/spec/features/authentication_spec.rb +++ b/spec/features/authentication_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe 'Authentication' do - let(:user) { FactoryBot.create(:admin) } - let(:password) { FactoryBot.attributes_for(:admin)[:password] } + let(:user) { create(:admin) } + let(:password) { attributes_for(:admin)[:password] } context 'when signed out' do before { visit(root_path) } diff --git a/spec/features/authorization_spec.rb b/spec/features/authorization_spec.rb index cc8fcb9d..2e91f203 100644 --- a/spec/features/authorization_spec.rb +++ b/spec/features/authorization_spec.rb @@ -6,7 +6,7 @@ describe 'Authorization' do before { allow(Runner.strategy_class).to receive(:available_images).and_return([]) } context 'when being an admin' do - let(:user) { FactoryBot.create(:admin) } + let(:user) { create(:admin) } before { allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(user) } @@ -16,7 +16,7 @@ describe 'Authorization' do end context 'with being an external user' do - let(:user) { FactoryBot.create(:external_user) } + let(:user) { create(:external_user) } before { allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(user) } @@ -26,7 +26,7 @@ describe 'Authorization' do end context 'with being a teacher' do - let(:user) { FactoryBot.create(:teacher) } + let(:user) { create(:teacher) } before { allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(user) } diff --git a/spec/features/editor_spec.rb b/spec/features/editor_spec.rb index 06919ea7..5892354b 100644 --- a/spec/features/editor_spec.rb +++ b/spec/features/editor_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe 'Editor', js: true do - let(:exercise) { FactoryBot.create(:audio_video, description: Forgery(:lorem_ipsum).sentence) } + let(:exercise) { create(:audio_video, description: Forgery(:lorem_ipsum).sentence) } let(:scoring_response) do [{ status: :ok, @@ -22,12 +22,12 @@ describe 'Editor', js: true do weight: 2.0, }] end - let(:user) { FactoryBot.create(:teacher) } + let(:user) { create(:teacher) } before do visit(sign_in_path) fill_in('email', with: user.email) - fill_in('password', with: FactoryBot.attributes_for(:teacher)[:password]) + fill_in('password', with: attributes_for(:teacher)[:password]) click_button(I18n.t('sessions.new.link')) allow_any_instance_of(LtiHelper).to receive(:lti_outcome_service?).and_return(true) visit(implement_exercise_path(exercise)) @@ -94,7 +94,7 @@ describe 'Editor', js: true do end it 'contains a button for submitting the exercise' do - submission = FactoryBot.build(:submission, user: user, exercise: exercise) + submission = build(:submission, user: user, exercise: exercise) allow(submission).to receive(:calculate_score).and_return(scoring_response) allow(Submission).to receive(:find).and_return(submission) click_button(I18n.t('exercises.editor.score')) diff --git a/spec/features/prometheus/controller_spec.rb b/spec/features/prometheus/controller_spec.rb index 156e227c..96966ab1 100644 --- a/spec/features/prometheus/controller_spec.rb +++ b/spec/features/prometheus/controller_spec.rb @@ -26,7 +26,7 @@ describe Prometheus::Controller do describe 'instance count' do it 'initializes the metrics with the current database entries' do - FactoryBot.create_list(:proxy_exercise, 3) + create_list(:proxy_exercise, 3) described_class.register_metrics stub_metrics described_class.initialize_instance_count @@ -35,25 +35,25 @@ describe Prometheus::Controller do it 'gets notified when an object is created' do allow(described_class).to receive(:create_notification) - proxy_exercise = FactoryBot.create(:proxy_exercise) + proxy_exercise = create(:proxy_exercise) expect(described_class).to have_received(:create_notification).with(proxy_exercise).once end it 'gets notified when an object is destroyed' do allow(described_class).to receive(:destroy_notification) - proxy_exercise = FactoryBot.create(:proxy_exercise).destroy + proxy_exercise = create(:proxy_exercise).destroy expect(described_class).to have_received(:destroy_notification).with(proxy_exercise).once end it 'increments gauge when creating a new instance' do - FactoryBot.create(:proxy_exercise) + create(:proxy_exercise) expect(described_class.instance_variable_get(:@instance_count)).to( have_received(:increment).with(class: ProxyExercise.name).once ) end it 'decrements gauge when deleting an object' do - FactoryBot.create(:proxy_exercise).destroy + create(:proxy_exercise).destroy expect(described_class.instance_variable_get(:@instance_count)).to( have_received(:decrement).with(class: ProxyExercise.name).once ) @@ -63,7 +63,7 @@ describe Prometheus::Controller do describe 'rfc count' do context 'when initializing an rfc' do it 'updates rfc count when creating an ongoing rfc' do - FactoryBot.create(:rfc) + create(:rfc) expect(described_class.instance_variable_get(:@rfc_count)).to( have_received(:increment).with(state: RequestForComment::ONGOING).once ) @@ -71,7 +71,7 @@ describe Prometheus::Controller do end context 'when changing the state of an rfc' do - let(:rfc) { FactoryBot.create(:rfc) } + let(:rfc) { create(:rfc) } it 'updates rfc count when soft-solving an rfc' do rfc.full_score_reached = true @@ -90,12 +90,12 @@ describe Prometheus::Controller do context 'when commenting an rfc' do it 'updates comment metric when commenting an rfc' do - FactoryBot.create(:rfc_with_comment) + create(:rfc_with_comment) expect(described_class.instance_variable_get(:@rfc_commented_count)).to have_received(:increment).once end it 'does not update comment metric when commenting an rfc that already has a comment' do - rfc = FactoryBot.create(:rfc_with_comment) + rfc = create(:rfc_with_comment) expect(described_class.instance_variable_get(:@rfc_commented_count)).to have_received(:increment).once Comment.create(file: rfc.file, user: rfc.user, text: "comment a for rfc #{rfc.question}") diff --git a/spec/features/request_for_comments_filter_spec.rb b/spec/features/request_for_comments_filter_spec.rb index 9f264171..17eadacb 100644 --- a/spec/features/request_for_comments_filter_spec.rb +++ b/spec/features/request_for_comments_filter_spec.rb @@ -3,21 +3,21 @@ require 'rails_helper' describe 'Request_for_Comments' do - let(:exercise) { FactoryBot.create(:audio_video, description: Forgery(:lorem_ipsum).sentence) } - let(:user) { FactoryBot.create(:teacher) } + let(:exercise) { create(:audio_video, description: Forgery(:lorem_ipsum).sentence) } + let(:user) { create(:teacher) } before do visit(sign_in_path) fill_in('email', with: user.email) - fill_in('password', with: FactoryBot.attributes_for(:teacher)[:password]) + fill_in('password', with: attributes_for(:teacher)[:password]) click_button(I18n.t('sessions.new.link')) end it 'does not contain rfcs for unpublished exercises' do - unpublished_rfc = FactoryBot.create(:rfc) + unpublished_rfc = create(:rfc) unpublished_rfc.exercise.update(title: 'Unpublished Exercise') unpublished_rfc.exercise.update(unpublished: true) - rfc = FactoryBot.create(:rfc) + rfc = create(:rfc) rfc.exercise.update(title: 'Normal Exercise') rfc.exercise.update(unpublished: false) diff --git a/spec/helpers/admin/dashboard_helper_spec.rb b/spec/helpers/admin/dashboard_helper_spec.rb index 643bd08f..64307b83 100644 --- a/spec/helpers/admin/dashboard_helper_spec.rb +++ b/spec/helpers/admin/dashboard_helper_spec.rb @@ -11,7 +11,7 @@ describe Admin::DashboardHelper do describe '#docker_data' do before do - FactoryBot.create(:ruby) + create(:ruby) dcp = instance_double 'docker_container_pool' allow(Runner).to receive(:strategy_class).and_return dcp allow(dcp).to receive(:pool_size).and_return({}) diff --git a/spec/helpers/exercise_helper_spec.rb b/spec/helpers/exercise_helper_spec.rb index 9fd8feea..b1710866 100644 --- a/spec/helpers/exercise_helper_spec.rb +++ b/spec/helpers/exercise_helper_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe ExerciseHelper do describe '#embedding_parameters' do - let(:exercise) { FactoryBot.build(:dummy) } + let(:exercise) { build(:dummy) } it 'contains the locale' do expect(embedding_parameters(exercise)).to start_with("locale=#{I18n.locale}") diff --git a/spec/lib/assessor_spec.rb b/spec/lib/assessor_spec.rb index 457a6cba..1b83245e 100644 --- a/spec/lib/assessor_spec.rb +++ b/spec/lib/assessor_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Assessor do - let(:assessor) { described_class.new(execution_environment: FactoryBot.build(:ruby)) } + let(:assessor) { described_class.new(execution_environment: build(:ruby)) } describe '#assess' do let(:assess) { assessor.assess(stdout: stdout) } @@ -55,7 +55,7 @@ describe Assessor do context 'with an execution environment without a testing framework adapter' do it 'raises an error' do - expect { described_class.new(execution_environment: FactoryBot.build(:ruby, testing_framework: nil)) }.to raise_error(Assessor::Error) + expect { described_class.new(execution_environment: build(:ruby, testing_framework: nil)) }.to raise_error(Assessor::Error) end end end diff --git a/spec/lib/docker_client_spec.rb b/spec/lib/docker_client_spec.rb index 54746d51..9d502d17 100644 --- a/spec/lib/docker_client_spec.rb +++ b/spec/lib/docker_client_spec.rb @@ -7,14 +7,14 @@ WORKSPACE_PATH = Rails.root.join('tmp', 'files', Rails.env, 'code_ocean_test') describe DockerClient do let(:command) { 'whoami' } - let(:docker_client) { described_class.new(execution_environment: FactoryBot.build(:java), user: FactoryBot.build(:admin)) } - let(:execution_environment) { FactoryBot.build(:java) } + let(:docker_client) { described_class.new(execution_environment: build(:java), user: build(:admin)) } + let(:execution_environment) { build(:java) } let(:image) { double } - let(:submission) { FactoryBot.create(:submission) } + let(:submission) { create(:submission) } let(:workspace_path) { WORKSPACE_PATH } before do - docker_image = Docker::Image.new(Docker::Connection.new('http://example.org', {}), 'id' => SecureRandom.hex, 'RepoTags' => [FactoryBot.attributes_for(:java)[:docker_image]]) + docker_image = Docker::Image.new(Docker::Connection.new('http://example.org', {}), 'id' => SecureRandom.hex, 'RepoTags' => [attributes_for(:java)[:docker_image]]) allow(described_class).to receive(:find_image_by_tag).and_return(docker_image) described_class.initialize_environment allow(described_class).to receive(:container_creation_options).and_wrap_original do |original_method, *args, &block| @@ -177,7 +177,7 @@ describe DockerClient do describe '#create_workspace_file' do let(:container) { Docker::Container.send(:new, Docker::Connection.new('http://example.org', {}), 'id' => SecureRandom.hex) } - let(:file) { FactoryBot.build(:file, content: 'puts 42') } + let(:file) { build(:file, content: 'puts 42') } let(:file_path) { File.join(workspace_path, file.name_with_extension) } after { File.delete(file_path) } diff --git a/spec/lib/file_tree_spec.rb b/spec/lib/file_tree_spec.rb index fe14d4fa..8b053e74 100644 --- a/spec/lib/file_tree_spec.rb +++ b/spec/lib/file_tree_spec.rb @@ -10,7 +10,7 @@ describe FileTree do context 'with a media file' do context 'with an audio file' do - let(:file) { FactoryBot.build(:file, file_type: FactoryBot.build(:dot_mp3)) } + let(:file) { build(:file, file_type: build(:dot_mp3)) } it 'is an audio file icon' do expect(file_icon).to include('fa-file-audio-o') @@ -18,7 +18,7 @@ describe FileTree do end context 'with an image file' do - let(:file) { FactoryBot.build(:file, file_type: FactoryBot.build(:dot_jpg)) } + let(:file) { build(:file, file_type: build(:dot_jpg)) } it 'is an image file icon' do expect(file_icon).to include('fa-file-image-o') @@ -26,7 +26,7 @@ describe FileTree do end context 'with a video file' do - let(:file) { FactoryBot.build(:file, file_type: FactoryBot.build(:dot_mp4)) } + let(:file) { build(:file, file_type: build(:dot_mp4)) } it 'is a video file icon' do expect(file_icon).to include('fa-file-video-o') @@ -36,7 +36,7 @@ describe FileTree do context 'with other files' do context 'with a read-only file' do - let(:file) { FactoryBot.build(:file, read_only: true) } + let(:file) { build(:file, read_only: true) } it 'is a lock icon' do expect(file_icon).to include('fa-lock') @@ -44,7 +44,7 @@ describe FileTree do end context 'with an executable file' do - let(:file) { FactoryBot.build(:file, file_type: FactoryBot.build(:dot_py)) } + let(:file) { build(:file, file_type: build(:dot_py)) } it 'is a code file icon' do expect(file_icon).to include('fa-file-code-o') @@ -52,7 +52,7 @@ describe FileTree do end context 'with a renderable file' do - let(:file) { FactoryBot.build(:file, file_type: FactoryBot.build(:dot_svg)) } + let(:file) { build(:file, file_type: build(:dot_svg)) } it 'is a text file icon' do expect(file_icon).to include('fa-file-text-o') @@ -60,7 +60,7 @@ describe FileTree do end context 'with all other files' do - let(:file) { FactoryBot.build(:file, file_type: FactoryBot.build(:dot_md)) } + let(:file) { build(:file, file_type: build(:dot_md)) } it 'is a generic file icon' do expect(file_icon).to include('fa-file-o') @@ -77,7 +77,7 @@ describe FileTree do describe '#initialize' do let(:file_tree) { described_class.new(files) } - let(:files) { FactoryBot.build_list(:file, 10, context: nil, path: 'foo/bar/baz') } + let(:files) { build_list(:file, 10, context: nil, path: 'foo/bar/baz') } it 'creates a root node' do # Instead of checking #initialize on the parent, we validate #set_as_root! @@ -95,7 +95,7 @@ describe FileTree do end describe '#map_to_js_tree' do - let(:file) { FactoryBot.build(:file) } + let(:file) { build(:file) } let(:js_tree) { file_tree.send(:map_to_js_tree, node) } let!(:leaf) { root.add(Tree::TreeNode.new('', file)) } let(:root) { Tree::TreeNode.new('', file) } @@ -186,7 +186,7 @@ describe FileTree do end context 'with files' do - let(:files) { FactoryBot.build_list(:file, 10, context: nil, path: 'foo/bar/baz') } + let(:files) { build_list(:file, 10, context: nil, path: 'foo/bar/baz') } let(:file_tree) { described_class.new(files) } let(:js_tree) { file_tree.to_js_tree } diff --git a/spec/lib/runner/strategy/docker_container_pool_spec.rb b/spec/lib/runner/strategy/docker_container_pool_spec.rb index 6cec57dd..d785867d 100644 --- a/spec/lib/runner/strategy/docker_container_pool_spec.rb +++ b/spec/lib/runner/strategy/docker_container_pool_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' require 'pathname' describe Runner::Strategy::DockerContainerPool do - let(:runner_id) { FactoryBot.attributes_for(:runner)[:runner_id] } - let(:execution_environment) { FactoryBot.create :ruby } + let(:runner_id) { attributes_for(:runner)[:runner_id] } + let(:execution_environment) { create :ruby } let(:container_pool) { described_class.new(runner_id, execution_environment) } let(:docker_container_pool_url) { 'http://localhost:1234' } let(:config) { {url: docker_container_pool_url, unused_runner_expiration_time: 180} } @@ -112,22 +112,20 @@ describe Runner::Strategy::DockerContainerPool do context 'when receiving a normal file' do let(:file_content) { 'print("Hello World!")' } - let(:files) { [FactoryBot.build(:file, content: file_content)] } + let(:files) { [build(:file, content: file_content)] } it 'writes the file to disk' do - file = instance_double(File) - allow(File).to receive(:open).and_yield(file) - expect(file).to receive(:write).with(file_content) + expect(File).to receive(:write).with(local_path.join(files.first.filepath), file_content) container_pool.copy_files(files) end it 'creates the file inside the workspace' do - expect(File).to receive(:open).with(local_path.join(files.first.filepath), 'w') + expect(File).to receive(:write).with(local_path.join(files.first.filepath), files.first.content) container_pool.copy_files(files) end it 'raises an error in case of an IOError' do - allow(File).to receive(:open).and_raise(IOError) + allow(File).to receive(:write).and_raise(IOError) expect { container_pool.copy_files(files) }.to raise_error(Runner::Error::WorkspaceError, /#{files.first.filepath}/) end @@ -137,10 +135,10 @@ describe Runner::Strategy::DockerContainerPool do context 'when the file is inside a directory' do let(:directory) { 'temp/dir' } - let(:files) { [FactoryBot.build(:file, path: directory)] } + let(:files) { [build(:file, path: directory)] } before do - allow(File).to receive(:open) + allow(File).to receive(:write) allow(FileUtils).to receive(:mkdir_p).with(local_path) allow(FileUtils).to receive(:mkdir_p).with(local_path.join(directory)) end @@ -159,7 +157,7 @@ describe Runner::Strategy::DockerContainerPool do end context 'when receiving a binary file' do - let(:files) { [FactoryBot.build(:file, :image)] } + let(:files) { [build(:file, :image)] } it 'copies the file inside the workspace' do expect(FileUtils).to receive(:cp).with(files.first.native_file.path, local_path.join(files.first.filepath)) @@ -168,11 +166,11 @@ describe Runner::Strategy::DockerContainerPool do end context 'when receiving multiple files' do - let(:files) { FactoryBot.build_list(:file, 3) } + let(:files) { build_list(:file, 3) } it 'creates all files' do files.each do |file| - expect(File).to receive(:open).with(local_path.join(file.filepath), 'w') + expect(File).to receive(:write).with(local_path.join(file.filepath), file.content) end container_pool.copy_files(files) end diff --git a/spec/lib/runner/strategy/poseidon_spec.rb b/spec/lib/runner/strategy/poseidon_spec.rb index f514e0ff..92c1da28 100644 --- a/spec/lib/runner/strategy/poseidon_spec.rb +++ b/spec/lib/runner/strategy/poseidon_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe Runner::Strategy::Poseidon do - let(:runner_id) { FactoryBot.attributes_for(:runner)[:runner_id] } - let(:execution_environment) { FactoryBot.create :ruby } + let(:runner_id) { attributes_for(:runner)[:runner_id] } + let(:execution_environment) { create :ruby } let(:poseidon) { described_class.new(runner_id, execution_environment) } let(:error_message) { 'test error message' } let(:response_body) { nil } @@ -128,7 +128,7 @@ describe Runner::Strategy::Poseidon do describe '::sync_environment' do let(:action) { -> { described_class.sync_environment(execution_environment) } } - let(:execution_environment) { FactoryBot.create(:ruby) } + let(:execution_environment) { create(:ruby) } it 'makes the correct request to Poseidon' do faraday_connection = instance_double 'Faraday::Connection' @@ -321,7 +321,7 @@ describe Runner::Strategy::Poseidon do describe '#copy_files' do let(:file_content) { 'print("Hello World!")' } - let(:file) { FactoryBot.build(:file, content: file_content) } + let(:file) { build(:file, content: file_content) } let(:action) { -> { poseidon.copy_files([file]) } } let(:encoded_file_content) { Base64.strict_encode64(file.content) } let!(:copy_files_stub) do diff --git a/spec/mailers/user_mailer_spec.rb b/spec/mailers/user_mailer_spec.rb index 5054abd8..b9b14bab 100644 --- a/spec/mailers/user_mailer_spec.rb +++ b/spec/mailers/user_mailer_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe UserMailer do - let(:user) { InternalUser.create(FactoryBot.attributes_for(:teacher)) } + let(:user) { InternalUser.create(attributes_for(:teacher)) } describe '#activation_needed_email' do let(:mail) { described_class.activation_needed_email(user) } diff --git a/spec/models/code_ocean/file_spec.rb b/spec/models/code_ocean/file_spec.rb index baef520d..a123a31d 100644 --- a/spec/models/code_ocean/file_spec.rb +++ b/spec/models/code_ocean/file_spec.rb @@ -6,7 +6,7 @@ describe CodeOcean::File do let(:file) { described_class.create.tap {|file| file.update(content: nil, hidden: nil, read_only: nil) } } it 'validates the presence of a file type' do - expect(file.errors[:file_type_id]).to be_present + expect(file.errors[:file_type]).to be_present end it 'validates the presence of the hidden flag' do diff --git a/spec/models/codeharbor_link_spec.rb b/spec/models/codeharbor_link_spec.rb index f999164e..1e9bcb95 100644 --- a/spec/models/codeharbor_link_spec.rb +++ b/spec/models/codeharbor_link_spec.rb @@ -11,7 +11,7 @@ describe CodeharborLink do describe '#to_s' do subject { codeharbor_link.to_s } - let(:codeharbor_link) { FactoryBot.create(:codeharbor_link) } + let(:codeharbor_link) { create(:codeharbor_link) } it { is_expected.to eql codeharbor_link.id.to_s } end diff --git a/spec/models/consumer_spec.rb b/spec/models/consumer_spec.rb index 8ffb7b2d..bdda9fb1 100644 --- a/spec/models/consumer_spec.rb +++ b/spec/models/consumer_spec.rb @@ -14,7 +14,7 @@ describe Consumer do end it 'validates the uniqueness of the OAuth key' do - consumer.update(oauth_key: FactoryBot.create(:consumer).oauth_key) + consumer.update(oauth_key: create(:consumer).oauth_key) expect(consumer.errors[:oauth_key]).to be_present end diff --git a/spec/models/execution_environment_spec.rb b/spec/models/execution_environment_spec.rb index 4a6e2ff3..05ef6666 100644 --- a/spec/models/execution_environment_spec.rb +++ b/spec/models/execution_environment_spec.rb @@ -8,7 +8,7 @@ describe ExecutionEnvironment do it 'validates that the Docker image works' do allow(execution_environment).to receive(:validate_docker_image?).and_return(true) allow(execution_environment).to receive(:working_docker_image?).and_return(true) - execution_environment.update(FactoryBot.build(:ruby).attributes) + execution_environment.update(build(:ruby).attributes) expect(execution_environment).to have_received(:working_docker_image?) end @@ -81,8 +81,7 @@ describe ExecutionEnvironment do end it 'validates the presence of a user' do - expect(execution_environment.errors[:user_id]).to be_present - expect(execution_environment.errors[:user_type]).to be_present + expect(execution_environment.errors[:user]).to be_present end it 'validates the format of the exposed ports' do @@ -95,7 +94,7 @@ describe ExecutionEnvironment do describe '#valid_test_setup?' do context 'with a test command and a testing framework' do - before { execution_environment.update(test_command: FactoryBot.attributes_for(:ruby)[:test_command], testing_framework: FactoryBot.attributes_for(:ruby)[:testing_framework]) } + before { execution_environment.update(test_command: attributes_for(:ruby)[:test_command], testing_framework: attributes_for(:ruby)[:testing_framework]) } it 'is valid' do expect(execution_environment.errors[:test_command]).to be_blank @@ -103,7 +102,7 @@ describe ExecutionEnvironment do end context 'with a test command but no testing framework' do - before { execution_environment.update(test_command: FactoryBot.attributes_for(:ruby)[:test_command], testing_framework: nil) } + before { execution_environment.update(test_command: attributes_for(:ruby)[:test_command], testing_framework: nil) } it 'is invalid' do expect(execution_environment.errors[:test_command]).to be_present @@ -111,7 +110,7 @@ describe ExecutionEnvironment do end context 'with no test command but a testing framework' do - before { execution_environment.update(test_command: nil, testing_framework: FactoryBot.attributes_for(:ruby)[:testing_framework]) } + before { execution_environment.update(test_command: nil, testing_framework: attributes_for(:ruby)[:testing_framework]) } it 'is invalid' do expect(execution_environment.errors[:test_command]).to be_present @@ -144,7 +143,7 @@ describe ExecutionEnvironment do end it 'is true otherwise' do - execution_environment.docker_image = FactoryBot.attributes_for(:ruby)[:docker_image] + execution_environment.docker_image = attributes_for(:ruby)[:docker_image] execution_environment.pool_size = 1 allow(Rails.env).to receive(:test?).and_return(false) expect(execution_environment.send(:validate_docker_image?)).to be true @@ -152,7 +151,7 @@ describe ExecutionEnvironment do end describe '#working_docker_image?' do - let(:execution_environment) { FactoryBot.create(:ruby) } + let(:execution_environment) { create(:ruby) } let(:working_docker_image?) { execution_environment.send(:working_docker_image?) } let(:runner) { instance_double 'runner' } diff --git a/spec/models/exercise_spec.rb b/spec/models/exercise_spec.rb index 86596907..57bd66c9 100644 --- a/spec/models/exercise_spec.rb +++ b/spec/models/exercise_spec.rb @@ -4,15 +4,15 @@ require 'rails_helper' describe Exercise do let(:exercise) { described_class.create.tap {|exercise| exercise.update(public: nil, token: nil) } } - let(:users) { FactoryBot.create_list(:external_user, 10) } + let(:users) { create_list(:external_user, 10) } def create_submissions - FactoryBot.create_list(:submission, 10, cause: 'submit', exercise: exercise, score: Forgery(:basic).number, user: users.sample) + create_list(:submission, 10, cause: 'submit', exercise: exercise, score: Forgery(:basic).number, user: users.sample) end it 'validates the number of main files' do - exercise = FactoryBot.create(:dummy) - exercise.files += FactoryBot.create_pair(:file) + exercise = create(:dummy) + exercise.files += create_pair(:file) expect(exercise).to receive(:valid_main_file?).and_call_original exercise.save expect(exercise.errors[:files]).to be_present @@ -37,36 +37,35 @@ describe Exercise do end it 'validates the presence of a user' do - expect(exercise.errors[:user_id]).to be_present - expect(exercise.errors[:user_type]).to be_present + expect(exercise.errors[:user]).to be_present end context 'when exercise is unpublished' do - subject { FactoryBot.build(:dummy, unpublished: true) } + subject { build(:dummy, unpublished: true) } it { is_expected.not_to validate_presence_of(:execution_environment) } end context 'when exercise is not unpublished' do - subject { FactoryBot.build(:dummy, unpublished: false) } + subject { build(:dummy, unpublished: false) } it { is_expected.to validate_presence_of(:execution_environment) } end context 'with uuid' do - subject { FactoryBot.build(:dummy, uuid: SecureRandom.uuid) } + subject { build(:dummy, uuid: SecureRandom.uuid) } it { is_expected.to validate_uniqueness_of(:uuid).case_insensitive } end context 'without uuid' do - subject { FactoryBot.build(:dummy, uuid: nil) } + subject { build(:dummy, uuid: nil) } it { is_expected.not_to validate_uniqueness_of(:uuid) } end describe '#average_percentage' do - let(:exercise) { FactoryBot.create(:fibonacci) } + let(:exercise) { create(:fibonacci) } context 'without submissions' do it 'returns nil' do @@ -85,7 +84,7 @@ describe Exercise do end describe '#average_score' do - let(:exercise) { FactoryBot.create(:fibonacci) } + let(:exercise) { create(:fibonacci) } context 'without submissions' do it 'returns nil' do @@ -104,7 +103,7 @@ describe Exercise do end describe '#duplicate' do - let(:exercise) { FactoryBot.create(:fibonacci) } + let(:exercise) { create(:fibonacci) } after { exercise.duplicate } diff --git a/spec/models/external_user_spec.rb b/spec/models/external_user_spec.rb index ee7ca64b..a99f00a7 100644 --- a/spec/models/external_user_spec.rb +++ b/spec/models/external_user_spec.rb @@ -6,7 +6,7 @@ describe ExternalUser do let(:user) { described_class.create } it 'validates the presence of a consumer' do - expect(user.errors[:consumer_id]).to be_present + expect(user.errors[:consumer]).to be_present end it 'validates the presence of an external ID' do @@ -15,7 +15,7 @@ describe ExternalUser do describe '#admin?' do it 'is false' do - expect(FactoryBot.build(:external_user).admin?).to be false + expect(build(:external_user).admin?).to be false end end @@ -33,7 +33,7 @@ describe ExternalUser do describe '#teacher?' do it 'is false' do - expect(FactoryBot.build(:external_user).teacher?).to be false + expect(build(:external_user).teacher?).to be false end end end diff --git a/spec/models/file_type_spec.rb b/spec/models/file_type_spec.rb index 4fb00c1f..0fc9c043 100644 --- a/spec/models/file_type_spec.rb +++ b/spec/models/file_type_spec.rb @@ -52,7 +52,6 @@ describe FileType do end it 'validates the presence of a user' do - expect(file_type.errors[:user_id]).to be_present - expect(file_type.errors[:user_type]).to be_present + expect(file_type.errors[:user]).to be_present end end diff --git a/spec/models/internal_user_spec.rb b/spec/models/internal_user_spec.rb index a9c131be..82c525a2 100644 --- a/spec/models/internal_user_spec.rb +++ b/spec/models/internal_user_spec.rb @@ -11,12 +11,12 @@ describe InternalUser do end it 'validates the uniqueness of the email address' do - user.update(email: FactoryBot.create(:admin).email) + user.update(email: create(:admin).email) expect(user.errors[:email]).to be_present end context 'when not activated' do - let(:user) { FactoryBot.create(:teacher) } + let(:user) { create(:teacher) } before do user.send(:setup_activation) @@ -35,7 +35,7 @@ describe InternalUser do end context 'with a pending password reset' do - let(:user) { FactoryBot.create(:teacher) } + let(:user) { create(:teacher) } before { user.deliver_reset_password_instructions! } @@ -51,7 +51,7 @@ describe InternalUser do end context 'when complete' do - let(:user) { FactoryBot.create(:teacher, activation_state: 'active') } + let(:user) { create(:teacher, activation_state: 'active') } it 'does not validate the confirmation of the password' do user.update(password: password, password_confirmation: '') @@ -74,8 +74,8 @@ describe InternalUser do describe '#admin?' do it 'is only true for admins' do - expect(FactoryBot.build(:admin).admin?).to be true - expect(FactoryBot.build(:teacher).admin?).to be false + expect(build(:admin).admin?).to be true + expect(build(:teacher).admin?).to be false end end @@ -93,8 +93,8 @@ describe InternalUser do describe '#teacher?' do it 'is only true for teachers' do - expect(FactoryBot.build(:admin).teacher?).to be false - expect(FactoryBot.build(:teacher).teacher?).to be true + expect(build(:admin).teacher?).to be false + expect(build(:teacher).teacher?).to be true end end end diff --git a/spec/models/request_for_comment_spec.rb b/spec/models/request_for_comment_spec.rb index f4038841..8cd7b55a 100644 --- a/spec/models/request_for_comment_spec.rb +++ b/spec/models/request_for_comment_spec.rb @@ -3,10 +3,10 @@ require 'rails_helper' describe RequestForComment do - let!(:rfc) { FactoryBot.create(:rfc) } + let!(:rfc) { create(:rfc) } describe 'scope with_comments' do - let!(:rfc2) { FactoryBot.create(:rfc_with_comment) } + let!(:rfc2) { create(:rfc_with_comment) } it 'includes all RfCs with comments' do expect(described_class.with_comments).to include(rfc2) diff --git a/spec/models/runner_spec.rb b/spec/models/runner_spec.rb index 8c156555..5f23e775 100644 --- a/spec/models/runner_spec.rb +++ b/spec/models/runner_spec.rb @@ -3,12 +3,12 @@ require 'rails_helper' describe Runner do - let(:runner_id) { FactoryBot.attributes_for(:runner)[:runner_id] } + let(:runner_id) { attributes_for(:runner)[:runner_id] } let(:strategy_class) { described_class.strategy_class } let(:strategy) { instance_double(strategy_class) } describe 'attribute validation' do - let(:runner) { FactoryBot.create :runner } + let(:runner) { create :runner } it 'validates the presence of the runner id' do described_class.skip_callback(:validation, :before, :request_id) @@ -162,8 +162,8 @@ describe Runner do end describe 'creation' do - let(:user) { FactoryBot.create :external_user } - let(:execution_environment) { FactoryBot.create :ruby } + let(:user) { create :external_user } + let(:execution_environment) { create :ruby } let(:create_action) { -> { described_class.create(user: user, execution_environment: execution_environment) } } it 'requests a runner id from the runner management' do @@ -187,12 +187,12 @@ describe Runner do it 'does not call the runner management again while a runner id is set' do expect(strategy_class).to receive(:request_from_management).and_return(runner_id).once runner = create_action.call - runner.update(user: FactoryBot.create(:external_user)) + runner.update(user: create(:external_user)) end end describe '#request_new_id' do - let(:runner) { FactoryBot.create :runner } + let(:runner) { create :runner } context 'when the environment is available in the runner management' do it 'requests the runner management' do @@ -240,8 +240,8 @@ describe Runner do end describe '::for' do - let(:user) { FactoryBot.create :external_user } - let(:exercise) { FactoryBot.create :fibonacci } + let(:user) { create :external_user } + let(:exercise) { create :fibonacci } context 'when the runner could not be saved' do before { allow(strategy_class).to receive(:request_from_management).and_return(nil) } @@ -252,7 +252,7 @@ describe Runner do end context 'when a runner already exists' do - let!(:existing_runner) { FactoryBot.create(:runner, user: user, execution_environment: exercise.execution_environment) } + let!(:existing_runner) { create(:runner, user: user, execution_environment: exercise.execution_environment) } it 'returns the existing runner' do new_runner = described_class.for(user, exercise.execution_environment) diff --git a/spec/models/submission_spec.rb b/spec/models/submission_spec.rb index 60a86923..9b6a6ab5 100644 --- a/spec/models/submission_spec.rb +++ b/spec/models/submission_spec.rb @@ -3,23 +3,22 @@ require 'rails_helper' describe Submission do - let(:submission) { FactoryBot.create(:submission, exercise: FactoryBot.create(:dummy)) } + let(:submission) { create(:submission, exercise: create(:dummy)) } it 'validates the presence of a cause' do expect(described_class.create.errors[:cause]).to be_present end it 'validates the presence of an exercise' do - expect(described_class.create.errors[:exercise_id]).to be_present + expect(described_class.create.errors[:exercise]).to be_present end it 'validates the presence of a user' do - expect(described_class.create.errors[:user_id]).to be_present - expect(described_class.create.errors[:user_type]).to be_present + expect(described_class.create.errors[:user]).to be_present end describe '#main_file' do - let(:submission) { FactoryBot.create(:submission) } + let(:submission) { create(:submission) } it "returns the submission's main file" do expect(submission.main_file).to be_a(CodeOcean::File) @@ -29,7 +28,7 @@ describe Submission do describe '#normalized_score' do context 'with a score' do - let(:submission) { FactoryBot.create(:submission) } + let(:submission) { create(:submission) } before { submission.score = submission.exercise.maximum_score / 2 } @@ -49,7 +48,7 @@ describe Submission do describe '#percentage' do context 'with a score' do - let(:submission) { FactoryBot.create(:submission) } + let(:submission) { create(:submission) } before { submission.score = submission.exercise.maximum_score / 2 } @@ -69,11 +68,11 @@ describe Submission do describe '#siblings' do let(:siblings) { described_class.find_by(user: user).siblings } - let(:user) { FactoryBot.create(:external_user) } + let(:user) { create(:external_user) } before do 10.times.each_with_index do |_, index| - FactoryBot.create(:submission, exercise: submission.exercise, user: (index.even? ? user : FactoryBot.create(:external_user))) + create(:submission, exercise: submission.exercise, user: (index.even? ? user : create(:external_user))) end end @@ -92,9 +91,9 @@ describe Submission do describe '#redirect_to_feedback?' do context 'with no exercise feedback' do - let(:exercise) { FactoryBot.create(:dummy) } - let(:user) { FactoryBot.build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) % 10) } - let(:submission) { FactoryBot.build(:submission, exercise: exercise, user: user) } + let(:exercise) { create(:dummy) } + let(:user) { build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) % 10) } + let(:submission) { build(:submission, exercise: exercise, user: user) } it 'sends 10% of users to feedback page' do expect(submission.send(:redirect_to_feedback?)).to be_truthy @@ -102,16 +101,16 @@ describe Submission do it 'does not redirect other users' do 9.times do |i| - submission = FactoryBot.build(:submission, exercise: exercise, user: FactoryBot.build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) - i - 1)) + submission = build(:submission, exercise: exercise, user: build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) - i - 1)) expect(submission.send(:redirect_to_feedback?)).to be_falsey end end end context 'with little exercise feedback' do - let(:exercise) { FactoryBot.create(:dummy_with_user_feedbacks) } - let(:user) { FactoryBot.build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) % 10) } - let(:submission) { FactoryBot.build(:submission, exercise: exercise, user: user) } + let(:exercise) { create(:dummy_with_user_feedbacks) } + let(:user) { build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) % 10) } + let(:submission) { build(:submission, exercise: exercise, user: user) } it 'sends 10% of users to feedback page' do expect(submission.send(:redirect_to_feedback?)).to be_truthy @@ -119,15 +118,15 @@ describe Submission do it 'does not redirect other users' do 9.times do |i| - submission = FactoryBot.build(:submission, exercise: exercise, user: FactoryBot.build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) - i - 1)) + submission = build(:submission, exercise: exercise, user: build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) - i - 1)) expect(submission.send(:redirect_to_feedback?)).to be_falsey end end end context 'with enough exercise feedback' do - let(:exercise) { FactoryBot.create(:dummy_with_user_feedbacks, user_feedbacks_count: 42) } - let(:user) { FactoryBot.create(:external_user) } + let(:exercise) { create(:dummy_with_user_feedbacks, user_feedbacks_count: 42) } + let(:user) { create(:external_user) } before do allow_any_instance_of(described_class).to receive(:redirect_to_feedback?).and_return(false) @@ -135,7 +134,7 @@ describe Submission do it 'sends nobody to feedback page' do 30.times do |_i| - submission = FactoryBot.create(:submission, exercise: exercise, user: FactoryBot.create(:external_user)) + submission = create(:submission, exercise: exercise, user: create(:external_user)) expect(submission.send(:redirect_to_feedback?)).to be_falsey end end @@ -143,7 +142,7 @@ describe Submission do end describe '#calculate_score' do - let(:runner) { FactoryBot.create :runner } + let(:runner) { create :runner } before do allow(Runner).to receive(:for).and_return(runner) diff --git a/spec/policies/admin/dashboard_policy_spec.rb b/spec/policies/admin/dashboard_policy_spec.rb index 4646d90b..b40e2694 100644 --- a/spec/policies/admin/dashboard_policy_spec.rb +++ b/spec/policies/admin/dashboard_policy_spec.rb @@ -7,15 +7,15 @@ describe Admin::DashboardPolicy do permissions :show? do it 'grants access to admins' do - expect(policy).to permit(FactoryBot.build(:admin), :dashboard) + expect(policy).to permit(build(:admin), :dashboard) end it 'does not grant access to teachers' do - expect(policy).not_to permit(FactoryBot.build(:teacher), :dashboard) + expect(policy).not_to permit(build(:teacher), :dashboard) end it 'does not grant access to external users' do - expect(policy).not_to permit(FactoryBot.build(:external_user), :dashboard) + expect(policy).not_to permit(build(:external_user), :dashboard) end end end diff --git a/spec/policies/code_ocean/file_policy_spec.rb b/spec/policies/code_ocean/file_policy_spec.rb index f32b9b89..233089cf 100644 --- a/spec/policies/code_ocean/file_policy_spec.rb +++ b/spec/policies/code_ocean/file_policy_spec.rb @@ -5,15 +5,15 @@ require 'rails_helper' describe CodeOcean::FilePolicy do subject(:policy) { described_class } - let(:exercise) { FactoryBot.create(:fibonacci) } - let(:submission) { FactoryBot.create(:submission) } + let(:exercise) { create(:fibonacci) } + let(:submission) { create(:submission) } permissions :create? do context 'when being part of an exercise' do let(:file) { exercise.files.first } it 'grants access to admins' do - expect(policy).to permit(FactoryBot.build(:admin), file) + expect(policy).to permit(build(:admin), file) end it 'grants access to authors' do @@ -22,7 +22,7 @@ describe CodeOcean::FilePolicy do it 'does not grant access to all other users' do %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), file) + expect(policy).not_to permit(build(factory_name), file) end end end @@ -52,7 +52,7 @@ describe CodeOcean::FilePolicy do it 'does not grant access to all other users' do %i[admin external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), file) + expect(policy).not_to permit(build(factory_name), file) end end end @@ -63,7 +63,7 @@ describe CodeOcean::FilePolicy do let(:file) { exercise.files.first } it 'grants access to admins' do - expect(policy).to permit(FactoryBot.build(:admin), file) + expect(policy).to permit(build(:admin), file) end it 'grants access to authors' do @@ -72,7 +72,7 @@ describe CodeOcean::FilePolicy do it 'does not grant access to all other users' do %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), file) + expect(policy).not_to permit(build(factory_name), file) end end end @@ -82,7 +82,7 @@ describe CodeOcean::FilePolicy do it 'does not grant access to anyone' do %i[admin external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), file) + expect(policy).not_to permit(build(factory_name), file) end end end diff --git a/spec/policies/codeharbor_link_policy_spec.rb b/spec/policies/codeharbor_link_policy_spec.rb index 90646f9c..550700c1 100644 --- a/spec/policies/codeharbor_link_policy_spec.rb +++ b/spec/policies/codeharbor_link_policy_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' describe CodeharborLinkPolicy do subject(:policy) { described_class } - let(:codeharbor_link) { FactoryBot.create(:codeharbor_link) } + let(:codeharbor_link) { create(:codeharbor_link) } context 'when CodeHarbor link is enabled' do let(:codeocean_config) { instance_double(CodeOcean::Config) } @@ -20,7 +20,7 @@ describe CodeharborLinkPolicy do permissions(action) do it 'does not grant access any user' do %i[external_user teacher admin].each do |factory_name| - expect(policy).not_to permit(FactoryBot.create(factory_name), codeharbor_link) + expect(policy).not_to permit(create(factory_name), codeharbor_link) end end end @@ -30,12 +30,12 @@ describe CodeharborLinkPolicy do permissions(action) do it 'grants access to teachers' do %i[teacher admin].each do |factory_name| - expect(policy).to permit(FactoryBot.create(factory_name), codeharbor_link) + expect(policy).to permit(create(factory_name), codeharbor_link) end end it 'does not grant access to all other users' do - expect(policy).not_to permit(FactoryBot.create(:external_user), codeharbor_link) + expect(policy).not_to permit(create(:external_user), codeharbor_link) end end end @@ -48,7 +48,7 @@ describe CodeharborLinkPolicy do it 'does not grant access to arbitrary users' do %i[external_user admin teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.create(factory_name), codeharbor_link) + expect(policy).not_to permit(create(factory_name), codeharbor_link) end end end @@ -57,7 +57,7 @@ describe CodeharborLinkPolicy do permissions(:enabled?) do it 'reflects the config option' do %i[external_user admin teacher].each do |factory_name| - expect(policy).to permit(FactoryBot.create(factory_name), codeharbor_link) + expect(policy).to permit(create(factory_name), codeharbor_link) end end end @@ -75,7 +75,7 @@ describe CodeharborLinkPolicy do permissions(:enabled?) do it 'reflects the config option' do %i[external_user admin teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.create(factory_name), codeharbor_link) + expect(policy).not_to permit(create(factory_name), codeharbor_link) end end end diff --git a/spec/policies/consumer_policy_spec.rb b/spec/policies/consumer_policy_spec.rb index bd9071a6..4f4164fb 100644 --- a/spec/policies/consumer_policy_spec.rb +++ b/spec/policies/consumer_policy_spec.rb @@ -8,9 +8,9 @@ describe ConsumerPolicy do %i[create? destroy? edit? index? new? show? update?].each do |action| permissions(action) do it 'grants access to admins only' do - expect(policy).to permit(FactoryBot.build(:admin), Consumer.new) + expect(policy).to permit(build(:admin), Consumer.new) %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), Consumer.new) + expect(policy).not_to permit(build(factory_name), Consumer.new) end end end diff --git a/spec/policies/execution_environment_policy_spec.rb b/spec/policies/execution_environment_policy_spec.rb index 588f76db..651e9555 100644 --- a/spec/policies/execution_environment_policy_spec.rb +++ b/spec/policies/execution_environment_policy_spec.rb @@ -5,20 +5,20 @@ require 'rails_helper' describe ExecutionEnvironmentPolicy do subject(:policy) { described_class } - let(:execution_environment) { FactoryBot.build(:ruby) } + let(:execution_environment) { build(:ruby) } [:index?].each do |action| permissions(action) do it 'grants access to admins' do - expect(policy).to permit(FactoryBot.build(:admin), execution_environment) + expect(policy).to permit(build(:admin), execution_environment) end it 'grants access to teachers' do - expect(policy).to permit(FactoryBot.build(:teacher), execution_environment) + expect(policy).to permit(build(:teacher), execution_environment) end it 'does not grant access to external users' do - expect(policy).not_to permit(FactoryBot.build(:external_user), execution_environment) + expect(policy).not_to permit(build(:external_user), execution_environment) end end end @@ -26,7 +26,7 @@ describe ExecutionEnvironmentPolicy do %i[execute_command? shell? statistics? show?].each do |action| permissions(action) do it 'grants access to admins' do - expect(policy).to permit(FactoryBot.build(:admin), execution_environment) + expect(policy).to permit(build(:admin), execution_environment) end it 'grants access to authors' do @@ -35,7 +35,7 @@ describe ExecutionEnvironmentPolicy do it 'does not grant access to all other users' do %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), execution_environment) + expect(policy).not_to permit(build(factory_name), execution_environment) end end end @@ -44,7 +44,7 @@ describe ExecutionEnvironmentPolicy do %i[destroy? edit? update? new? create?].each do |action| permissions(action) do it 'grants access to admins' do - expect(policy).to permit(FactoryBot.build(:admin), execution_environment) + expect(policy).to permit(build(:admin), execution_environment) end it 'does not grant access to authors' do @@ -53,7 +53,7 @@ describe ExecutionEnvironmentPolicy do it 'does not grant access to all other users' do %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), execution_environment) + expect(policy).not_to permit(build(factory_name), execution_environment) end end end @@ -61,7 +61,7 @@ describe ExecutionEnvironmentPolicy do permissions(:sync_all_to_runner_management?) do it 'grants access to the admin' do - expect(policy).to permit(FactoryBot.build(:admin)) + expect(policy).to permit(build(:admin)) end shared_examples 'it does not grant access' do |user| @@ -71,7 +71,7 @@ describe ExecutionEnvironmentPolicy do end %i[teacher external_user].each do |user| - include_examples 'it does not grant access', FactoryBot.build(user) + include_examples 'it does not grant access', FactoryBot.build(user) # rubocop:disable RSpec/FactoryBot/SyntaxMethods end end end diff --git a/spec/policies/exercise_policy_spec.rb b/spec/policies/exercise_policy_spec.rb index 3047d573..8fad12a6 100644 --- a/spec/policies/exercise_policy_spec.rb +++ b/spec/policies/exercise_policy_spec.rb @@ -5,13 +5,13 @@ require 'rails_helper' describe ExercisePolicy do subject(:policy) { described_class } - let(:exercise) { FactoryBot.build(:dummy, public: true) } + let(:exercise) { build(:dummy, public: true) } permissions :batch_update? do it 'grants access to admins only' do - expect(policy).to permit(FactoryBot.build(:admin), exercise) + expect(policy).to permit(build(:admin), exercise) %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), exercise) + expect(policy).not_to permit(build(factory_name), exercise) end end end @@ -19,15 +19,15 @@ describe ExercisePolicy do %i[create? index? new? statistics? feedback? rfcs_for_exercise?].each do |action| permissions(action) do it 'grants access to admins' do - expect(policy).to permit(FactoryBot.build(:admin), exercise) + expect(policy).to permit(build(:admin), exercise) end it 'grants access to teachers' do - expect(policy).to permit(FactoryBot.build(:teacher), exercise) + expect(policy).to permit(build(:teacher), exercise) end it 'does not grant access to external users' do - expect(policy).not_to permit(FactoryBot.build(:external_user), exercise) + expect(policy).not_to permit(build(:external_user), exercise) end end end @@ -35,7 +35,7 @@ describe ExercisePolicy do %i[clone? destroy? edit? update?].each do |action| permissions(action) do it 'grants access to admins' do - expect(policy).to permit(FactoryBot.build(:admin), exercise) + expect(policy).to permit(build(:admin), exercise) end it 'grants access to authors' do @@ -44,7 +44,7 @@ describe ExercisePolicy do it 'does not grant access to all other users' do %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), exercise) + expect(policy).not_to permit(build(factory_name), exercise) end end end @@ -60,7 +60,7 @@ describe ExercisePolicy do end context 'when user has codeharbor_link' do - before { user.codeharbor_link = FactoryBot.build(:codeharbor_link) } + before { user.codeharbor_link = build(:codeharbor_link) } it 'grants access' do expect(policy).to permit(user, exercise) @@ -69,14 +69,14 @@ describe ExercisePolicy do end context 'when user is admin' do - let(:user) { FactoryBot.build(:admin) } + let(:user) { build(:admin) } it 'does not grant access' do expect(policy).not_to permit(user, exercise) end context 'when user has codeharbor_link' do - before { user.codeharbor_link = FactoryBot.build(:codeharbor_link) } + before { user.codeharbor_link = build(:codeharbor_link) } it 'grants access' do expect(policy).to permit(user, exercise) @@ -86,14 +86,14 @@ describe ExercisePolicy do %i[external_user teacher].each do |factory_name| context "when user is #{factory_name}" do - let(:user) { FactoryBot.build(factory_name) } + let(:user) { build(factory_name) } it 'does not grant access' do expect(policy).not_to permit(user, exercise) end context 'when user has codeharbor_link' do - before { user.codeharbor_link = FactoryBot.build(:codeharbor_link) } + before { user.codeharbor_link = build(:codeharbor_link) } it 'does not grant access' do expect(policy).not_to permit(user, exercise) @@ -107,7 +107,7 @@ describe ExercisePolicy do [:show?].each do |action| permissions(action) do it 'not grants access to external users' do - expect(policy).not_to permit(FactoryBot.build(:external_user), exercise) + expect(policy).not_to permit(build(:external_user), exercise) end end end @@ -116,7 +116,7 @@ describe ExercisePolicy do permissions(action) do it 'grants access to anyone' do %i[admin external_user teacher].each do |factory_name| - expect(policy).to permit(FactoryBot.build(factory_name), Exercise.new) + expect(policy).to permit(build(factory_name), Exercise.new) end end end @@ -124,14 +124,14 @@ describe ExercisePolicy do describe ExercisePolicy::Scope do describe '#resolve' do - let(:admin) { FactoryBot.create(:admin) } - let(:external_user) { FactoryBot.create(:external_user) } - let(:teacher) { FactoryBot.create(:teacher) } + let(:admin) { create(:admin) } + let(:external_user) { create(:external_user) } + let(:teacher) { create(:teacher) } before do [admin, teacher].each do |user| [true, false].each do |public| - FactoryBot.create(:dummy, public: public, user_id: user.id, user_type: InternalUser.name) + create(:dummy, public: public, user_id: user.id, user_type: InternalUser.name) end end end diff --git a/spec/policies/external_user_policy_spec.rb b/spec/policies/external_user_policy_spec.rb index 82c1452b..5494b6fc 100644 --- a/spec/policies/external_user_policy_spec.rb +++ b/spec/policies/external_user_policy_spec.rb @@ -8,9 +8,9 @@ describe ExternalUserPolicy do %i[create? destroy? edit? new? show? update?].each do |action| permissions(action) do it 'grants access to admins only' do - expect(policy).to permit(FactoryBot.build(:admin), ExternalUser.new) + expect(policy).to permit(build(:admin), ExternalUser.new) %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), ExternalUser.new) + expect(policy).not_to permit(build(factory_name), ExternalUser.new) end end end @@ -19,10 +19,10 @@ describe ExternalUserPolicy do [:index?].each do |action| permissions(action) do it 'grants access to admins and teachers only' do - expect(policy).to permit(FactoryBot.build(:admin), ExternalUser.new) - expect(policy).to permit(FactoryBot.build(:teacher), ExternalUser.new) + expect(policy).to permit(build(:admin), ExternalUser.new) + expect(policy).to permit(build(:teacher), ExternalUser.new) [:external_user].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), ExternalUser.new) + expect(policy).not_to permit(build(factory_name), ExternalUser.new) end end end diff --git a/spec/policies/file_type_policy_spec.rb b/spec/policies/file_type_policy_spec.rb index 2b75f82b..5c6ce645 100644 --- a/spec/policies/file_type_policy_spec.rb +++ b/spec/policies/file_type_policy_spec.rb @@ -5,12 +5,12 @@ require 'rails_helper' describe FileTypePolicy do subject(:policy) { described_class } - let(:file_type) { FactoryBot.build(:dot_rb) } + let(:file_type) { build(:dot_rb) } %i[destroy? edit? update? new? create? index? show?].each do |action| permissions(action) do it 'grants access to admins' do - expect(policy).to permit(FactoryBot.build(:admin), file_type) + expect(policy).to permit(build(:admin), file_type) end it 'grants access to authors' do @@ -19,7 +19,7 @@ describe FileTypePolicy do it 'does not grant access to all other users' do %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), file_type) + expect(policy).not_to permit(build(factory_name), file_type) end end end diff --git a/spec/policies/internal_user_policy_spec.rb b/spec/policies/internal_user_policy_spec.rb index fbbf3a0b..1e900eb0 100644 --- a/spec/policies/internal_user_policy_spec.rb +++ b/spec/policies/internal_user_policy_spec.rb @@ -8,9 +8,9 @@ describe InternalUserPolicy do %i[create? edit? index? new? show? update?].each do |action| permissions(action) do it 'grants access to admins only' do - expect(policy).to permit(FactoryBot.build(:admin), InternalUser.new) + expect(policy).to permit(build(:admin), InternalUser.new) %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), InternalUser.new) + expect(policy).not_to permit(build(factory_name), InternalUser.new) end end end @@ -20,16 +20,16 @@ describe InternalUserPolicy do context 'with an admin user' do it 'grants access to no one' do %i[admin external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), FactoryBot.build(:admin)) + expect(policy).not_to permit(build(factory_name), build(:admin)) end end end context 'with a non-admin user' do it 'grants access to admins only' do - expect(policy).to permit(FactoryBot.build(:admin), InternalUser.new) + expect(policy).to permit(build(:admin), InternalUser.new) %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), FactoryBot.build(:teacher)) + expect(policy).not_to permit(build(factory_name), build(:teacher)) end end end diff --git a/spec/policies/submission_policy_spec.rb b/spec/policies/submission_policy_spec.rb index 7d2aa4d6..71bdc3e0 100644 --- a/spec/policies/submission_policy_spec.rb +++ b/spec/policies/submission_policy_spec.rb @@ -8,7 +8,7 @@ describe SubmissionPolicy do permissions :create? do it 'grants access to anyone' do %i[admin external_user teacher].each do |factory_name| - expect(policy).to permit(FactoryBot.build(factory_name), Submission.new) + expect(policy).to permit(build(factory_name), Submission.new) end end end @@ -16,21 +16,21 @@ describe SubmissionPolicy do %i[download_file? render_file? run? score? show? statistics? stop? test?].each do |action| permissions(action) do it 'grants access to admins' do - expect(policy).to permit(FactoryBot.build(:admin), Submission.new) + expect(policy).to permit(build(:admin), Submission.new) end it 'grants access to authors' do - user = FactoryBot.create(:external_user) - expect(policy).to permit(user, FactoryBot.build(:submission, exercise: Exercise.new, user_id: user.id, user_type: user.class.name)) + user = create(:external_user) + expect(policy).to permit(user, build(:submission, exercise: Exercise.new, user_id: user.id, user_type: user.class.name)) end end end permissions :index? do it 'grants access to admins only' do - expect(policy).to permit(FactoryBot.build(:admin), Submission.new) + expect(policy).to permit(build(:admin), Submission.new) %i[external_user teacher].each do |factory_name| - expect(policy).not_to permit(FactoryBot.build(factory_name), Submission.new) + expect(policy).not_to permit(build(factory_name), Submission.new) end end end diff --git a/spec/services/exercise_service/check_external_spec.rb b/spec/services/exercise_service/check_external_spec.rb index f5ee4b97..a8c74c4d 100644 --- a/spec/services/exercise_service/check_external_spec.rb +++ b/spec/services/exercise_service/check_external_spec.rb @@ -7,7 +7,7 @@ describe ExerciseService::CheckExternal do subject(:export_service) { described_class.new(uuid: uuid, codeharbor_link: codeharbor_link) } let(:uuid) { SecureRandom.uuid } - let(:codeharbor_link) { FactoryBot.build(:codeharbor_link) } + let(:codeharbor_link) { build(:codeharbor_link) } it 'assigns uuid' do expect(export_service.instance_variable_get(:@uuid)).to be uuid @@ -22,7 +22,7 @@ describe ExerciseService::CheckExternal do subject(:check_external_service) { described_class.call(uuid: uuid, codeharbor_link: codeharbor_link) } let(:uuid) { SecureRandom.uuid } - let(:codeharbor_link) { FactoryBot.build(:codeharbor_link) } + let(:codeharbor_link) { build(:codeharbor_link) } let(:response) { {}.to_json } before { stub_request(:post, codeharbor_link.check_uuid_url).to_return(body: response) } diff --git a/spec/services/exercise_service/push_external_spec.rb b/spec/services/exercise_service/push_external_spec.rb index 20c07a0a..2a52075f 100644 --- a/spec/services/exercise_service/push_external_spec.rb +++ b/spec/services/exercise_service/push_external_spec.rb @@ -6,8 +6,8 @@ RSpec.describe ExerciseService::PushExternal do describe '.new' do subject(:push_external) { described_class.new(zip: zip, codeharbor_link: codeharbor_link) } - let(:zip) { ProformaService::ExportTask.call(exercise: FactoryBot.build(:dummy)) } - let(:codeharbor_link) { FactoryBot.build(:codeharbor_link) } + let(:zip) { ProformaService::ExportTask.call(exercise: build(:dummy)) } + let(:codeharbor_link) { build(:codeharbor_link) } it 'assigns zip' do expect(push_external.instance_variable_get(:@zip)).to be zip @@ -21,8 +21,8 @@ RSpec.describe ExerciseService::PushExternal do describe '#execute' do subject(:push_external) { described_class.call(zip: zip, codeharbor_link: codeharbor_link) } - let(:zip) { ProformaService::ExportTask.call(exercise: FactoryBot.build(:dummy)) } - let(:codeharbor_link) { FactoryBot.build(:codeharbor_link) } + let(:zip) { ProformaService::ExportTask.call(exercise: build(:dummy)) } + let(:codeharbor_link) { build(:codeharbor_link) } let(:status) { 200 } let(:response) { '' } diff --git a/spec/services/proforma_service/convert_exercise_to_task_spec.rb b/spec/services/proforma_service/convert_exercise_to_task_spec.rb index e7cf793a..b367dda9 100644 --- a/spec/services/proforma_service/convert_exercise_to_task_spec.rb +++ b/spec/services/proforma_service/convert_exercise_to_task_spec.rb @@ -6,7 +6,7 @@ RSpec.describe ProformaService::ConvertExerciseToTask do describe '.new' do subject(:convert_to_task) { described_class.new(exercise: exercise) } - let(:exercise) { FactoryBot.build(:dummy) } + let(:exercise) { build(:dummy) } it 'assigns exercise' do expect(convert_to_task.instance_variable_get(:@exercise)).to be exercise @@ -18,7 +18,7 @@ RSpec.describe ProformaService::ConvertExerciseToTask do let(:convert_to_task) { described_class.new(exercise: exercise) } let(:exercise) do - FactoryBot.create(:dummy, + create(:dummy, instructions: 'instruction', uuid: SecureRandom.uuid, files: files + tests) @@ -46,7 +46,7 @@ RSpec.describe ProformaService::ConvertExerciseToTask do context 'when exercise has a mainfile' do let(:files) { [file] } - let(:file) { FactoryBot.build(:file) } + let(:file) { build(:file) } it 'creates a task-file with the correct attributes' do expect(task.files.first).to have_attributes( @@ -64,7 +64,7 @@ RSpec.describe ProformaService::ConvertExerciseToTask do context 'when exercise has a regular file' do let(:files) { [file] } - let(:file) { FactoryBot.build(:file, role: 'regular_file', hidden: hidden, read_only: read_only) } + let(:file) { build(:file, role: 'regular_file', hidden: hidden, read_only: read_only) } let(:hidden) { true } let(:read_only) { true } @@ -98,7 +98,7 @@ RSpec.describe ProformaService::ConvertExerciseToTask do end context 'when file has an attachment' do - let(:file) { FactoryBot.build(:file, :image, role: 'regular_file') } + let(:file) { build(:file, :image, role: 'regular_file') } it 'creates a task-file with the correct attributes' do expect(task.files.first).to have_attributes( @@ -112,7 +112,7 @@ RSpec.describe ProformaService::ConvertExerciseToTask do context 'when exercise has a file with role reference implementation' do let(:files) { [file] } - let(:file) { FactoryBot.build(:file, role: 'reference_implementation') } + let(:file) { build(:file, role: 'reference_implementation') } it 'creates a task with one model-solution' do expect(task.model_solutions).to have(1).item @@ -140,7 +140,7 @@ RSpec.describe ProformaService::ConvertExerciseToTask do end context 'when exercise has multiple files with role reference implementation' do - let(:files) { FactoryBot.build_list(:file, 2, role: 'reference_implementation') } + let(:files) { build_list(:file, 2, role: 'reference_implementation') } it 'creates a task with two model-solutions' do expect(task.model_solutions).to have(2).items @@ -149,7 +149,7 @@ RSpec.describe ProformaService::ConvertExerciseToTask do context 'when exercise has a test' do let(:tests) { [test_file] } - let(:test_file) { FactoryBot.build(:test_file) } + let(:test_file) { build(:test_file) } # let(:file) { FactoryBot.build(:codeharbor_test_file) } it 'creates a task with one test' do @@ -178,7 +178,7 @@ RSpec.describe ProformaService::ConvertExerciseToTask do end context 'when exercise_file is not hidden' do - let(:test_file) { FactoryBot.create(:test_file, hidden: false) } + let(:test_file) { create(:test_file, hidden: false) } it 'creates the test file with the correct attribute' do expect(task.tests.first.files.first).to have_attributes(visible: 'yes') @@ -187,7 +187,7 @@ RSpec.describe ProformaService::ConvertExerciseToTask do end context 'when exercise has multiple tests' do - let(:tests) { FactoryBot.build_list(:test_file, 2) } + let(:tests) { build_list(:test_file, 2) } it 'creates a task with two tests' do expect(task.tests).to have(2).items diff --git a/spec/services/proforma_service/convert_task_to_exercise_spec.rb b/spec/services/proforma_service/convert_task_to_exercise_spec.rb index 05c612e4..02ae9224 100644 --- a/spec/services/proforma_service/convert_task_to_exercise_spec.rb +++ b/spec/services/proforma_service/convert_task_to_exercise_spec.rb @@ -9,8 +9,8 @@ describe ProformaService::ConvertTaskToExercise do subject(:convert_to_exercise_service) { described_class.new(task: task, user: user, exercise: exercise) } let(:task) { Proforma::Task.new } - let(:user) { FactoryBot.build(:teacher) } - let(:exercise) { FactoryBot.build(:dummy) } + let(:user) { build(:teacher) } + let(:exercise) { build(:dummy) } it 'assigns task' do expect(convert_to_exercise_service.instance_variable_get(:@task)).to be task @@ -28,7 +28,7 @@ describe ProformaService::ConvertTaskToExercise do describe '#execute' do subject(:convert_to_exercise_service) { described_class.call(task: task, user: user, exercise: exercise) } - before { FactoryBot.create(:dot_txt) } + before { create(:dot_txt) } let(:task) do Proforma::Task.new( @@ -44,7 +44,7 @@ describe ProformaService::ConvertTaskToExercise do tests: tests ) end - let(:user) { FactoryBot.create(:teacher) } + let(:user) { create(:teacher) } let(:files) { [] } let(:tests) { [] } let(:model_solutions) { [] } @@ -301,7 +301,7 @@ describe ProformaService::ConvertTaskToExercise do context 'when exercise is set' do let(:exercise) do - FactoryBot.create( + create( :files, title: 'exercise-title', description: 'exercise-description', diff --git a/spec/services/proforma_service/export_task_spec.rb b/spec/services/proforma_service/export_task_spec.rb index 157094de..78e91f36 100644 --- a/spec/services/proforma_service/export_task_spec.rb +++ b/spec/services/proforma_service/export_task_spec.rb @@ -6,7 +6,7 @@ describe ProformaService::ExportTask do describe '.new' do subject(:export_task) { described_class.new(exercise: exercise) } - let(:exercise) { FactoryBot.build(:dummy) } + let(:exercise) { build(:dummy) } it 'assigns exercise' do expect(export_task.instance_variable_get(:@exercise)).to be exercise @@ -25,7 +25,7 @@ describe ProformaService::ExportTask do subject(:export_task) { described_class.call(exercise: exercise) } let(:task) { Proforma::Task.new } - let(:exercise) { FactoryBot.build(:dummy) } + let(:exercise) { build(:dummy) } let(:exporter) { instance_double('Proforma::Exporter', perform: 'zip') } before do diff --git a/spec/services/proforma_service/import_spec.rb b/spec/services/proforma_service/import_spec.rb index a38212b3..1f27d731 100644 --- a/spec/services/proforma_service/import_spec.rb +++ b/spec/services/proforma_service/import_spec.rb @@ -7,7 +7,7 @@ describe ProformaService::Import do subject(:import_service) { described_class.new(zip: zip, user: user) } let(:zip) { Tempfile.new('proforma_test_zip_file') } - let(:user) { FactoryBot.build(:teacher) } + let(:user) { build(:teacher) } it 'assigns zip' do expect(import_service.instance_variable_get(:@zip)).to be zip @@ -21,11 +21,11 @@ describe ProformaService::Import do describe '#execute' do subject(:import_service) { described_class.call(zip: zip_file, user: import_user) } - let(:user) { FactoryBot.create(:teacher) } + let(:user) { create(:teacher) } let(:import_user) { user } let(:zip_file) { Tempfile.new('proforma_test_zip_file', encoding: 'ascii-8bit') } let(:exercise) do - FactoryBot.create(:dummy, + create(:dummy, instructions: 'instruction', execution_environment: execution_environment, files: files + tests, @@ -34,7 +34,7 @@ describe ProformaService::Import do end let(:uuid) { nil } - let(:execution_environment) { FactoryBot.build(:java) } + let(:execution_environment) { build(:java) } let(:files) { [] } let(:tests) { [] } let(:exporter) { ProformaService::ExportTask.call(exercise: exercise.reload).string } @@ -78,12 +78,12 @@ describe ProformaService::Import do context 'when exercise has a mainfile' do let(:files) { [file] } - let(:file) { FactoryBot.build(:file) } + let(:file) { build(:file) } it { is_expected.to be_an_equal_exercise_as exercise } context 'when the mainfile is very large' do - let(:file) { FactoryBot.build(:file, content: 'test' * (10**5)) } + let(:file) { build(:file, content: 'test' * (10**5)) } it { is_expected.to be_an_equal_exercise_as exercise } end @@ -91,12 +91,12 @@ describe ProformaService::Import do context 'when exercise has a regular file' do let(:files) { [file] } - let(:file) { FactoryBot.build(:file, role: 'regular_file') } + let(:file) { build(:file, role: 'regular_file') } it { is_expected.to be_an_equal_exercise_as exercise } context 'when file has an attachment' do - let(:file) { FactoryBot.build(:file, :image, role: 'regular_file') } + let(:file) { build(:file, :image, role: 'regular_file') } it { is_expected.to be_an_equal_exercise_as exercise } end @@ -104,26 +104,26 @@ describe ProformaService::Import do context 'when exercise has a file with role reference implementation' do let(:files) { [file] } - let(:file) { FactoryBot.build(:file, role: 'reference_implementation', read_only: true) } + let(:file) { build(:file, role: 'reference_implementation', read_only: true) } it { is_expected.to be_an_equal_exercise_as exercise } end context 'when exercise has multiple files with role reference implementation' do - let(:files) { FactoryBot.build_list(:file, 2, role: 'reference_implementation', read_only: true) } + let(:files) { build_list(:file, 2, role: 'reference_implementation', read_only: true) } it { is_expected.to be_an_equal_exercise_as exercise } end context 'when exercise has a test' do let(:tests) { [test] } - let(:test) { FactoryBot.build(:test_file) } + let(:test) { build(:test_file) } it { is_expected.to be_an_equal_exercise_as exercise } end context 'when exercise has multiple tests' do - let(:tests) { FactoryBot.build_list(:test_file, 2) } + let(:tests) { build_list(:test_file, 2) } it { is_expected.to be_an_equal_exercise_as exercise } end @@ -153,7 +153,7 @@ describe ProformaService::Import do end context 'when another user imports the exercise' do - let(:import_user) { FactoryBot.create(:teacher) } + let(:import_user) { create(:teacher) } it 'raises a proforma error' do expect { imported_exercise.save! }.to raise_error Proforma::ExerciseNotOwned diff --git a/spec/support/factory_bot.rb b/spec/support/factory_bot.rb index 891db349..f7642003 100644 --- a/spec/support/factory_bot.rb +++ b/spec/support/factory_bot.rb @@ -4,3 +4,7 @@ require 'factory_bot' # Use "old" FactoryBot default to allow auto-creating associations for #build FactoryBot.use_parent_strategy = false + +RSpec.configure do |config| + config.include FactoryBot::Syntax::Methods +end diff --git a/spec/uploaders/file_uploader_spec.rb b/spec/uploaders/file_uploader_spec.rb index 4638bfff..3bca7f14 100644 --- a/spec/uploaders/file_uploader_spec.rb +++ b/spec/uploaders/file_uploader_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe FileUploader do let(:file_path) { Rails.root.join('db/seeds/fibonacci/exercise.rb') } - let(:uploader) { described_class.new(FactoryBot.create(:file)) } + let(:uploader) { described_class.new(create(:file)) } before { uploader.store!(File.open(file_path, 'r')) } diff --git a/spec/views/execution_environments/shell.html.slim_spec.rb b/spec/views/execution_environments/shell.html.slim_spec.rb index 30cec4ef..43afee27 100644 --- a/spec/views/execution_environments/shell.html.slim_spec.rb +++ b/spec/views/execution_environments/shell.html.slim_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe 'execution_environments/shell.html.slim' do - let(:execution_environment) { FactoryBot.create(:ruby) } + let(:execution_environment) { create(:ruby) } before do assign(:execution_environment, execution_environment) diff --git a/spec/views/exercises/implement.html.slim_spec.rb b/spec/views/exercises/implement.html.slim_spec.rb index 66d7a035..74d4da3d 100644 --- a/spec/views/exercises/implement.html.slim_spec.rb +++ b/spec/views/exercises/implement.html.slim_spec.rb @@ -3,12 +3,12 @@ require 'rails_helper' describe 'exercises/implement.html.slim' do - let(:exercise) { FactoryBot.create(:fibonacci) } + let(:exercise) { create(:fibonacci) } let(:files) { exercise.files.visible } let(:non_binary_files) { files.reject {|file| file.file_type.binary? } } before do - assign(:current_user, FactoryBot.create(:admin)) + assign(:current_user, create(:admin)) assign(:exercise, exercise) assign(:files, files) assign(:paths, []) diff --git a/yarn.lock b/yarn.lock index 988e1fb9..524d39d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,32 +2,32 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" - integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: - "@babel/highlight" "^7.16.0" + "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4": version "7.16.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== "@babel/core@^7.15.0": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.5.tgz#924aa9e1ae56e1e55f7184c8bf073a50d8677f5c" - integrity sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.7.tgz#db990f931f6d40cb9b87a0dc7d2adc749f1dcbcf" + integrity sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA== dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.5" - "@babel/helper-compilation-targets" "^7.16.3" - "@babel/helper-module-transforms" "^7.16.5" - "@babel/helpers" "^7.16.5" - "@babel/parser" "^7.16.5" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.7" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -35,59 +35,59 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.5.tgz#26e1192eb8f78e0a3acaf3eede3c6fc96d22bedf" - integrity sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA== +"@babel/generator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.7.tgz#b42bf46a3079fa65e1544135f32e7958f048adbb" + integrity sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" - integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.5.tgz#a8429d064dce8207194b8bf05a70a9ea828746af" - integrity sha512-3JEA9G5dmmnIWdzaT9d0NmFRgYnWUThLsDaL7982H0XqqWr56lRrsmwheXFMjR+TMl7QMBb6mzy9kvgr1lRLUA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.3": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" - integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== dependencies: - "@babel/compat-data" "^7.16.0" - "@babel/helper-validator-option" "^7.14.5" + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.5.tgz#5d1bcd096792c1ebec6249eebc6358eec55d0cad" - integrity sha512-NEohnYA7mkB8L5JhU7BLwcBdU3j83IziR9aseMueWGeAjblbul3zzb8UvJ3a1zuBiqCMObzCJHFqKIQE6hTVmg== +"@babel/helper-create-class-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz#9c5b34b53a01f2097daf10678d65135c1b9f84ba" + integrity sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-environment-visitor" "^7.16.5" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-member-expression-to-functions" "^7.16.5" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/helper-replace-supers" "^7.16.5" - "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" -"@babel/helper-create-regexp-features-plugin@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff" - integrity sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA== +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" + integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^4.7.1" "@babel/helper-define-polyfill-provider@^0.3.0": @@ -104,109 +104,109 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz#f6a7f38b3c6d8b07c88faea083c46c09ef5451b8" - integrity sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg== +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-explode-assignable-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" - integrity sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ== +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-function-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" - integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== dependencies: - "@babel/helper-get-function-arity" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-get-function-arity@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" - integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-hoist-variables@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" - integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-member-expression-to-functions@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.5.tgz#1bc9f7e87354e86f8879c67b316cb03d3dc2caab" - integrity sha512-7fecSXq7ZrLE+TWshbGT+HyCLkxloWNhTbU2QM1NTI/tDqyf0oZiMcEfYtDuUDCo528EOlt39G1rftea4bRZIw== +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" - integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.5.tgz#530ebf6ea87b500f60840578515adda2af470a29" - integrity sha512-CkvMxgV4ZyyioElFwcuWnDCcNIeyqTkCm9BxXZi73RR1ozqlpboqsbGUNvRTflgZtFbbJ1v5Emvm+lkjMYY/LQ== +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== dependencies: - "@babel/helper-environment-visitor" "^7.16.5" - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-simple-access" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/helper-validator-identifier" "^7.15.7" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-optimise-call-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" - integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz#afe37a45f39fce44a3d50a7958129ea5b1a5c074" - integrity sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== -"@babel/helper-remap-async-to-generator@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.5.tgz#e706646dc4018942acb4b29f7e185bc246d65ac3" - integrity sha512-X+aAJldyxrOmN9v3FKp+Hu1NO69VWgYgDGq6YDykwRPzxs5f2N+X988CBXS7EQahDU+Vpet5QYMqLk+nsp+Qxw== +"@babel/helper-remap-async-to-generator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.7.tgz#5ce2416990d55eb6e099128338848ae8ffa58a9a" + integrity sha512-C3o117GnP/j/N2OWo+oepeWbFEKRfNaay+F1Eo5Mj3A1SRjyx+qaFhm23nlipub7Cjv2azdUUiDH+VlpdwUFRg== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-wrap-function" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-replace-supers@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.5.tgz#96d3988bd0ab0a2d22c88c6198c3d3234ca25326" - integrity sha512-ao3seGVa/FZCMCCNDuBcqnBFSbdr8N2EW35mzojx3TwfIbdPmNK+JV6+2d5bR0Z71W5ocLnQp9en/cTF7pBJiQ== +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== dependencies: - "@babel/helper-environment-visitor" "^7.16.5" - "@babel/helper-member-expression-to-functions" "^7.16.5" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/traverse" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" - integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" @@ -215,199 +215,199 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" - integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== -"@babel/helper-wrap-function@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.5.tgz#0158fca6f6d0889c3fee8a6ed6e5e07b9b54e41f" - integrity sha512-2J2pmLBqUqVdJw78U0KPNdeE2qeuIyKoG4mKV7wAq3mc4jJG282UgjZw4ZYDnqiWQuS3Y3IYdF/AQ6CpyBV3VA== +"@babel/helper-wrap-function@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.7.tgz#8ddf9eaa770ed43de4bc3687f3f3b0d6d5ecf014" + integrity sha512-7a9sABeVwcunnztZZ7WTgSw6jVYLzM1wua0Z4HIXm9S3/HC96WKQTkFgGEaj5W06SHHihPJ6Le6HzS5cGOQMNw== dependencies: - "@babel/helper-function-name" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helpers@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.5.tgz#29a052d4b827846dd76ece16f565b9634c554ebd" - integrity sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw== +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== dependencies: - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/highlight@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== +"@babel/highlight@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" + integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.16.0", "@babel/parser@^7.16.5": - version "7.16.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314" - integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ== +"@babel/parser@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e" + integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2": - version "7.16.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" - integrity sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2" - integrity sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" -"@babel/plugin-proposal-async-generator-functions@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.5.tgz#fd3bd7e0d98404a3d4cbca15a72d533f8c9a2f67" - integrity sha512-C/FX+3HNLV6sz7AqbTQqEo1L9/kfrKjxcVtgyBCmvIgOjvuBVUWooDoi7trsLxOzCEo5FccjRvKHkfDsJFZlfA== +"@babel/plugin-proposal-async-generator-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.7.tgz#739adc1212a9e4892de440cd7dfffb06172df78d" + integrity sha512-TTXBT3A5c11eqRzaC6beO6rlFT3Mo9C2e8eB44tTr52ESXSK2CIc2fOp1ynpAwQA8HhBMho+WXhMHWlAe3xkpw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-remap-async-to-generator" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.7" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.14.5", "@babel/plugin-proposal-class-properties@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.5.tgz#3269f44b89122110f6339806e05d43d84106468a" - integrity sha512-pJD3HjgRv83s5dv1sTnDbZOaTjghKEz8KUn1Kbh2eAIRhGuyQ1XSeI4xVXU3UlIEVA3DAyIdxqT1eRn7Wcn55A== +"@babel/plugin-proposal-class-properties@^7.14.5", "@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-class-static-block@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.5.tgz#df58ab015a7d3b0963aafc8f20792dcd834952a9" - integrity sha512-EEFzuLZcm/rNJ8Q5krK+FRKdVkd6FjfzT9tuSZql9sQn64K0hHA2KLJ0DqVot9/iV6+SsuadC5yI39zWnm+nmQ== +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" + integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-dynamic-import@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.5.tgz#2e0d19d5702db4dcb9bc846200ca02f2e9d60e9e" - integrity sha512-P05/SJZTTvHz79LNYTF8ff5xXge0kk5sIIWAypcWgX4BTRUgyHc8wRxJ/Hk+mU0KXldgOOslKaeqnhthcDJCJQ== +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.5.tgz#3b4dd28378d1da2fea33e97b9f25d1c2f5bf1ac9" - integrity sha512-i+sltzEShH1vsVydvNaTRsgvq2vZsfyrd7K7vPLUU/KgS0D5yZMe6uipM0+izminnkKrEfdUnz7CxMRb6oHZWw== +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.5.tgz#1e726930fca139caab6b084d232a9270d9d16f9c" - integrity sha512-QQJueTFa0y9E4qHANqIvMsuxM/qcLQmKttBACtPCQzGUEizsXDACGonlPiSwynHfOa3vNw0FPMVvQzbuXwh4SQ== +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.5.tgz#df1f2e4b5a0ec07abf061d2c18e53abc237d3ef5" - integrity sha512-xqibl7ISO2vjuQM+MzR3rkd0zfNWltk7n9QhaD8ghMmMceVguYrNDt7MikRyj4J4v3QehpnrU8RYLnC7z/gZLA== +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.5.tgz#652555bfeeeee2d2104058c6225dc6f75e2d0f07" - integrity sha512-YwMsTp/oOviSBhrjwi0vzCUycseCYwoXnLiXIL3YNjHSMBHicGTz7GjVU/IGgz4DtOEXBdCNG72pvCX22ehfqg== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.5.tgz#edcb6379b6cf4570be64c45965d8da7a2debf039" - integrity sha512-DvB9l/TcsCRvsIV9v4jxR/jVP45cslTVC0PMVHvaJhhNuhn2Y1SOhCSFlPK777qLB5wb8rVDaNoqMTyOqtY5Iw== +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.14.7", "@babel/plugin-proposal-object-rest-spread@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.5.tgz#f30f80dacf7bc1404bf67f99c8d9c01665e830ad" - integrity sha512-UEd6KpChoyPhCoE840KRHOlGhEZFutdPDMGj+0I56yuTTOaT51GzmnEl/0uT41fB/vD2nT+Pci2KjezyE3HmUw== +"@babel/plugin-proposal-object-rest-spread@^7.14.7", "@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== dependencies: "@babel/compat-data" "^7.16.4" - "@babel/helper-compilation-targets" "^7.16.3" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.5" + "@babel/plugin-transform-parameters" "^7.16.7" -"@babel/plugin-proposal-optional-catch-binding@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.5.tgz#1a5405765cf589a11a33a1fd75b2baef7d48b74e" - integrity sha512-ihCMxY1Iljmx4bWy/PIMJGXN4NS4oUj1MKynwO07kiKms23pNvIn1DMB92DNB2R0EA882sw0VXIelYGdtF7xEQ== +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.5.tgz#a5fa61056194d5059366c0009cb9a9e66ed75c1f" - integrity sha512-kzdHgnaXRonttiTfKYnSVafbWngPPr2qKw9BWYBESl91W54e+9R5pP70LtWxV56g0f05f/SQrwHYkfvbwcdQ/A== +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.5.tgz#2086f7d78c1b0c712d49b5c3fbc2d1ca21a7ee12" - integrity sha512-+yFMO4BGT3sgzXo+lrq7orX5mAZt57DwUK6seqII6AcJnJOIhBJ8pzKH47/ql/d426uQ7YhN8DpUFirQzqYSUA== +"@babel/plugin-proposal-private-methods@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz#e418e3aa6f86edd6d327ce84eff188e479f571e0" + integrity sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-private-property-in-object@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.5.tgz#a42d4b56005db3d405b12841309dbca647e7a21b" - integrity sha512-+YGh5Wbw0NH3y/E5YMu6ci5qTDmAEVNoZ3I54aB6nVEOZ5BQ7QJlwKq5pYVucQilMByGn/bvX0af+uNaPRCabA== +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-create-class-features-plugin" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.5.tgz#35fe753afa7c572f322bd068ff3377bde0f37080" - integrity sha512-s5sKtlKQyFSatt781HQwv1hoM5BQ9qRH30r+dK56OLDsHmV74mzwJNX7R1yMuE7VZKG5O6q/gmOGSAO6ikTudg== +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -507,293 +507,294 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.5.tgz#04c18944dd55397b521d9d7511e791acea7acf2d" - integrity sha512-8bTHiiZyMOyfZFULjsCnYOWG059FVMes0iljEHSfARhNgFfpsqE92OrCffv3veSw9rwMkYcFe9bj0ZoXU2IGtQ== +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-async-to-generator@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.5.tgz#89c9b501e65bb14c4579a6ce9563f859de9b34e4" - integrity sha512-TMXgfioJnkXU+XRoj7P2ED7rUm5jbnDWwlCuFVTpQboMfbSya5WrmubNBAMlk7KXvywpo8rd8WuYZkis1o2H8w== +"@babel/plugin-transform-async-to-generator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.7.tgz#646e1262ac341b587ff5449844d4492dbb10ac4b" + integrity sha512-pFEfjnK4DfXCfAlA5I98BYdDJD8NltMzx19gt6DAmfE+2lXRfPUoa0/5SUjT4+TDE1W/rcxU/1lgN55vpAjjdg== dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-remap-async-to-generator" "^7.16.5" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.7" -"@babel/plugin-transform-block-scoped-functions@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.5.tgz#af087494e1c387574260b7ee9b58cdb5a4e9b0b0" - integrity sha512-BxmIyKLjUGksJ99+hJyL/HIxLIGnLKtw772zYDER7UuycDZ+Xvzs98ZQw6NGgM2ss4/hlFAaGiZmMNKvValEjw== +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoping@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.5.tgz#b91f254fe53e210eabe4dd0c40f71c0ed253c5e7" - integrity sha512-JxjSPNZSiOtmxjX7PBRBeRJTUKTyJ607YUYeT0QJCNdsedOe+/rXITjP08eG8xUpsLfPirgzdCFN+h0w6RI+pQ== +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-classes@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.5.tgz#6acf2ec7adb50fb2f3194dcd2909dbd056dcf216" - integrity sha512-DzJ1vYf/7TaCYy57J3SJ9rV+JEuvmlnvvyvYKFbk5u46oQbBvuB9/0w+YsVsxkOv8zVWKpDmUoj4T5ILHoXevA== +"@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-environment-visitor" "^7.16.5" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-replace-supers" "^7.16.5" - "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.5.tgz#2af91ebf0cceccfcc701281ada7cfba40a9b322a" - integrity sha512-n1+O7xtU5lSLraRzX88CNcpl7vtGdPakKzww74bVwpAIRgz9JVLJJpOLb0uYqcOaXVM0TL6X0RVeIJGD2CnCkg== +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-destructuring@^7.14.7", "@babel/plugin-transform-destructuring@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.5.tgz#89ebc87499ac4a81b897af53bb5d3eed261bd568" - integrity sha512-GuRVAsjq+c9YPK6NeTkRLWyQskDC099XkBSVO+6QzbnOnH2d/4mBVXYStaPrZD3dFRfg00I6BFJ9Atsjfs8mlg== +"@babel/plugin-transform-destructuring@^7.14.7", "@babel/plugin-transform-destructuring@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-dotall-regex@^7.16.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.5.tgz#b40739c00b6686820653536d6d143e311de67936" - integrity sha512-iQiEMt8Q4/5aRGHpGVK2Zc7a6mx7qEAO7qehgSug3SDImnuMzgmm/wtJALXaz25zUj1PmnNHtShjFgk4PDx4nw== +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.5.tgz#2450f2742325412b746d7d005227f5e8973b512a" - integrity sha512-81tijpDg2a6I1Yhj4aWY1l3O1J4Cg/Pd7LfvuaH2VVInAkXtzibz9+zSPdUM1WvuUi128ksstAP0hM5w48vQgg== +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.5.tgz#36e261fa1ab643cfaf30eeab38e00ed1a76081e2" - integrity sha512-12rba2HwemQPa7BLIKCzm1pT2/RuQHtSFHdNl41cFiC6oi4tcrp7gjB07pxQvFpcADojQywSjblQth6gJyE6CA== +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-for-of@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.5.tgz#9b544059c6ca11d565457c0ff1f08e13ce225261" - integrity sha512-+DpCAJFPAvViR17PIMi9x2AE34dll5wNlXO43wagAX2YcRGgEVHCNFC4azG85b4YyyFarvkc/iD5NPrz4Oneqw== +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-function-name@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.5.tgz#6896ebb6a5538a75d6a4086a277752f655a7bd15" - integrity sha512-Fuec/KPSpVLbGo6z1RPw4EE1X+z9gZk1uQmnYy7v4xr4TO9p41v1AoUuXEtyqAI7H+xNJYSICzRqZBhDEkd3kQ== +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== dependencies: - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.5.tgz#af392b90e3edb2bd6dc316844cbfd6b9e009d320" - integrity sha512-B1j9C/IfvshnPcklsc93AVLTrNVa69iSqztylZH6qnmiAsDDOmmjEYqOm3Ts2lGSgTSywnBNiqC949VdD0/gfw== +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-member-expression-literals@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.5.tgz#4bd6ecdc11932361631097b779ca5c7570146dd5" - integrity sha512-d57i3vPHWgIde/9Y8W/xSFUndhvhZN5Wu2TjRrN1MVz5KzdUihKnfDVlfP1U7mS5DNj/WHHhaE4/tTi4hIyHwQ== +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-amd@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.5.tgz#92c0a3e83f642cb7e75fada9ab497c12c2616527" - integrity sha512-oHI15S/hdJuSCfnwIz+4lm6wu/wBn7oJ8+QrkzPPwSFGXk8kgdI/AIKcbR/XnD1nQVMg/i6eNaXpszbGuwYDRQ== +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== dependencies: - "@babel/helper-module-transforms" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.5.tgz#4ee03b089536f076b2773196529d27c32b9d7bde" - integrity sha512-ABhUkxvoQyqhCWyb8xXtfwqNMJD7tx+irIRnUh6lmyFud7Jln1WzONXKlax1fg/ey178EXbs4bSGNd6PngO+SQ== +"@babel/plugin-transform-modules-commonjs@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.7.tgz#fd119e6a433c527d368425b45df361e1e95d3c1a" + integrity sha512-h2RP2kE7He1ZWKyAlanMZrAbdv+Acw1pA8dQZhE025WJZE2z0xzFADAinXA9fxd5bn7JnM+SdOGcndGx1ARs9w== dependencies: - "@babel/helper-module-transforms" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.5.tgz#07078ba2e3cc94fbdd06836e355c246e98ad006b" - integrity sha512-53gmLdScNN28XpjEVIm7LbWnD/b/TpbwKbLk6KV4KqC9WyU6rq1jnNmVG6UgAdQZVVGZVoik3DqHNxk4/EvrjA== +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== dependencies: - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-module-transforms" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.5.tgz#caa9c53d636fb4e3c99fd35a4c9ba5e5cd7e002e" - integrity sha512-qTFnpxHMoenNHkS3VoWRdwrcJ3FhX567GvDA3hRZKF0Dj8Fmg0UzySZp3AP2mShl/bzcywb/UWAMQIjA1bhXvw== +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== dependencies: - "@babel/helper-module-transforms" "^7.16.5" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.5.tgz#4afd8cdee377ce3568f4e8a9ee67539b69886a3c" - integrity sha512-/wqGDgvFUeKELW6ex6QB7dLVRkd5ehjw34tpXu1nhKC0sFfmaLabIswnpf8JgDyV2NeDmZiwoOb0rAmxciNfjA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.7.tgz#749d90d94e73cf62c60a0cc8d6b94d29305a81f2" + integrity sha512-kFy35VwmwIQwCjwrAQhl3+c/kr292i4KdLPKp5lPH03Ltc51qnFlIADoyPxc/6Naz3ok3WdYKg+KK6AH+D4utg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" -"@babel/plugin-transform-new-target@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.5.tgz#759ea9d6fbbc20796056a5d89d13977626384416" - integrity sha512-ZaIrnXF08ZC8jnKR4/5g7YakGVL6go6V9ql6Jl3ecO8PQaQqFE74CuM384kezju7Z9nGCCA20BqZaR1tJ/WvHg== +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-object-super@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.5.tgz#8ccd9a1bcd3e7732ff8aa1702d067d8cd70ce380" - integrity sha512-tded+yZEXuxt9Jdtkc1RraW1zMF/GalVxaVVxh41IYwirdRgyAxxxCKZ9XB7LxZqmsjfjALxupNE1MIz9KH+Zg== +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-replace-supers" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" -"@babel/plugin-transform-parameters@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.5.tgz#4fc74b18a89638bd90aeec44a11793ecbe031dde" - integrity sha512-B3O6AL5oPop1jAVg8CV+haeUte9oFuY85zu0jwnRNZZi3tVAbJriu5tag/oaO2kGaQM/7q7aGPBlTI5/sr9enA== +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-property-literals@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.5.tgz#58f1465a7202a2bb2e6b003905212dd7a79abe3f" - integrity sha512-+IRcVW71VdF9pEH/2R/Apab4a19LVvdVsr/gEeotH00vSDVlKD+XgfSIw+cgGWsjDB/ziqGv/pGoQZBIiQVXHg== +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-regenerator@^7.14.5", "@babel/plugin-transform-regenerator@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.5.tgz#704cc6d8dd3dd4758267621ab7b36375238cef13" - integrity sha512-2z+it2eVWU8TtQQRauvGUqZwLy4+7rTfo6wO4npr+fvvN1SW30ZF3O/ZRCNmTuu4F5MIP8OJhXAhRV5QMJOuYg== +"@babel/plugin-transform-regenerator@^7.14.5", "@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.5.tgz#db95e98799675e193dc2b47d3e72a7c0651d0c30" - integrity sha512-aIB16u8lNcf7drkhXJRoggOxSTUAuihTSTfAcpynowGJOZiGf+Yvi7RuTwFzVYSYPmWyARsPqUGoZWWWxLiknw== +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-runtime@^7.15.0": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.5.tgz#0cc3f01d69f299d5a42cd9ec43b92ea7a777b8db" - integrity sha512-gxpfS8XQWDbQ8oP5NcmpXxtEgCJkbO+W9VhZlOhr0xPyVaRjAQPOv7ZDj9fg0d5s9+NiVvMCE6gbkEkcsxwGRw== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.7.tgz#1da184cb83a2287a01956c10c60e66dd503c18aa" + integrity sha512-2FoHiSAWkdq4L06uaDN3rS43i6x28desUVxq+zAFuE6kbWYQeiLPJI5IC7Sg9xKYVcrBKSQkVUfH6aeQYbl9QA== dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-polyfill-corejs2 "^0.3.0" babel-plugin-polyfill-corejs3 "^0.4.0" babel-plugin-polyfill-regenerator "^0.3.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.5.tgz#ccb60b1a23b799f5b9a14d97c5bc81025ffd96d7" - integrity sha512-ZbuWVcY+MAXJuuW7qDoCwoxDUNClfZxoo7/4swVbOW1s/qYLOMHlm9YRWMsxMFuLs44eXsv4op1vAaBaBaDMVg== +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-spread@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.5.tgz#912b06cff482c233025d3e69cf56d3e8fa166c29" - integrity sha512-5d6l/cnG7Lw4tGHEoga4xSkYp1euP7LAtrah1h1PgJ3JY7yNsjybsxQAnVK4JbtReZ/8z6ASVmd3QhYYKLaKZw== +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-sticky-regex@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.5.tgz#593579bb2b5a8adfbe02cb43823275d9098f75f9" - integrity sha512-usYsuO1ID2LXxzuUxifgWtJemP7wL2uZtyrTVM4PKqsmJycdS4U4mGovL5xXkfUheds10Dd2PjoQLXw6zCsCbg== +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-template-literals@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.5.tgz#343651385fd9923f5aa2275ca352c5d9183e1773" - integrity sha512-gnyKy9RyFhkovex4BjKWL3BVYzUDG6zC0gba7VMLbQoDuqMfJ1SDXs8k/XK41Mmt1Hyp4qNAvGFb9hKzdCqBRQ== +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typeof-symbol@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.5.tgz#a1d1bf2c71573fe30965d0e4cd6a3291202e20ed" - integrity sha512-ldxCkW180qbrvyCVDzAUZqB0TAeF8W/vGJoRcaf75awm6By+PxfJKvuqVAnq8N9wz5Xa6mSpM19OfVKKVmGHSQ== +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-escapes@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.5.tgz#80507c225af49b4f4ee647e2a0ce53d2eeff9e85" - integrity sha512-shiCBHTIIChGLdyojsKQjoAyB8MBwat25lKM7MJjbe1hE0bgIppD+LX9afr41lLHOhqceqeWl4FkLp+Bgn9o1Q== +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-regex@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.5.tgz#ac84d6a1def947d71ffb832426aa53b83d7ed49e" - integrity sha512-GTJ4IW012tiPEMMubd7sD07iU9O/LOo8Q/oU4xNhcaq0Xn8+6TcUQaHtC8YxySo1T+ErQ8RaWogIEeFhKGNPzw== +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/preset-env@^7.15.0": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.5.tgz#2e94d922f4a890979af04ffeb6a6b4e44ba90847" - integrity sha512-MiJJW5pwsktG61NDxpZ4oJ1CKxM1ncam9bzRtx9g40/WkLRkxFP6mhpkYV0/DxcciqoiHicx291+eUQrXb/SfQ== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.7.tgz#c491088856d0b3177822a2bf06cb74d76327aa56" + integrity sha512-urX3Cee4aOZbRWOSa3mKPk0aqDikfILuo+C7qq7HY0InylGNZ1fekq9jmlr3pLWwZHF4yD7heQooc2Pow2KMyQ== dependencies: "@babel/compat-data" "^7.16.4" - "@babel/helper-compilation-targets" "^7.16.3" - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.2" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.0" - "@babel/plugin-proposal-async-generator-functions" "^7.16.5" - "@babel/plugin-proposal-class-properties" "^7.16.5" - "@babel/plugin-proposal-class-static-block" "^7.16.5" - "@babel/plugin-proposal-dynamic-import" "^7.16.5" - "@babel/plugin-proposal-export-namespace-from" "^7.16.5" - "@babel/plugin-proposal-json-strings" "^7.16.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.5" - "@babel/plugin-proposal-numeric-separator" "^7.16.5" - "@babel/plugin-proposal-object-rest-spread" "^7.16.5" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.5" - "@babel/plugin-proposal-optional-chaining" "^7.16.5" - "@babel/plugin-proposal-private-methods" "^7.16.5" - "@babel/plugin-proposal-private-property-in-object" "^7.16.5" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.5" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.7" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.7" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -808,40 +809,40 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.5" - "@babel/plugin-transform-async-to-generator" "^7.16.5" - "@babel/plugin-transform-block-scoped-functions" "^7.16.5" - "@babel/plugin-transform-block-scoping" "^7.16.5" - "@babel/plugin-transform-classes" "^7.16.5" - "@babel/plugin-transform-computed-properties" "^7.16.5" - "@babel/plugin-transform-destructuring" "^7.16.5" - "@babel/plugin-transform-dotall-regex" "^7.16.5" - "@babel/plugin-transform-duplicate-keys" "^7.16.5" - "@babel/plugin-transform-exponentiation-operator" "^7.16.5" - "@babel/plugin-transform-for-of" "^7.16.5" - "@babel/plugin-transform-function-name" "^7.16.5" - "@babel/plugin-transform-literals" "^7.16.5" - "@babel/plugin-transform-member-expression-literals" "^7.16.5" - "@babel/plugin-transform-modules-amd" "^7.16.5" - "@babel/plugin-transform-modules-commonjs" "^7.16.5" - "@babel/plugin-transform-modules-systemjs" "^7.16.5" - "@babel/plugin-transform-modules-umd" "^7.16.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.5" - "@babel/plugin-transform-new-target" "^7.16.5" - "@babel/plugin-transform-object-super" "^7.16.5" - "@babel/plugin-transform-parameters" "^7.16.5" - "@babel/plugin-transform-property-literals" "^7.16.5" - "@babel/plugin-transform-regenerator" "^7.16.5" - "@babel/plugin-transform-reserved-words" "^7.16.5" - "@babel/plugin-transform-shorthand-properties" "^7.16.5" - "@babel/plugin-transform-spread" "^7.16.5" - "@babel/plugin-transform-sticky-regex" "^7.16.5" - "@babel/plugin-transform-template-literals" "^7.16.5" - "@babel/plugin-transform-typeof-symbol" "^7.16.5" - "@babel/plugin-transform-unicode-escapes" "^7.16.5" - "@babel/plugin-transform-unicode-regex" "^7.16.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.7" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.7" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.7" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" babel-plugin-polyfill-corejs2 "^0.3.0" babel-plugin-polyfill-corejs3 "^0.4.0" babel-plugin-polyfill-regenerator "^0.3.0" @@ -860,43 +861,43 @@ esutils "^2.0.2" "@babel/runtime@^7.15.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.5.tgz#7f3e34bf8bdbbadf03fbb7b1ea0d929569c9487a" - integrity sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" - integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.5.tgz#d7d400a8229c714a59b87624fc67b0f1fbd4b2b3" - integrity sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ== +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76" + integrity sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ== dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.5" - "@babel/helper-environment-visitor" "^7.16.5" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/parser" "^7.16.5" - "@babel/types" "^7.16.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.16.0", "@babel/types@^7.4.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" - integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== +"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.7.tgz#4ed19d51f840ed4bd5645be6ce40775fecf03159" + integrity sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" "@csstools/convert-colors@^1.4.0": @@ -1045,9 +1046,9 @@ integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/node@*": - version "17.0.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.2.tgz#a4c07d47ff737e8ee7e586fe636ff0e1ddff070a" - integrity sha512-JepeIUPFDARgIs0zD/SKPgFsJEAF0X5/qO80llx59gOxFTboS9Amv3S+QfB7lqBId5sFXJ99BN0J6zFRvL9dDA== + version "17.0.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.7.tgz#4a53d8332bb65a45470a2f9e2611f1ced637a5cb" + integrity sha512-1QUk+WAUD4t8iR+Oj+UgI8oJa6yyxaB8a8pHaC8uqM6RrS1qbL7bf3Pwl5rHv0psm2CuDErgho6v5N+G+5fwtQ== "@types/parse-json@^4.0.0": version "4.0.0" @@ -1828,9 +1829,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001286: - version "1.0.30001291" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001291.tgz#08a8d2cfea0b2cf2e1d94dd795942d0daef6108c" - integrity sha512-roMV5V0HNGgJ88s42eE70sstqGW/gwFndosYrikHthw98N5tLnOTxFqMLQjZVRxTWFlJ4rn+MsgXrR7MDPY4jA== + version "1.0.30001295" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001295.tgz#68a60f8f0664f342b2835c5d8898b4faea7b3d51" + integrity sha512-lSP16vcyC0FEy0R4ECc9duSPoKoZy+YkpGkue9G4D81OfPnliopaZrU10+qtPdT8PbGXad/PNx43TIQrOmJZSQ== case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" @@ -2119,17 +2120,17 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.18.0, core-js-compat@^3.19.1: - version "3.20.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.0.tgz#fd704640c5a213816b6d10ec0192756111e2c9d1" - integrity sha512-relrah5h+sslXssTTOkvqcC/6RURifB0W5yhYBdBkaPYa5/2KBMiog3XiD+s3TwEHWxInWVv4Jx2/Lw0vng+IQ== + version "3.20.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.2.tgz#d1ff6936c7330959b46b2e08b122a8b14e26140b" + integrity sha512-qZEzVQ+5Qh6cROaTPFLNS4lkvQ6mBzE3R6A6EEpssj7Zr2egMHgsy4XapdifqJDGC9CBiNv7s+ejI96rLNQFdg== dependencies: browserslist "^4.19.1" semver "7.0.0" core-js@^3.16.2: - version "3.20.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.0.tgz#1c5ac07986b8d15473ab192e45a2e115a4a95b79" - integrity sha512-KjbKU7UEfg4YPpskMtMXPhUKn7m/1OdTHTVjy09ScR2LVaoUXe8Jh0UdvN2EKUR6iKTJph52SJP95mAB0MnVLQ== + version "3.20.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.2.tgz#46468d8601eafc8b266bd2dd6bf9dee622779581" + integrity sha512-nuqhq11DcOAbFBV4zCbKeGbKQsUDRqTX0oqx7AttUBuqe3h20ixsE039QHelbL6P4h+9kytVqyEtyZ6gsiwEYw== core-util-is@~1.0.0: version "1.0.3" @@ -2874,9 +2875,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.4.17: - version "1.4.25" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.25.tgz#ce95e6678f8c6893ae892c7e95a5000e83f1957f" - integrity sha512-bTwub9Y/76EiNmfaiJih+hAy6xn7Ns95S4KvI2NuKNOz8TEEKKQUu44xuy0PYMudjM9zdjKRS1bitsUvHTfuUg== + version "1.4.31" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.31.tgz#8d5ccc3f8253cd142b07afaa84f200fd33a7f2a6" + integrity sha512-t3XVQtk+Frkv6aTD4RRk0OqosU+VLe1dQFW83MDer78ZD6a52frgXuYOIsLYTQiH2Lm+JB2OKYcn7zrX+YGAiQ== elliptic@^6.5.3: version "6.5.4" @@ -5131,9 +5132,9 @@ picocolors@^1.0.0: integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.0.0, pify@^2.3.0: version "2.3.0" @@ -5785,9 +5786,9 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: uniq "^1.0.1" postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.7" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.7.tgz#48404830a635113a71fd79397de8209ed05a66fc" - integrity sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA== + version "6.0.8" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz#f023ed7a9ea736cd7ef70342996e8e78645a7914" + integrity sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -6270,9 +6271,9 @@ sass-loader@10.1.1: semver "^7.3.2" sass@^1.38.0: - version "1.45.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.45.1.tgz#fa03951f924d1ba5762949567eaf660e608a1ab0" - integrity sha512-pwPRiq29UR0o4X3fiQyCtrESldXvUQAAE0QmcJTpsI4kuHHcLzZ54M1oNBVIXybQv8QF2zfkpFcTxp8ta97dUA== + version "1.45.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.45.2.tgz#130b428c1692201cfa181139835d6fc378a33323" + integrity sha512-cKfs+F9AMPAFlbbTXNsbGvg3y58nV0mXA3E94jqaySKcC8Kq3/8983zVKQ0TLMUrHw7hF9Tnd3Bz9z5Xgtrl9g== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -7082,9 +7083,9 @@ urix@^0.1.0: integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse@^1.4.3, url-parse@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" - integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== + version "1.5.4" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.4.tgz#e4f645a7e2a0852cc8a66b14b292a3e9a11a97fd" + integrity sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg== dependencies: querystringify "^2.1.1" requires-port "^1.0.0"