From 33cc3ae8fa4467b1e3703c92652fdebc0ddd344a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 8 Nov 2023 07:01:18 -0500 Subject: [PATCH 01/24] Fix `Style/StabbyLambdaParentheses` cop (#27771) --- .rubocop_todo.yml | 8 -------- config/environments/production.rb | 2 +- config/initializers/content_security_policy.rb | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index a2de86c2eb..36d543b133 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -558,14 +558,6 @@ Style/SingleArgumentDig: Exclude: - 'lib/webpacker/manifest_extensions.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: require_parentheses, require_no_parentheses -Style/StabbyLambdaParentheses: - Exclude: - - 'config/environments/production.rb' - - 'config/initializers/content_security_policy.rb' - # This cop supports safe autocorrection (--autocorrect). Style/StderrPuts: Exclude: diff --git a/config/environments/production.rb b/config/environments/production.rb index 94e74699fc..11da32f18a 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -44,7 +44,7 @@ Rails.application.configure do config.force_ssl = true config.ssl_options = { redirect: { - exclude: ->request { request.path.start_with?('/health') || request.headers["Host"].end_with?('.onion') || request.headers["Host"].end_with?('.i2p') } + exclude: ->(request) { request.path.start_with?('/health') || request.headers["Host"].end_with?('.onion') || request.headers["Host"].end_with?('.i2p') } } } diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index 8f8ea58028..f728acfd36 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -67,7 +67,7 @@ end # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only # Rails.application.config.content_security_policy_report_only = true -Rails.application.config.content_security_policy_nonce_generator = ->request { SecureRandom.base64(16) } +Rails.application.config.content_security_policy_nonce_generator = ->(request) { SecureRandom.base64(16) } Rails.application.config.content_security_policy_nonce_directives = %w(style-src) From 7d6bcc0615e923836eeaef70bcdb1cae0ee118df Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 8 Nov 2023 07:02:09 -0500 Subject: [PATCH 02/24] Remove unmatched `rubocop:enable` declaration (#27769) --- app/helpers/languages_helper.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index ddb10aa25f..0d4edceb7b 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -298,5 +298,3 @@ module LanguagesHelper locale_name.to_sym if locale_name.present? && I18n.available_locales.include?(locale_name.to_sym) end end - -# rubocop:enable Metrics/ModuleLength From 9b7b4d748fd0bbfb537f8e2024c4566d71fb0122 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 8 Nov 2023 07:37:29 -0500 Subject: [PATCH 03/24] Simplify request cache spec shared examples (#27673) --- spec/requests/cache_spec.rb | 108 +++++++++++------------------------- 1 file changed, 32 insertions(+), 76 deletions(-) diff --git a/spec/requests/cache_spec.rb b/spec/requests/cache_spec.rb index 19232fce68..ce73d3af75 100644 --- a/spec/requests/cache_spec.rb +++ b/spec/requests/cache_spec.rb @@ -119,24 +119,26 @@ module TestEndpoints end describe 'Caching behavior' do - shared_examples 'cachable response' do - it 'does not set cookies' do + shared_examples 'cachable response' do |http_success: false| + it 'does not set cookies or set public cache control', :aggregate_failures do expect(response.cookies).to be_empty - end - it 'sets public cache control', :aggregate_failures do # expect(response.cache_control[:max_age]&.to_i).to be_positive expect(response.cache_control[:public]).to be_truthy expect(response.cache_control[:private]).to be_falsy expect(response.cache_control[:no_store]).to be_falsy expect(response.cache_control[:no_cache]).to be_falsy + + expect(response).to have_http_status(200) if http_success end end - shared_examples 'non-cacheable response' do + shared_examples 'non-cacheable response' do |http_success: false| it 'sets private cache control' do expect(response.cache_control[:private]).to be_truthy expect(response.cache_control[:no_store]).to be_truthy + + expect(response).to have_http_status(200) if http_success end end @@ -149,7 +151,7 @@ describe 'Caching behavior' do shared_examples 'language-dependent' do it 'has a Vary on Accept-Language' do - expect(response.headers['Vary']&.split(',')&.map { |x| x.strip.downcase }).to include('accept-language') + expect(response_vary_headers).to include('accept-language') end end @@ -202,7 +204,7 @@ describe 'Caching behavior' do it_behaves_like 'cachable response' it 'has a Vary on Cookie' do - expect(response.headers['Vary']&.split(',')&.map { |x| x.strip.downcase }).to include('cookie') + expect(response_vary_headers).to include('cookie') end it_behaves_like 'language-dependent' if TestEndpoints::LANGUAGE_DEPENDENT.include?(endpoint) @@ -216,7 +218,7 @@ describe 'Caching behavior' do it_behaves_like 'cachable response' it 'has a Vary on Authorization' do - expect(response.headers['Vary']&.split(',')&.map { |x| x.strip.downcase }).to include('authorization') + expect(response_vary_headers).to include('authorization') end it_behaves_like 'language-dependent' if TestEndpoints::LANGUAGE_DEPENDENT.include?(endpoint) @@ -302,7 +304,7 @@ describe 'Caching behavior' do it_behaves_like 'non-cacheable response' it 'has a Vary on Cookie' do - expect(response.headers['Vary']&.split(',')&.map { |x| x.strip.downcase }).to include('cookie') + expect(response_vary_headers).to include('cookie') end end end @@ -311,11 +313,7 @@ describe 'Caching behavior' do describe endpoint do before { get endpoint } - it_behaves_like 'non-cacheable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'non-cacheable response', http_success: true end end @@ -351,7 +349,7 @@ describe 'Caching behavior' do it_behaves_like 'non-cacheable response' it 'has a Vary on Authorization' do - expect(response.headers['Vary']&.split(',')&.map { |x| x.strip.downcase }).to include('authorization') + expect(response_vary_headers).to include('authorization') end end end @@ -362,11 +360,7 @@ describe 'Caching behavior' do get endpoint, headers: { 'Authorization' => "Bearer #{token.token}" } end - it_behaves_like 'non-cacheable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'non-cacheable response', http_success: true end end @@ -393,11 +387,7 @@ describe 'Caching behavior' do context 'when allowed for local users only' do let(:show_domain_blocks) { 'users' } - it_behaves_like 'non-cacheable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'non-cacheable response', http_success: true end context 'when disabled' do @@ -421,11 +411,7 @@ describe 'Caching behavior' do get '/actor', sign_with: remote_actor, headers: { 'Accept' => 'application/activity+json' } end - it_behaves_like 'cachable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'cachable response', http_success: true end TestEndpoints::REQUIRE_SIGNATURE.each do |endpoint| @@ -434,11 +420,7 @@ describe 'Caching behavior' do get endpoint, sign_with: remote_actor, headers: { 'Accept' => 'application/activity+json' } end - it_behaves_like 'non-cacheable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'non-cacheable response', http_success: true end end end @@ -456,11 +438,7 @@ describe 'Caching behavior' do get '/actor', headers: { 'Accept' => 'application/activity+json' } end - it_behaves_like 'cachable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'cachable response', http_success: true end (TestEndpoints::REQUIRE_SIGNATURE + TestEndpoints::AuthorizedFetch::REQUIRE_SIGNATURE).each do |endpoint| @@ -487,11 +465,7 @@ describe 'Caching behavior' do get '/actor', sign_with: remote_actor, headers: { 'Accept' => 'application/activity+json' } end - it_behaves_like 'cachable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'cachable response', http_success: true end (TestEndpoints::REQUIRE_SIGNATURE + TestEndpoints::AuthorizedFetch::REQUIRE_SIGNATURE).each do |endpoint| @@ -500,11 +474,7 @@ describe 'Caching behavior' do get endpoint, sign_with: remote_actor, headers: { 'Accept' => 'application/activity+json' } end - it_behaves_like 'non-cacheable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'non-cacheable response', http_success: true end end end @@ -528,11 +498,7 @@ describe 'Caching behavior' do get '/actor', headers: { 'Accept' => 'application/activity+json' } end - it_behaves_like 'cachable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'cachable response', http_success: true end (TestEndpoints::REQUIRE_SIGNATURE + TestEndpoints::AuthorizedFetch::REQUIRE_SIGNATURE).each do |endpoint| @@ -560,11 +526,7 @@ describe 'Caching behavior' do get '/actor', sign_with: remote_actor, headers: { 'Accept' => 'application/activity+json' } end - it_behaves_like 'cachable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'cachable response', http_success: true end (TestEndpoints::REQUIRE_SIGNATURE + TestEndpoints::AuthorizedFetch::REQUIRE_SIGNATURE).each do |endpoint| @@ -573,11 +535,7 @@ describe 'Caching behavior' do get endpoint, sign_with: remote_actor, headers: { 'Accept' => 'application/activity+json' } end - it_behaves_like 'non-cacheable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'non-cacheable response', http_success: true end end end @@ -591,11 +549,7 @@ describe 'Caching behavior' do get '/actor', sign_with: remote_actor, headers: { 'Accept' => 'application/activity+json' } end - it_behaves_like 'cachable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'cachable response', http_success: true end (TestEndpoints::REQUIRE_SIGNATURE + TestEndpoints::AuthorizedFetch::REQUIRE_SIGNATURE).each do |endpoint| @@ -667,7 +621,7 @@ describe 'Caching behavior' do it_behaves_like 'non-cacheable response' it 'has a Vary on Authorization' do - expect(response.headers['Vary']&.split(',')&.map { |x| x.strip.downcase }).to include('authorization') + expect(response_vary_headers).to include('authorization') end end end @@ -678,13 +632,15 @@ describe 'Caching behavior' do get endpoint, headers: { 'Authorization' => "Bearer #{token.token}" } end - it_behaves_like 'non-cacheable response' - - it 'returns HTTP success' do - expect(response).to have_http_status(200) - end + it_behaves_like 'non-cacheable response', http_success: true end end end end + + private + + def response_vary_headers + response.headers['Vary']&.split(',')&.map { |x| x.strip.downcase } + end end From 5c328ae674f9df14c2766c74ca276a3c55c2dc4e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 Nov 2023 13:40:09 +0100 Subject: [PATCH 04/24] New Crowdin Translations (automated) (#27768) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/de.json | 2 +- app/javascript/mastodon/locales/he.json | 2 +- app/javascript/mastodon/locales/sk.json | 2 +- config/locales/be.yml | 13 +++++++++++++ config/locales/ko.yml | 2 +- config/locales/sk.yml | 17 ++++++++++------- 6 files changed, 27 insertions(+), 11 deletions(-) diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 3fcab71d70..0b93905816 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -88,7 +88,7 @@ "attachments_list.unprocessed": "(ausstehend)", "audio.hide": "Audio ausblenden", "autosuggest_hashtag.per_week": "{count} pro Woche", - "boost_modal.combo": "Drücke {combo}, um das beim nächsten Mal zu überspringen", + "boost_modal.combo": "Mit {combo} wird dieses Fenster beim nächsten Mal nicht mehr angezeigt", "bundle_column_error.copy_stacktrace": "Fehlerbericht kopieren", "bundle_column_error.error.body": "Die angeforderte Seite konnte nicht dargestellt werden. Dies könnte auf einen Fehler in unserem Code oder auf ein Browser-Kompatibilitätsproblem zurückzuführen sein.", "bundle_column_error.error.title": "Oh nein!", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index ff7e864e5e..13d3239655 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -62,7 +62,7 @@ "account.share": "שתף את הפרופיל של @{name}", "account.show_reblogs": "הצג הדהודים מאת @{name}", "account.statuses_counter": "{count, plural, one {הודעה} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}", - "account.unblock": "הסר את החסימה של @{name}", + "account.unblock": "להסיר חסימה ל- @{name}", "account.unblock_domain": "הסירי את החסימה של קהילת {domain}", "account.unblock_short": "הסר חסימה", "account.unendorse": "אל תקדם בפרופיל", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 60760607f2..f2616b31c4 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -222,7 +222,7 @@ "emoji_button.search_results": "Výsledky hľadania", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", - "empty_column.account_suspended": "Účet bol vylúčený", + "empty_column.account_suspended": "Účet bol pozastavený", "empty_column.account_timeline": "Nie sú tu žiadne príspevky!", "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", diff --git a/config/locales/be.yml b/config/locales/be.yml index 4d8ea3df99..275ef7a82c 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -556,6 +556,7 @@ be: total_reported: Скаргі на іх total_storage: Медыя дадаткі totals_time_period_hint_html: Паказаныя агульныя значэнні ніжэй уключаюць даныя за ўвесь час. + unknown_instance: На дадзены момант няма запісаў аб гэтым дамене на гэтым серверы. invites: deactivate_all: Дэактываваць усё filter: @@ -1076,6 +1077,14 @@ be: hint_html: Засталася яшчэ адна рэч! Каб не дапусціць спаму, нам трэба пацвердзіць, што вы чалавек. Разгадайце CAPTCHA ніжэй і націсніце «Працягнуць». title: Праверка бяспекі confirmations: + awaiting_review: Ваш электронны адрас пацверджаны! Адміністрацыя %{domain} зараз разглядае вашу рэгістрацыю. Вы атрымаеце паведамленне па электроннай пошце, калі ваш уліковы запіс будзе ўхвалены! + awaiting_review_title: Ваша рэгістрацыя разглядаецца + clicking_this_link: націснуць на гэту спасылку + login_link: увайсці + proceed_to_login_html: Цяпер вы можаце перайсці да %{login_link}. + redirect_to_app_html: Вы павінны былі быць перанакіраваны ў праграму %{app_name}. Калі гэтага не адбылося, паспрабуйце %{clicking_this_link} або вярніцеся да праграмы ўручную. + registration_complete: Ваша рэгістрацыя на %{domain} завершана! + welcome_title: Вітаем, %{name}! wrong_email_hint: Калі гэты адрас электроннай пошты памылковы, вы можаце змяніць яго ў наладах уліковага запісу. delete_account: Выдаліць уліковы запіс delete_account_html: Калі вы жадаеце выдаліць ваш уліковы запіс, можаце працягнуць тут. Ад вас будзе запатрабавана пацвярджэнне. @@ -1137,6 +1146,7 @@ be: functional: Ваш уліковы запіс поўнасцю працуе. pending: Ваша заяўка разглядаецца нашым супрацоўнікам. Гэта можа заняць некаторы час. Вы атрымаеце электронны ліст, калі заяўка будзе ўхвалена. redirecting_to: Ваш уліковы запіс неактыўны, бо ў цяперашні час ён перанакіроўваецца на %{acct}. + self_destruct: Паколькі %{domain} зачыняецца, вы атрымаеце толькі абмежаваны доступ да свайго уліковага запісу. view_strikes: Праглядзець мінулыя папярэджанні для вашага ўліковага запісу too_fast: Форма адпраўлена занадта хутка, паспрабуйце яшчэ раз. use_security_key: Выкарыстаеце ключ бяспекі @@ -1622,6 +1632,9 @@ be: over_daily_limit: Вы перавысілі ліміт ў %{limit} запланаваных на сёння допісаў over_total_limit: Вы перавысілі ліміт ў %{limit} запланаваных допісаў too_soon: Запланаваная дата мусіць быць у будучыні + self_destruct: + lead_html: На жаль, дамен %{domain} зачыняецца назаўсёды. Калі ў вас быў уліковы запіс, вы не зможаце працягваць выкарыстоўваць яго, але вы ўсё яшчэ можаце запытаць рэзервовае капіраванне вашых даных. + title: Гэты сервер зачыняецца sessions: activity: Апошняя актыўнасць browser: Браўзер diff --git a/config/locales/ko.yml b/config/locales/ko.yml index dc1b0d1f49..bb2ac37c1d 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1601,7 +1601,7 @@ ko: windows_mobile: 윈도우 모바일 windows_phone: 윈도우 폰 revoke: 삭제 - revoke_success: 세션을 성공적으로 취소하였습니다 + revoke_success: 세션을 성공적으로 삭제하였습니다 title: 세션 view_authentication_history: 내 계정에 대한 인증 이력 보기 settings: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index b3bc8c2dcd..954ef745da 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -98,7 +98,7 @@ sk: disabled: Blokovaný pending: Čakajúci silenced: Obmedzený - suspended: Vylúčený/á + suspended: Pozastavený/á title: Moderácia moderation_notes: Moderátorské poznámky most_recent_activity: Posledná aktivita @@ -149,8 +149,8 @@ sk: statuses: Príspevkov strikes: Predchádzajúce údery subscribe: Odoberaj - suspend: Vylúč - suspended: Vylúčený/á + suspend: Pozastav + suspended: Pozastavený/á suspension_irreversible: Údaje tohto účtu boli nenávratne vymazané. Účet môžete zrušiť, aby sa dal používať, ale neobnovia sa žiadne údaje, ktoré predtým mal. suspension_reversible_hint_html: Účet bol pozastavený a údaje budú úplne odstránené dňa %{date}. Dovtedy je možné účet obnoviť bez akýchkoľvek nepriaznivých účinkov. Ak chcete okamžite odstrániť všetky údaje účtu, môžete tak urobiť nižšie. title: Účty @@ -162,6 +162,7 @@ sk: undo_suspension: Zruš blokovanie unsilenced_msg: Úspešne zrušené obmedzenie účtu %{username} unsubscribe: Prestaň odoberať + unsuspended_msg: "%{username} ov/in účet úspešne spojazdnený" username: Prezývka view_domain: Ukáž súhrn pre doménu warn: Varuj @@ -209,7 +210,7 @@ sk: resolve_report: Vyrieš nahlásený problém sensitive_account: Vynúť všetky médiá na účte ako chúlostivé silence_account: Utíš účet - suspend_account: Vylúč účet + suspend_account: Pozastav účet unassigned_report: Odober priradenie nahlásenia unblock_email_account: Odblokuj emailovú adresu unsilence_account: Zvráť obmedzenie účtu @@ -255,6 +256,7 @@ sk: silence_account_html: "%{name} obmedzil/a účet %{target}" suspend_account_html: "%{name} zablokoval/a účet používateľa %{target}" unassigned_report_html: "%{name} odobral/a report od %{target}" + unsuspend_account_html: "%{name} spojazdnil/a účet %{target}" update_user_role_html: "%{name} zmenil/a rolu pre %{target}" deleted_account: zmazaný účet empty: Žiadne záznamy nenájdené. @@ -341,6 +343,7 @@ sk: confirm_suspension: cancel: Zruš confirm: Vylúč + preamble_html: Chystáš sa vylúčiť %{domain} a jej poddomény. title: Potvrď blokovanie domény %{domain} created_msg: Doména je v štádiu blokovania destroyed_msg: Blokovanie domény bolo zrušené @@ -355,7 +358,7 @@ sk: severity: noop: Nič silence: Obmedz - suspend: Vylúč + suspend: Pozastav title: Nové blokovanie domény not_permitted: Nemáš povolenie na vykonanie tohto kroku obfuscate: Zatemniť názov domény @@ -416,7 +419,7 @@ sk: reject_media: Zamietni médiá reject_reports: Zamietni hlásenia silence: Obmedzená - suspend: Vylúč + suspend: Pozastav policy: Zásady reason: Verejné odôvodnenie title: Zásady o obsahu @@ -537,7 +540,7 @@ sk: statuses: Nahlásený obsah summary: action_preambles: - suspend_html: 'Chystáš sa vylúčiť účet @%{acct}. To urobí:' + suspend_html: 'Chystáš sa pozastaviť účet @%{acct}. To urobí:' actions: delete_html: Vymaž pohoršujúce príspevky mark_as_sensitive_html: Označ médiá pohoršujúcich príspevkov za chúlostivé From c03bd2a238741a012aa4b98dc4902d6cf948ab63 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 8 Nov 2023 07:49:46 -0500 Subject: [PATCH 05/24] Don't stub SUT in `FollowLimitValidator` spec (#27760) --- .../blacklisted_email_validator_spec.rb | 2 +- .../disallowed_hashtags_validator_spec.rb | 2 +- .../validators/follow_limit_validator_spec.rb | 88 ++++++++++++------- spec/validators/poll_validator_spec.rb | 2 +- spec/validators/status_pin_validator_spec.rb | 2 +- 5 files changed, 62 insertions(+), 34 deletions(-) diff --git a/spec/validators/blacklisted_email_validator_spec.rb b/spec/validators/blacklisted_email_validator_spec.rb index bfe2a11a99..6292f0737e 100644 --- a/spec/validators/blacklisted_email_validator_spec.rb +++ b/spec/validators/blacklisted_email_validator_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe BlacklistedEmailValidator, type: :validator do +RSpec.describe BlacklistedEmailValidator do describe '#validate' do subject { described_class.new.validate(user); errors } diff --git a/spec/validators/disallowed_hashtags_validator_spec.rb b/spec/validators/disallowed_hashtags_validator_spec.rb index 7144d28918..570ddb31c2 100644 --- a/spec/validators/disallowed_hashtags_validator_spec.rb +++ b/spec/validators/disallowed_hashtags_validator_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe DisallowedHashtagsValidator, type: :validator do +RSpec.describe DisallowedHashtagsValidator do let(:disallowed_tags) { [] } describe '#validate' do diff --git a/spec/validators/follow_limit_validator_spec.rb b/spec/validators/follow_limit_validator_spec.rb index 86b6511d65..51b0683d27 100644 --- a/spec/validators/follow_limit_validator_spec.rb +++ b/spec/validators/follow_limit_validator_spec.rb @@ -2,48 +2,76 @@ require 'rails_helper' -RSpec.describe FollowLimitValidator, type: :validator do +RSpec.describe FollowLimitValidator do describe '#validate' do - before do - allow_any_instance_of(described_class).to receive(:limit_reached?).with(account) do - limit_reached - end + context 'with a nil account' do + it 'does not add validation errors to base' do + follow = Fabricate.build(:follow, account: nil) - described_class.new.validate(follow) - end + follow.valid? - let(:follow) { instance_double(Follow, account: account, errors: errors) } - let(:errors) { instance_double(ActiveModel::Errors, add: nil) } - let(:account) { instance_double(Account, nil?: _nil, local?: local, following_count: 0, followers_count: 0) } - let(:_nil) { true } - let(:local) { false } - - context 'with follow.account.nil? || !follow.account.local?' do - let(:_nil) { true } - - it 'not calls errors.add' do - expect(errors).to_not have_received(:add).with(:base, any_args) + expect(follow.errors[:base]).to be_empty end end - context 'with !(follow.account.nil? || !follow.account.local?)' do - let(:_nil) { false } - let(:local) { true } + context 'with a non-local account' do + it 'does not add validation errors to base' do + follow = Fabricate.build(:follow, account: Account.new(domain: 'host.example')) - context 'when limit_reached?' do - let(:limit_reached) { true } + follow.valid? - it 'calls errors.add' do - expect(errors).to have_received(:add) - .with(:base, I18n.t('users.follow_limit_reached', limit: FollowLimitValidator::LIMIT)) + expect(follow.errors[:base]).to be_empty + end + end + + context 'with a local account' do + let(:account) { Account.new } + + context 'when the followers count is under the limit' do + before do + allow(account).to receive(:following_count).and_return(described_class::LIMIT - 100) + end + + it 'does not add validation errors to base' do + follow = Fabricate.build(:follow, account: account) + + follow.valid? + + expect(follow.errors[:base]).to be_empty end end - context 'with !limit_reached?' do - let(:limit_reached) { false } + context 'when the following count is over the limit' do + before do + allow(account).to receive(:following_count).and_return(described_class::LIMIT + 100) + end - it 'not calls errors.add' do - expect(errors).to_not have_received(:add).with(:base, any_args) + context 'when the followers count is low' do + before do + allow(account).to receive(:followers_count).and_return(10) + end + + it 'adds validation errors to base' do + follow = Fabricate.build(:follow, account: account) + + follow.valid? + + expect(follow.errors[:base]).to include(I18n.t('users.follow_limit_reached', limit: FollowLimitValidator::LIMIT)) + end + end + + context 'when the followers count is high' do + before do + allow(account).to receive(:followers_count).and_return(100_000) + end + + it 'does not add validation errors to base' do + follow = Fabricate.build(:follow, account: account) + + follow.valid? + + expect(follow.errors[:base]).to be_empty + end end end end diff --git a/spec/validators/poll_validator_spec.rb b/spec/validators/poll_validator_spec.rb index 95feb043db..f2a2534898 100644 --- a/spec/validators/poll_validator_spec.rb +++ b/spec/validators/poll_validator_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe PollValidator, type: :validator do +RSpec.describe PollValidator do describe '#validate' do before do validator.validate(poll) diff --git a/spec/validators/status_pin_validator_spec.rb b/spec/validators/status_pin_validator_spec.rb index e8f8a45434..d5109f990f 100644 --- a/spec/validators/status_pin_validator_spec.rb +++ b/spec/validators/status_pin_validator_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe StatusPinValidator, type: :validator do +RSpec.describe StatusPinValidator do describe '#validate' do before do subject.validate(pin) From ce91d14d48e897a9586e126364e9c3df3f9e2880 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 8 Nov 2023 08:03:44 -0500 Subject: [PATCH 06/24] Fix `Style/WordArray` cop (#27770) --- .rubocop_todo.yml | 2 -- spec/controllers/settings/imports_controller_spec.rb | 2 +- spec/models/form/import_spec.rb | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 36d543b133..4d753a71a0 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -616,5 +616,3 @@ Style/TrailingCommaInHashLiteral: Style/WordArray: Exclude: - 'app/helpers/languages_helper.rb' - - 'spec/controllers/settings/imports_controller_spec.rb' - - 'spec/models/form/import_spec.rb' diff --git a/spec/controllers/settings/imports_controller_spec.rb b/spec/controllers/settings/imports_controller_spec.rb index 35d2f08193..900d0eb90d 100644 --- a/spec/controllers/settings/imports_controller_spec.rb +++ b/spec/controllers/settings/imports_controller_spec.rb @@ -194,7 +194,7 @@ RSpec.describe Settings::ImportsController do let!(:rows) do [ { 'acct' => 'foo@bar' }, - { 'acct' => 'user@bar', 'show_reblogs' => false, 'notify' => true, 'languages' => ['fr', 'de'] }, + { 'acct' => 'user@bar', 'show_reblogs' => false, 'notify' => true, 'languages' => %w(fr de) }, ].map { |data| Fabricate(:bulk_import_row, bulk_import: bulk_import, data: data) } end diff --git a/spec/models/form/import_spec.rb b/spec/models/form/import_spec.rb index 2b70e396b9..872697485e 100644 --- a/spec/models/form/import_spec.rb +++ b/spec/models/form/import_spec.rb @@ -296,7 +296,7 @@ RSpec.describe Form::Import do it_behaves_like 'on successful import', 'following', 'merge', 'following_accounts.csv', [ { 'acct' => 'user@example.com', 'show_reblogs' => true, 'notify' => false, 'languages' => nil }, - { 'acct' => 'user@test.com', 'show_reblogs' => true, 'notify' => true, 'languages' => ['en', 'fr'] }, + { 'acct' => 'user@test.com', 'show_reblogs' => true, 'notify' => true, 'languages' => %w(en fr) }, ] it_behaves_like 'on successful import', 'muting', 'merge', 'muted_accounts.csv', [ From b05575e2425f45bd0b854c850787661a5d43bb98 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 8 Nov 2023 08:04:17 -0500 Subject: [PATCH 07/24] Move RSpec config for streaming/search managers to be near classes (#27761) --- spec/rails_helper.rb | 31 --------------------- spec/support/search_data_manager.rb | 35 ++++++++++++++++++++++++ spec/support/streaming_server_manager.rb | 29 ++++++++++++++++++++ 3 files changed, 64 insertions(+), 31 deletions(-) diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index c2ef3e3159..79f98f2e22 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -11,10 +11,6 @@ if RUN_SYSTEM_SPECS ENV['STREAMING_API_BASE_URL'] = "http://localhost:#{STREAMING_PORT}" end -if RUN_SEARCH_SPECS - # Include any configuration or setups specific to search tests here -end - require File.expand_path('../config/environment', __dir__) abort('The Rails environment is running in production mode!') if Rails.env.production? @@ -35,8 +31,6 @@ Sidekiq.logger = nil # System tests config DatabaseCleaner.strategy = [:deletion] -streaming_server_manager = StreamingServerManager.new -search_data_manager = SearchDataManager.new Devise::Test::ControllerHelpers.module_eval do alias_method :original_sign_in, :sign_in @@ -100,26 +94,7 @@ RSpec.configure do |config| Capybara.current_driver = :rack_test end - config.before :suite do - if RUN_SYSTEM_SPECS - Webpacker.compile - streaming_server_manager.start(port: STREAMING_PORT) - end - - if RUN_SEARCH_SPECS - Chewy.strategy(:urgent) - search_data_manager.prepare_test_data - end - end - - config.after :suite do - streaming_server_manager.stop - - search_data_manager.cleanup_test_data if RUN_SEARCH_SPECS - end - config.around :each, type: :system do |example| - # driven_by :selenium, using: :chrome, screen_size: [1600, 1200] driven_by :selenium, using: :headless_chrome, screen_size: [1600, 1200] # The streaming server needs access to the database @@ -136,12 +111,6 @@ RSpec.configure do |config| self.use_transactional_tests = true end - config.around :each, type: :search do |example| - search_data_manager.populate_indexes - example.run - search_data_manager.remove_indexes - end - config.before do |example| unless example.metadata[:paperclip_processing] allow_any_instance_of(Paperclip::Attachment).to receive(:post_process).and_return(true) # rubocop:disable RSpec/AnyInstance diff --git a/spec/support/search_data_manager.rb b/spec/support/search_data_manager.rb index 24c95ae069..176a674adf 100644 --- a/spec/support/search_data_manager.rb +++ b/spec/support/search_data_manager.rb @@ -41,3 +41,38 @@ class SearchDataManager Tag.destroy_all end end + +RSpec.configure do |config| + config.before :suite do + if search_examples_present? + # Configure chewy to use `urgent` strategy to index documents + Chewy.strategy(:urgent) + + # Create search data + search_data_manager.prepare_test_data + end + end + + config.after :suite do + if search_examples_present? + # Clean up after search data + search_data_manager.cleanup_test_data + end + end + + config.around :each, type: :search do |example| + search_data_manager.populate_indexes + example.run + search_data_manager.remove_indexes + end + + private + + def search_data_manager + @search_data_manager ||= SearchDataManager.new + end + + def search_examples_present? + RUN_SEARCH_SPECS + end +end diff --git a/spec/support/streaming_server_manager.rb b/spec/support/streaming_server_manager.rb index 93e1a6d17f..2c535767e2 100644 --- a/spec/support/streaming_server_manager.rb +++ b/spec/support/streaming_server_manager.rb @@ -76,3 +76,32 @@ class StreamingServerManager @running_thread.join end end + +RSpec.configure do |config| + config.before :suite do + if streaming_examples_present? + # Compile assets + Webpacker.compile + + # Start the node streaming server + streaming_server_manager.start(port: STREAMING_PORT) + end + end + + config.after :suite do + if streaming_examples_present? + # Stop the node streaming server + streaming_server_manager.stop + end + end + + private + + def streaming_server_manager + @streaming_server_manager ||= StreamingServerManager.new + end + + def streaming_examples_present? + RUN_SYSTEM_SPECS + end +end From 13c3e59601683d5a5d57f9f2c0238a9ade0a1ad1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 8 Nov 2023 08:04:52 -0500 Subject: [PATCH 08/24] Use helper method to build batched status edits in `admin/statuses/show` (#27739) --- app/controllers/admin/statuses_controller.rb | 5 +++++ app/views/admin/statuses/show.html.haml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/statuses_controller.rb b/app/controllers/admin/statuses_controller.rb index b80cd20f56..5712dea888 100644 --- a/app/controllers/admin/statuses_controller.rb +++ b/app/controllers/admin/statuses_controller.rb @@ -31,6 +31,11 @@ module Admin private + def batched_ordered_status_edits + @status.edits.reorder(nil).includes(:account, status: [:account]).find_each(order: :asc) + end + helper_method :batched_ordered_status_edits + def admin_status_batch_action_params params.require(:admin_status_batch_action).permit(status_ids: []) end diff --git a/app/views/admin/statuses/show.html.haml b/app/views/admin/statuses/show.html.haml index 7067c45dc7..0e88624def 100644 --- a/app/views/admin/statuses/show.html.haml +++ b/app/views/admin/statuses/show.html.haml @@ -47,7 +47,7 @@ %h3= t('admin.statuses.history') %ol.history - - @status.edits.reorder(nil).includes(:account, status: [:account]).find_each(order: :asc).with_index do |status_edit, i| + - batched_ordered_status_edits.with_index do |status_edit, i| %li .history__entry %h5 From c73d5a6075d6a6ef9cbfc84e34015603d5126982 Mon Sep 17 00:00:00 2001 From: Jaehong Kang Date: Wed, 8 Nov 2023 22:15:43 +0900 Subject: [PATCH 09/24] Using Sidekiq concurrency for default db pool value (#26488) --- config/database.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/database.yml b/config/database.yml index b995f23178..2898415d80 100644 --- a/config/database.yml +++ b/config/database.yml @@ -1,6 +1,6 @@ default: &default adapter: postgresql - pool: <%= ENV["DB_POOL"] || ENV['MAX_THREADS'] || 5 %> + pool: <%= ENV["DB_POOL"] || (if Sidekiq.server? then Sidekiq[:concurrency] else ENV['MAX_THREADS'] end) || 5 %> timeout: 5000 connect_timeout: 15 encoding: unicode From 4329616c53c8fdcc3e3cc7e0e27f8292e5386f31 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 8 Nov 2023 09:43:17 -0500 Subject: [PATCH 10/24] Ignore block result of `send` method and remove `rubocop:disable` in deepl spec (#27741) --- spec/lib/translation_service/deepl_spec.rb | 43 +++++++++++----------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/spec/lib/translation_service/deepl_spec.rb b/spec/lib/translation_service/deepl_spec.rb index 5a1d0f094a..4797a3dc63 100644 --- a/spec/lib/translation_service/deepl_spec.rb +++ b/spec/lib/translation_service/deepl_spec.rb @@ -8,12 +8,14 @@ RSpec.describe TranslationService::DeepL do let(:plan) { 'advanced' } before do - stub_request(:get, 'https://api.deepl.com/v2/languages?type=source').to_return( - body: '[{"language":"EN","name":"English"},{"language":"UK","name":"Ukrainian"}]' - ) - stub_request(:get, 'https://api.deepl.com/v2/languages?type=target').to_return( - body: '[{"language":"EN-GB","name":"English (British)"},{"language":"ZH","name":"Chinese"}]' - ) + %w(api-free.deepl.com api.deepl.com).each do |host| + stub_request(:get, "https://#{host}/v2/languages?type=source").to_return( + body: '[{"language":"EN","name":"English"},{"language":"UK","name":"Ukrainian"}]' + ) + stub_request(:get, "https://#{host}/v2/languages?type=target").to_return( + body: '[{"language":"EN-GB","name":"English (British)"},{"language":"ZH","name":"Chinese"}]' + ) + end end describe '#translate' do @@ -73,28 +75,25 @@ RSpec.describe TranslationService::DeepL do end end - describe '#request' do + describe 'the paid and free plan api hostnames' do before do - stub_request(:any, //) - # rubocop:disable Lint/EmptyBlock - service.send(:request, :get, '/v2/languages') { |res| } - # rubocop:enable Lint/EmptyBlock + service.languages end - it 'uses paid plan base URL' do - expect(a_request(:get, 'https://api.deepl.com/v2/languages')).to have_been_made.once - end - - context 'with free plan' do - let(:plan) { 'free' } - - it 'uses free plan base URL' do - expect(a_request(:get, 'https://api-free.deepl.com/v2/languages')).to have_been_made.once + context 'without a plan set' do + it 'uses paid plan base URL and sends an API key' do + expect(a_request(:get, 'https://api.deepl.com/v2/languages?type=source').with(headers: { Authorization: 'DeepL-Auth-Key my-api-key' })).to have_been_made.once + expect(a_request(:get, 'https://api.deepl.com/v2/languages?type=target').with(headers: { Authorization: 'DeepL-Auth-Key my-api-key' })).to have_been_made.once end end - it 'sends API key' do - expect(a_request(:get, 'https://api.deepl.com/v2/languages').with(headers: { Authorization: 'DeepL-Auth-Key my-api-key' })).to have_been_made.once + context 'with the free plan' do + let(:plan) { 'free' } + + it 'uses free plan base URL and sends an API key' do + expect(a_request(:get, 'https://api-free.deepl.com/v2/languages?type=source').with(headers: { Authorization: 'DeepL-Auth-Key my-api-key' })).to have_been_made.once + expect(a_request(:get, 'https://api-free.deepl.com/v2/languages?type=target').with(headers: { Authorization: 'DeepL-Auth-Key my-api-key' })).to have_been_made.once + end end end end From 69d00e272188b9f06bc0323cda248a4f7d37d0bd Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 8 Nov 2023 10:42:30 -0500 Subject: [PATCH 11/24] Fix `RSpec/InstanceVariable` cop (#27766) --- .rubocop_todo.yml | 20 -------- .../api/v1/streaming_controller_spec.rb | 9 +++- .../auth/passwords_controller_spec.rb | 16 +++--- .../export_controller_concern_spec.rb | 4 +- .../statuses_cleanup_controller_spec.rb | 11 +++-- .../concerns/account_finder_concern_spec.rb | 20 +++----- .../concerns/account_interactions_spec.rb | 18 +++---- spec/models/public_feed_spec.rb | 20 ++++---- spec/services/remove_status_service_spec.rb | 49 +++++++++---------- spec/services/search_service_spec.rb | 16 +++--- spec/services/unblock_domain_service_spec.rb | 38 +++++++------- 11 files changed, 97 insertions(+), 124 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 4d753a71a0..a59f65519d 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -71,26 +71,6 @@ RSpec/AnyInstance: RSpec/ExampleLength: Max: 22 -# Configuration parameters: AssignmentOnly. -RSpec/InstanceVariable: - Exclude: - - 'spec/controllers/api/v1/streaming_controller_spec.rb' - - 'spec/controllers/auth/confirmations_controller_spec.rb' - - 'spec/controllers/auth/passwords_controller_spec.rb' - - 'spec/controllers/auth/sessions_controller_spec.rb' - - 'spec/controllers/concerns/export_controller_concern_spec.rb' - - 'spec/controllers/home_controller_spec.rb' - - 'spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb' - - 'spec/controllers/statuses_cleanup_controller_spec.rb' - - 'spec/models/concerns/account_finder_concern_spec.rb' - - 'spec/models/concerns/account_interactions_spec.rb' - - 'spec/models/public_feed_spec.rb' - - 'spec/serializers/activitypub/note_serializer_spec.rb' - - 'spec/serializers/activitypub/update_poll_serializer_spec.rb' - - 'spec/services/remove_status_service_spec.rb' - - 'spec/services/search_service_spec.rb' - - 'spec/services/unblock_domain_service_spec.rb' - RSpec/LetSetup: Exclude: - 'spec/controllers/api/v1/accounts/statuses_controller_spec.rb' diff --git a/spec/controllers/api/v1/streaming_controller_spec.rb b/spec/controllers/api/v1/streaming_controller_spec.rb index 06639a13fd..c3e7153ce8 100644 --- a/spec/controllers/api/v1/streaming_controller_spec.rb +++ b/spec/controllers/api/v1/streaming_controller_spec.rb @@ -26,7 +26,6 @@ describe Api::V1::StreamingController do context 'with streaming api on different host' do before do Rails.configuration.x.streaming_api_base_url = "wss://streaming-#{Rails.configuration.x.web_domain}" - @streaming_host = URI.parse(Rails.configuration.x.streaming_api_base_url).host end describe 'GET #index' do @@ -38,7 +37,13 @@ describe Api::V1::StreamingController do [:scheme, :path, :query, :fragment].each do |part| expect(redirect_to_uri.send(part)).to eq(request_uri.send(part)), "redirect target #{part}" end - expect(redirect_to_uri.host).to eq(@streaming_host), 'redirect target host' + expect(redirect_to_uri.host).to eq(streaming_host), 'redirect target host' + end + + private + + def streaming_host + URI.parse(Rails.configuration.x.streaming_api_base_url).host end end end diff --git a/spec/controllers/auth/passwords_controller_spec.rb b/spec/controllers/auth/passwords_controller_spec.rb index ef5706ee78..e7f7ab4676 100644 --- a/spec/controllers/auth/passwords_controller_spec.rb +++ b/spec/controllers/auth/passwords_controller_spec.rb @@ -18,12 +18,14 @@ describe Auth::PasswordsController do before do request.env['devise.mapping'] = Devise.mappings[:user] - @token = user.send_reset_password_instructions end context 'with valid reset_password_token' do it 'returns http success' do - get :edit, params: { reset_password_token: @token } + token = user.send_reset_password_instructions + + get :edit, params: { reset_password_token: token } + expect(response).to have_http_status(200) end end @@ -38,9 +40,9 @@ describe Auth::PasswordsController do describe 'POST #update' do let(:user) { Fabricate(:user) } + let(:password) { 'reset0password' } before do - @password = 'reset0password' request.env['devise.mapping'] = Devise.mappings[:user] end @@ -50,9 +52,9 @@ describe Auth::PasswordsController do let!(:web_push_subscription) { Fabricate(:web_push_subscription, access_token: access_token) } before do - @token = user.send_reset_password_instructions + token = user.send_reset_password_instructions - post :update, params: { user: { password: @password, password_confirmation: @password, reset_password_token: @token } } + post :update, params: { user: { password: password, password_confirmation: password, reset_password_token: token } } end it 'redirect to sign in' do @@ -63,7 +65,7 @@ describe Auth::PasswordsController do this_user = User.find(user.id) expect(this_user).to_not be_nil - expect(this_user.valid_password?(@password)).to be true + expect(this_user.valid_password?(password)).to be true end it 'deactivates all sessions' do @@ -81,7 +83,7 @@ describe Auth::PasswordsController do context 'with invalid reset_password_token' do before do - post :update, params: { user: { password: @password, password_confirmation: @password, reset_password_token: 'some_invalid_value' } } + post :update, params: { user: { password: password, password_confirmation: password, reset_password_token: 'some_invalid_value' } } end it 'renders reset password' do diff --git a/spec/controllers/concerns/export_controller_concern_spec.rb b/spec/controllers/concerns/export_controller_concern_spec.rb index e253aa5206..7f0a7c5b54 100644 --- a/spec/controllers/concerns/export_controller_concern_spec.rb +++ b/spec/controllers/concerns/export_controller_concern_spec.rb @@ -11,7 +11,7 @@ describe ExportControllerConcern do end def export_data - @export.account.username + 'body data value' end end @@ -24,7 +24,7 @@ describe ExportControllerConcern do expect(response).to have_http_status(200) expect(response.media_type).to eq 'text/csv' expect(response.headers['Content-Disposition']).to start_with 'attachment; filename="anonymous.csv"' - expect(response.body).to eq user.account.username + expect(response.body).to eq 'body data value' end it 'returns unauthorized when not signed in' do diff --git a/spec/controllers/statuses_cleanup_controller_spec.rb b/spec/controllers/statuses_cleanup_controller_spec.rb index e082b69c51..8a72621993 100644 --- a/spec/controllers/statuses_cleanup_controller_spec.rb +++ b/spec/controllers/statuses_cleanup_controller_spec.rb @@ -5,9 +5,10 @@ require 'rails_helper' RSpec.describe StatusesCleanupController do render_views + let!(:user) { Fabricate(:user) } + before do - @user = Fabricate(:user) - sign_in @user, scope: :user + sign_in user, scope: :user end describe 'GET #show' do @@ -30,9 +31,9 @@ RSpec.describe StatusesCleanupController do end it 'updates the account status cleanup policy' do - expect(@user.account.statuses_cleanup_policy.enabled).to be true - expect(@user.account.statuses_cleanup_policy.keep_direct).to be false - expect(@user.account.statuses_cleanup_policy.keep_polls).to be true + expect(user.account.statuses_cleanup_policy.enabled).to be true + expect(user.account.statuses_cleanup_policy.keep_direct).to be false + expect(user.account.statuses_cleanup_policy.keep_polls).to be true end it 'redirects' do diff --git a/spec/models/concerns/account_finder_concern_spec.rb b/spec/models/concerns/account_finder_concern_spec.rb index 25f4fdec4b..3a94c4d545 100644 --- a/spec/models/concerns/account_finder_concern_spec.rb +++ b/spec/models/concerns/account_finder_concern_spec.rb @@ -4,17 +4,15 @@ require 'rails_helper' describe AccountFinderConcern do describe 'local finders' do - before do - @account = Fabricate(:account, username: 'Alice') - end + let!(:account) { Fabricate(:account, username: 'Alice') } describe '.find_local' do it 'returns case-insensitive result' do - expect(Account.find_local('alice')).to eq(@account) + expect(Account.find_local('alice')).to eq(account) end it 'returns correctly cased result' do - expect(Account.find_local('Alice')).to eq(@account) + expect(Account.find_local('Alice')).to eq(account) end it 'returns nil without a match' do @@ -36,7 +34,7 @@ describe AccountFinderConcern do describe '.find_local!' do it 'returns matching result' do - expect(Account.find_local!('alice')).to eq(@account) + expect(Account.find_local!('alice')).to eq(account) end it 'raises on non-matching result' do @@ -54,17 +52,15 @@ describe AccountFinderConcern do end describe 'remote finders' do - before do - @account = Fabricate(:account, username: 'Alice', domain: 'mastodon.social') - end + let!(:account) { Fabricate(:account, username: 'Alice', domain: 'mastodon.social') } describe '.find_remote' do it 'returns exact match result' do - expect(Account.find_remote('alice', 'mastodon.social')).to eq(@account) + expect(Account.find_remote('alice', 'mastodon.social')).to eq(account) end it 'returns case-insensitive result' do - expect(Account.find_remote('ALICE', 'MASTODON.SOCIAL')).to eq(@account) + expect(Account.find_remote('ALICE', 'MASTODON.SOCIAL')).to eq(account) end it 'returns nil when username does not match' do @@ -90,7 +86,7 @@ describe AccountFinderConcern do describe '.find_remote!' do it 'returns matching result' do - expect(Account.find_remote!('alice', 'mastodon.social')).to eq(@account) + expect(Account.find_remote!('alice', 'mastodon.social')).to eq(account) end it 'raises on non-matching result' do diff --git a/spec/models/concerns/account_interactions_spec.rb b/spec/models/concerns/account_interactions_spec.rb index 84e2c91a85..6687c84436 100644 --- a/spec/models/concerns/account_interactions_spec.rb +++ b/spec/models/concerns/account_interactions_spec.rb @@ -648,38 +648,36 @@ describe AccountInteractions do end describe 'ignoring reblogs from an account' do - before do - @me = Fabricate(:account, username: 'Me') - @you = Fabricate(:account, username: 'You') - end + let!(:me) { Fabricate(:account, username: 'Me') } + let!(:you) { Fabricate(:account, username: 'You') } context 'with the reblogs option unspecified' do before do - @me.follow!(@you) + me.follow!(you) end it 'defaults to showing reblogs' do - expect(@me.muting_reblogs?(@you)).to be(false) + expect(me.muting_reblogs?(you)).to be(false) end end context 'with the reblogs option set to false' do before do - @me.follow!(@you, reblogs: false) + me.follow!(you, reblogs: false) end it 'does mute reblogs' do - expect(@me.muting_reblogs?(@you)).to be(true) + expect(me.muting_reblogs?(you)).to be(true) end end context 'with the reblogs option set to true' do before do - @me.follow!(@you, reblogs: true) + me.follow!(you, reblogs: true) end it 'does not mute reblogs' do - expect(@me.muting_reblogs?(@you)).to be(false) + expect(me.muting_reblogs?(you)).to be(false) end end end diff --git a/spec/models/public_feed_spec.rb b/spec/models/public_feed_spec.rb index 53e01cafd3..20fcdb0024 100644 --- a/spec/models/public_feed_spec.rb +++ b/spec/models/public_feed_spec.rb @@ -137,15 +137,13 @@ RSpec.describe PublicFeed do end describe 'with an account passed in' do - subject { described_class.new(@account).get(20).map(&:id) } + subject { described_class.new(account).get(20).map(&:id) } - before do - @account = Fabricate(:account) - end + let!(:account) { Fabricate(:account) } it 'excludes statuses from accounts blocked by the account' do blocked = Fabricate(:account) - @account.block!(blocked) + account.block!(blocked) blocked_status = Fabricate(:status, account: blocked) expect(subject).to_not include(blocked_status.id) @@ -153,7 +151,7 @@ RSpec.describe PublicFeed do it 'excludes statuses from accounts who have blocked the account' do blocker = Fabricate(:account) - blocker.block!(@account) + blocker.block!(account) blocked_status = Fabricate(:status, account: blocker) expect(subject).to_not include(blocked_status.id) @@ -161,7 +159,7 @@ RSpec.describe PublicFeed do it 'excludes statuses from accounts muted by the account' do muted = Fabricate(:account) - @account.mute!(muted) + account.mute!(muted) muted_status = Fabricate(:status, account: muted) expect(subject).to_not include(muted_status.id) @@ -169,7 +167,7 @@ RSpec.describe PublicFeed do it 'excludes statuses from accounts from personally blocked domains' do blocked = Fabricate(:account, domain: 'example.com') - @account.block_domain!(blocked.domain) + account.block_domain!(blocked.domain) blocked_status = Fabricate(:status, account: blocked) expect(subject).to_not include(blocked_status.id) @@ -177,7 +175,7 @@ RSpec.describe PublicFeed do context 'with language preferences' do it 'excludes statuses in languages not allowed by the account user' do - @account.user.update(chosen_languages: [:en, :es]) + account.user.update(chosen_languages: [:en, :es]) en_status = Fabricate(:status, language: 'en') es_status = Fabricate(:status, language: 'es') fr_status = Fabricate(:status, language: 'fr') @@ -188,7 +186,7 @@ RSpec.describe PublicFeed do end it 'includes all languages when user does not have a setting' do - @account.user.update(chosen_languages: nil) + account.user.update(chosen_languages: nil) en_status = Fabricate(:status, language: 'en') es_status = Fabricate(:status, language: 'es') @@ -198,7 +196,7 @@ RSpec.describe PublicFeed do end it 'includes all languages when account does not have a user' do - @account.update(user: nil) + account.update(user: nil) en_status = Fabricate(:status, language: 'en') es_status = Fabricate(:status, language: 'es') diff --git a/spec/services/remove_status_service_spec.rb b/spec/services/remove_status_service_spec.rb index c19b4fac15..7754ae8004 100644 --- a/spec/services/remove_status_service_spec.rb +++ b/spec/services/remove_status_service_spec.rb @@ -20,71 +20,70 @@ RSpec.describe RemoveStatusService, type: :service do end context 'when removed status is not a reblog' do + let!(:status) { PostStatusService.new.call(alice, text: 'Hello @bob@example.com ThisIsASecret') } + before do - @status = PostStatusService.new.call(alice, text: 'Hello @bob@example.com ThisIsASecret') - FavouriteService.new.call(jeff, @status) - Fabricate(:status, account: bill, reblog: @status, uri: 'hoge') + FavouriteService.new.call(jeff, status) + Fabricate(:status, account: bill, reblog: status, uri: 'hoge') end it 'removes status from author\'s home feed' do - subject.call(@status) - expect(HomeFeed.new(alice).get(10).pluck(:id)).to_not include(@status.id) + subject.call(status) + expect(HomeFeed.new(alice).get(10).pluck(:id)).to_not include(status.id) end it 'removes status from local follower\'s home feed' do - subject.call(@status) - expect(HomeFeed.new(jeff).get(10).pluck(:id)).to_not include(@status.id) + subject.call(status) + expect(HomeFeed.new(jeff).get(10).pluck(:id)).to_not include(status.id) end it 'sends Delete activity to followers' do - subject.call(@status) + subject.call(status) expect(a_request(:post, 'http://example.com/inbox').with( body: hash_including({ 'type' => 'Delete', 'object' => { 'type' => 'Tombstone', - 'id' => ActivityPub::TagManager.instance.uri_for(@status), - 'atomUri' => OStatus::TagManager.instance.uri_for(@status), + 'id' => ActivityPub::TagManager.instance.uri_for(status), + 'atomUri' => OStatus::TagManager.instance.uri_for(status), }, }) )).to have_been_made.once end it 'sends Delete activity to rebloggers' do - subject.call(@status) + subject.call(status) expect(a_request(:post, 'http://example2.com/inbox').with( body: hash_including({ 'type' => 'Delete', 'object' => { 'type' => 'Tombstone', - 'id' => ActivityPub::TagManager.instance.uri_for(@status), - 'atomUri' => OStatus::TagManager.instance.uri_for(@status), + 'id' => ActivityPub::TagManager.instance.uri_for(status), + 'atomUri' => OStatus::TagManager.instance.uri_for(status), }, }) )).to have_been_made.once end it 'remove status from notifications' do - expect { subject.call(@status) }.to change { + expect { subject.call(status) }.to change { Notification.where(activity_type: 'Favourite', from_account: jeff, account: alice).count }.from(1).to(0) end end context 'when removed status is a private self-reblog' do - before do - @original_status = Fabricate(:status, account: alice, text: 'Hello ThisIsASecret', visibility: :private) - @status = ReblogService.new.call(alice, @original_status) - end + let!(:original_status) { Fabricate(:status, account: alice, text: 'Hello ThisIsASecret', visibility: :private) } + let!(:status) { ReblogService.new.call(alice, original_status) } it 'sends Undo activity to followers' do - subject.call(@status) + subject.call(status) expect(a_request(:post, 'http://example.com/inbox').with( body: hash_including({ 'type' => 'Undo', 'object' => hash_including({ 'type' => 'Announce', - 'object' => ActivityPub::TagManager.instance.uri_for(@original_status), + 'object' => ActivityPub::TagManager.instance.uri_for(original_status), }), }) )).to have_been_made.once @@ -92,19 +91,17 @@ RSpec.describe RemoveStatusService, type: :service do end context 'when removed status is public self-reblog' do - before do - @original_status = Fabricate(:status, account: alice, text: 'Hello ThisIsASecret', visibility: :public) - @status = ReblogService.new.call(alice, @original_status) - end + let!(:original_status) { Fabricate(:status, account: alice, text: 'Hello ThisIsASecret', visibility: :public) } + let!(:status) { ReblogService.new.call(alice, original_status) } it 'sends Undo activity to followers' do - subject.call(@status) + subject.call(status) expect(a_request(:post, 'http://example.com/inbox').with( body: hash_including({ 'type' => 'Undo', 'object' => hash_including({ 'type' => 'Announce', - 'object' => ActivityPub::TagManager.instance.uri_for(@original_status), + 'object' => ActivityPub::TagManager.instance.uri_for(original_status), }), }) )).to have_been_made.once diff --git a/spec/services/search_service_spec.rb b/spec/services/search_service_spec.rb index cb69af5f54..39adf43876 100644 --- a/spec/services/search_service_spec.rb +++ b/spec/services/search_service_spec.rb @@ -19,17 +19,15 @@ describe SearchService, type: :service do end describe 'with an url query' do - before do - @query = 'http://test.host/query' - end + let(:query) { 'http://test.host/query' } context 'when it does not find anything' do it 'returns the empty results' do service = instance_double(ResolveURLService, call: nil) allow(ResolveURLService).to receive(:new).and_return(service) - results = subject.call(@query, nil, 10, resolve: true) + results = subject.call(query, nil, 10, resolve: true) - expect(service).to have_received(:call).with(@query, on_behalf_of: nil) + expect(service).to have_received(:call).with(query, on_behalf_of: nil) expect(results).to eq empty_results end end @@ -40,8 +38,8 @@ describe SearchService, type: :service do service = instance_double(ResolveURLService, call: account) allow(ResolveURLService).to receive(:new).and_return(service) - results = subject.call(@query, nil, 10, resolve: true) - expect(service).to have_received(:call).with(@query, on_behalf_of: nil) + results = subject.call(query, nil, 10, resolve: true) + expect(service).to have_received(:call).with(query, on_behalf_of: nil) expect(results).to eq empty_results.merge(accounts: [account]) end end @@ -52,8 +50,8 @@ describe SearchService, type: :service do service = instance_double(ResolveURLService, call: status) allow(ResolveURLService).to receive(:new).and_return(service) - results = subject.call(@query, nil, 10, resolve: true) - expect(service).to have_received(:call).with(@query, on_behalf_of: nil) + results = subject.call(query, nil, 10, resolve: true) + expect(service).to have_received(:call).with(query, on_behalf_of: nil) expect(results).to eq empty_results.merge(statuses: [status]) end end diff --git a/spec/services/unblock_domain_service_spec.rb b/spec/services/unblock_domain_service_spec.rb index 27dbc92ada..3d6d82ff68 100644 --- a/spec/services/unblock_domain_service_spec.rb +++ b/spec/services/unblock_domain_service_spec.rb @@ -6,38 +6,36 @@ describe UnblockDomainService, type: :service do subject { described_class.new } describe 'call' do - before do - @independently_suspended = Fabricate(:account, domain: 'example.com', suspended_at: 1.hour.ago) - @independently_silenced = Fabricate(:account, domain: 'example.com', silenced_at: 1.hour.ago) - @domain_block = Fabricate(:domain_block, domain: 'example.com') - @silenced = Fabricate(:account, domain: 'example.com', silenced_at: @domain_block.created_at) - @suspended = Fabricate(:account, domain: 'example.com', suspended_at: @domain_block.created_at) - end + let!(:independently_suspended) { Fabricate(:account, domain: 'example.com', suspended_at: 1.hour.ago) } + let!(:independently_silenced) { Fabricate(:account, domain: 'example.com', silenced_at: 1.hour.ago) } + let!(:domain_block) { Fabricate(:domain_block, domain: 'example.com') } + let!(:silenced) { Fabricate(:account, domain: 'example.com', silenced_at: domain_block.created_at) } + let!(:suspended) { Fabricate(:account, domain: 'example.com', suspended_at: domain_block.created_at) } it 'unsilences accounts and removes block' do - @domain_block.update(severity: :silence) + domain_block.update(severity: :silence) - subject.call(@domain_block) + subject.call(domain_block) expect_deleted_domain_block - expect(@silenced.reload.silenced?).to be false - expect(@suspended.reload.suspended?).to be true - expect(@independently_suspended.reload.suspended?).to be true - expect(@independently_silenced.reload.silenced?).to be true + expect(silenced.reload.silenced?).to be false + expect(suspended.reload.suspended?).to be true + expect(independently_suspended.reload.suspended?).to be true + expect(independently_silenced.reload.silenced?).to be true end it 'unsuspends accounts and removes block' do - @domain_block.update(severity: :suspend) + domain_block.update(severity: :suspend) - subject.call(@domain_block) + subject.call(domain_block) expect_deleted_domain_block - expect(@suspended.reload.suspended?).to be false - expect(@silenced.reload.silenced?).to be false - expect(@independently_suspended.reload.suspended?).to be true - expect(@independently_silenced.reload.silenced?).to be true + expect(suspended.reload.suspended?).to be false + expect(silenced.reload.silenced?).to be false + expect(independently_suspended.reload.suspended?).to be true + expect(independently_silenced.reload.silenced?).to be true end end def expect_deleted_domain_block - expect { @domain_block.reload }.to raise_error(ActiveRecord::RecordNotFound) + expect { domain_block.reload }.to raise_error(ActiveRecord::RecordNotFound) end end From 5af47fbff829ea8e5e7b42700cb540c3ec2ab5fa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Nov 2023 10:06:57 +0100 Subject: [PATCH 12/24] Update dependency fog-openstack to v1 (#25968) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 20 +++++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Gemfile b/Gemfile index 700f410653..039e136754 100644 --- a/Gemfile +++ b/Gemfile @@ -16,7 +16,7 @@ gem 'dotenv-rails', '~> 2.8' gem 'aws-sdk-s3', '~> 1.123', require: false gem 'fog-core', '<= 2.4.0' -gem 'fog-openstack', '~> 0.3', require: false +gem 'fog-openstack', '~> 1.0', require: false gem 'kt-paperclip', '~> 7.2' gem 'md-paperclip-azure', '~> 2.2', require: false gem 'blurhash', '~> 0.1' diff --git a/Gemfile.lock b/Gemfile.lock index 64d0a2d844..83693812fa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -263,7 +263,7 @@ GEM erubi (1.12.0) et-orbi (1.2.7) tzinfo - excon (0.100.0) + excon (0.104.0) fabrication (2.30.0) faker (3.2.2) i18n (>= 1.8.11, < 2) @@ -298,19 +298,18 @@ GEM ffi-compiler (1.0.1) ffi (>= 1.0.0) rake - fog-core (2.1.0) + fog-core (2.3.0) builder - excon (~> 0.58) - formatador (~> 0.2) + excon (~> 0.71) + formatador (>= 0.2, < 2.0) mime-types fog-json (1.2.0) fog-core multi_json (~> 1.10) - fog-openstack (0.3.10) - fog-core (>= 1.45, <= 2.1.0) + fog-openstack (1.1.0) + fog-core (~> 2.1) fog-json (>= 1.0) - ipaddress (>= 0.8) - formatador (0.3.0) + formatador (1.1.0) fugit (1.8.1) et-orbi (~> 1, >= 1.2.7) raabro (~> 1.4) @@ -370,7 +369,6 @@ GEM terminal-table (>= 1.5.1) idn-ruby (0.1.5) io-console (0.6.0) - ipaddress (0.8.3) irb (1.8.1) rdoc reline (>= 0.3.8) @@ -452,7 +450,7 @@ GEM memory_profiler (1.0.1) mime-types (3.5.1) mime-types-data (~> 3.2015) - mime-types-data (3.2023.0808) + mime-types-data (3.2023.1003) mini_mime (1.1.5) mini_portile2 (2.8.5) minitest (5.20.0) @@ -858,7 +856,7 @@ DEPENDENCIES fast_blank (~> 1.0) fastimage fog-core (<= 2.4.0) - fog-openstack (~> 0.3) + fog-openstack (~> 1.0) fuubar (~> 2.5) haml-rails (~> 2.0) haml_lint From c875dfc90b82358bd936e979ce313d62a7c7a730 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 9 Nov 2023 04:43:26 -0500 Subject: [PATCH 13/24] Fix `Lint/UnusedBlockArgument` cop (#27777) --- .rubocop_todo.yml | 9 --------- config/initializers/content_security_policy.rb | 4 ++-- config/initializers/doorkeeper.rb | 2 +- config/initializers/paperclip.rb | 4 ++-- config/initializers/simple_form.rb | 2 +- 5 files changed, 6 insertions(+), 15 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index a59f65519d..0e416482e7 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -24,15 +24,6 @@ Lint/NonLocalExitFromIterator: Exclude: - 'app/helpers/jsonld_helper.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments. -Lint/UnusedBlockArgument: - Exclude: - - 'config/initializers/content_security_policy.rb' - - 'config/initializers/doorkeeper.rb' - - 'config/initializers/paperclip.rb' - - 'config/initializers/simple_form.rb' - # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes. Metrics/AbcSize: Max: 144 diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index f728acfd36..3fb80bac49 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -67,7 +67,7 @@ end # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only # Rails.application.config.content_security_policy_report_only = true -Rails.application.config.content_security_policy_nonce_generator = ->(request) { SecureRandom.base64(16) } +Rails.application.config.content_security_policy_nonce_generator = ->(_request) { SecureRandom.base64(16) } Rails.application.config.content_security_policy_nonce_directives = %w(style-src) @@ -92,7 +92,7 @@ Rails.application.reloader.to_prepare do p.worker_src :none end - LetterOpenerWeb::LettersController.after_action do |p| + LetterOpenerWeb::LettersController.after_action do request.content_security_policy_nonce_directives = %w(script-src) end end diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb index a78405ace6..fe3871d2e7 100644 --- a/config/initializers/doorkeeper.rb +++ b/config/initializers/doorkeeper.rb @@ -169,7 +169,7 @@ Doorkeeper.configure do # Under some circumstances you might want to have applications auto-approved, # so that the user skips the authorization step. # For example if dealing with a trusted application. - skip_authorization do |resource_owner, client| + skip_authorization do |_resource_owner, client| client.application.superapp? end diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb index 03e5fdbb8d..a44c2ab847 100644 --- a/config/initializers/paperclip.rb +++ b/config/initializers/paperclip.rb @@ -11,7 +11,7 @@ Paperclip.interpolates :filename do |attachment, style| end end -Paperclip.interpolates :prefix_path do |attachment, style| +Paperclip.interpolates :prefix_path do |attachment, _style| if attachment.storage_schema_version >= 1 && attachment.instance.respond_to?(:local?) && !attachment.instance.local? 'cache' + File::SEPARATOR else @@ -19,7 +19,7 @@ Paperclip.interpolates :prefix_path do |attachment, style| end end -Paperclip.interpolates :prefix_url do |attachment, style| +Paperclip.interpolates :prefix_url do |attachment, _style| if attachment.storage_schema_version >= 1 && attachment.instance.respond_to?(:local?) && !attachment.instance.local? 'cache/' else diff --git a/config/initializers/simple_form.rb b/config/initializers/simple_form.rb index a7a2d251e5..6d9d7b8aeb 100644 --- a/config/initializers/simple_form.rb +++ b/config/initializers/simple_form.rb @@ -164,7 +164,7 @@ SimpleForm.setup do |config| # config.item_wrapper_class = nil # How the label text should be generated altogether with the required text. - config.label_text = lambda { |label, required, explicit_label| "#{label} #{required}" } + config.label_text = lambda { |label, required, _explicit_label| "#{label} #{required}" } # You can define the class to use on all labels. Default is nil. # config.label_class = nil From c9204b792c91bd7ec265b40e7066b6ae4145ed33 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 9 Nov 2023 04:46:39 -0500 Subject: [PATCH 14/24] Fix `Rails/I18nLocaleTexts` cop (#27779) --- .rubocop_todo.yml | 5 ----- lib/tasks/mastodon.rake | 6 +++++- spec/helpers/flashes_helper_spec.rb | 17 ++++++++++++----- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 0e416482e7..b3228bac6e 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -149,11 +149,6 @@ Rails/HasManyOrHasOneDependent: - 'app/models/user.rb' - 'app/models/web/push_subscription.rb' -Rails/I18nLocaleTexts: - Exclude: - - 'lib/tasks/mastodon.rake' - - 'spec/helpers/flashes_helper_spec.rb' - # Configuration parameters: Include. # Include: app/controllers/**/*.rb, app/mailers/**/*.rb Rails/LexicallyScopedActionFilter: diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake index f2a90cd92e..f50ef4bbff 100644 --- a/lib/tasks/mastodon.rake +++ b/lib/tasks/mastodon.rake @@ -427,7 +427,11 @@ namespace :mastodon do from: env['SMTP_FROM_ADDRESS'], } - mail = ActionMailer::Base.new.mail to: send_to, subject: 'Test', body: 'Mastodon SMTP configuration works!' + mail = ActionMailer::Base.new.mail( + to: send_to, + subject: 'Test', # rubocop:disable Rails/I18nLocaleTexts + body: 'Mastodon SMTP configuration works!' + ) mail.deliver break rescue => e diff --git a/spec/helpers/flashes_helper_spec.rb b/spec/helpers/flashes_helper_spec.rb index 035e8a1de0..a6a3b062d7 100644 --- a/spec/helpers/flashes_helper_spec.rb +++ b/spec/helpers/flashes_helper_spec.rb @@ -4,16 +4,23 @@ require 'rails_helper' describe FlashesHelper do describe 'user_facing_flashes' do - it 'returns user facing flashes' do + before do + # rubocop:disable Rails/I18nLocaleTexts flash[:alert] = 'an alert' flash[:error] = 'an error' flash[:notice] = 'a notice' flash[:success] = 'a success' flash[:not_user_facing] = 'a not user facing flash' - expect(helper.user_facing_flashes).to eq 'alert' => 'an alert', - 'error' => 'an error', - 'notice' => 'a notice', - 'success' => 'a success' + # rubocop:enable Rails/I18nLocaleTexts + end + + it 'returns user facing flashes' do + expect(helper.user_facing_flashes).to eq( + 'alert' => 'an alert', + 'error' => 'an error', + 'notice' => 'a notice', + 'success' => 'a success' + ) end end end From ce1bd81c854c3fc3fa19aa41d9c56520c25325b6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 9 Nov 2023 04:53:44 -0500 Subject: [PATCH 15/24] Reduce complexity in `StatusCacheHydrator` (#27783) --- app/lib/status_cache_hydrator.rb | 52 ++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/app/lib/status_cache_hydrator.rb b/app/lib/status_cache_hydrator.rb index c1231311b1..45b50cb379 100644 --- a/app/lib/status_cache_hydrator.rb +++ b/app/lib/status_cache_hydrator.rb @@ -16,12 +16,36 @@ class StatusCacheHydrator # We take advantage of the fact that some relationships can only occur with an original status, not # the reblog that wraps it, so we can assume that some values are always false if payload[:reblog] + hydrate_reblog_payload(payload, account_id) + else + hydrate_non_reblog_payload(payload, account_id) + end + end + + private + + def hydrate_non_reblog_payload(empty_payload, account_id) + empty_payload.tap do |payload| + payload[:favourited] = Favourite.where(account_id: account_id, status_id: @status.id).exists? + payload[:reblogged] = Status.where(account_id: account_id, reblog_of_id: @status.id).exists? + payload[:muted] = ConversationMute.where(account_id: account_id, conversation_id: @status.conversation_id).exists? + payload[:bookmarked] = Bookmark.where(account_id: account_id, status_id: @status.id).exists? + payload[:pinned] = StatusPin.where(account_id: account_id, status_id: @status.id).exists? if @status.account_id == account_id + payload[:filtered] = mapped_applied_custom_filter(account_id, @status) + + if payload[:poll] + payload[:poll][:voted] = @status.account_id == account_id + payload[:poll][:own_votes] = [] + end + end + end + + def hydrate_reblog_payload(empty_payload, account_id) + empty_payload.tap do |payload| payload[:muted] = false payload[:bookmarked] = false payload[:pinned] = false if @status.account_id == account_id - payload[:filtered] = CustomFilter - .apply_cached_filters(CustomFilter.cached_filters_for(account_id), @status.reblog) - .map { |filter| serialized_filter(filter) } + payload[:filtered] = mapped_applied_custom_filter(account_id, @status.reblog) # If the reblogged status is being delivered to the author who disabled the display of the application # used to create the status, we need to hydrate it here too @@ -47,26 +71,14 @@ class StatusCacheHydrator payload[:favourited] = payload[:reblog][:favourited] payload[:reblogged] = payload[:reblog][:reblogged] - else - payload[:favourited] = Favourite.where(account_id: account_id, status_id: @status.id).exists? - payload[:reblogged] = Status.where(account_id: account_id, reblog_of_id: @status.id).exists? - payload[:muted] = ConversationMute.where(account_id: account_id, conversation_id: @status.conversation_id).exists? - payload[:bookmarked] = Bookmark.where(account_id: account_id, status_id: @status.id).exists? - payload[:pinned] = StatusPin.where(account_id: account_id, status_id: @status.id).exists? if @status.account_id == account_id - payload[:filtered] = CustomFilter - .apply_cached_filters(CustomFilter.cached_filters_for(account_id), @status) - .map { |filter| serialized_filter(filter) } - - if payload[:poll] - payload[:poll][:voted] = @status.account_id == account_id - payload[:poll][:own_votes] = [] - end end - - payload end - private + def mapped_applied_custom_filter(account_id, status) + CustomFilter + .apply_cached_filters(CustomFilter.cached_filters_for(account_id), status) + .map { |filter| serialized_filter(filter) } + end def serialized_filter(filter) ActiveModelSerializers::SerializableResource.new( From d6c971e158c2082ab5c6a4542778949e79519849 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 9 Nov 2023 10:54:14 +0100 Subject: [PATCH 16/24] New Crowdin Translations (automated) (#27787) Co-authored-by: GitHub Actions --- config/locales/activerecord.lt.yml | 13 +++++++++ config/locales/ko.yml | 4 +-- config/locales/lt.yml | 15 ++++++++-- config/locales/ru.yml | 4 ++- config/locales/simple_form.lt.yml | 44 ++++++++++++++++++++++++++++++ 5 files changed, 75 insertions(+), 5 deletions(-) diff --git a/config/locales/activerecord.lt.yml b/config/locales/activerecord.lt.yml index 6c5cb837ac..f54d00471b 100644 --- a/config/locales/activerecord.lt.yml +++ b/config/locales/activerecord.lt.yml @@ -1 +1,14 @@ +--- lt: + activerecord: + errors: + models: + account: + attributes: + username: + invalid: turi būti tik raidės, skaičiai ir pabraukimai. + reserved: užimtas. + admin/webhook: + attributes: + url: + invalid: nėra tinkamas URL adresas. diff --git a/config/locales/ko.yml b/config/locales/ko.yml index bb2ac37c1d..530cf6a447 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1600,8 +1600,8 @@ ko: windows: 윈도우 windows_mobile: 윈도우 모바일 windows_phone: 윈도우 폰 - revoke: 삭제 - revoke_success: 세션을 성공적으로 삭제하였습니다 + revoke: 취소 + revoke_success: 세션을 성공적으로 취소하였습니다 title: 세션 view_authentication_history: 내 계정에 대한 인증 이력 보기 settings: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index cc00ed7e05..7ad63c5e39 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -232,6 +232,12 @@ lt: unassign: Nepriskirti unresolved: Neišspręsti updated_at: Atnaujinti + roles: + everyone: Numatytieji leidimai + everyone_full_description_html: Tai – bazinis vaidmuo, turintis įtakos visiems naudotojams, net ir tiems, kurie neturi priskirto vaidmens. Visi kiti vaidmenys iš jo paveldi teises. + settings: + domain_blocks: + all: Visiems statuses: back_to_account: Atgal į paskyros puslapį media: @@ -250,6 +256,10 @@ lt: body: "%{reporter} parašė skundą apie %{target}" body_remote: Kažkas iš %{domain} parašė skundą apie %{target} subject: Naujas skundas %{instance} (#%{id}) + appearance: + localization: + body: Mastodon verčia savanoriai. + guide_link_text: Visi gali prisidėti. application_mailer: notification_preferences: Keisti el pašto parinktis settings: 'Keisti el pašto parinktis: %{link}' @@ -458,9 +468,9 @@ lt: private: Tik sekėjams private_long: Rodyti tik sekėjams public: Viešas - public_long: Matyti gali visi + public_long: Visi gali matyti unlisted: Neįtrauktas į sąrašus - unlisted_long: Matyti gali visi, tačiau nėra įtraukta į viešas laiko juostas + unlisted_long: Matyti gali visi, tačiau nėra įtraukti į viešąsias laiko skales stream_entries: sensitive_content: Jautrus turinys themes: @@ -507,4 +517,5 @@ lt: seamless_external_login: Jūs esate prisijungę per išorini įrenginį, todėl slaptąžodis ir el pašto nustatymai neprieinami. signed_in_as: 'Prisijungta kaip:' verification: + hint_html: "Savo tapatybės patvirtinimas Mastodon skirtas visiems. Remiantis atviraisiais žiniatinklio standartais, dabar ir visam laikui nemokamas. Viskas, ko tau reikia, yra asmeninė svetainė, pagal kurią žmonės tave atpažįsta. Kai iš savo profilio pateiksi nuorodą į šią svetainę, patikrinsime, ar svetainėje yra nuoroda į tavo profilį, ir parodysime vizualinį indikatorių." verification: Patvirtinimas diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 945b190435..7bfccb9a0f 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1079,6 +1079,7 @@ ru: confirmations: awaiting_review: Ваш адрес электронной почты подтвержден! Сотрудники %{domain} проверяют вашу регистрацию. Вы получите письмо, если они подтвердят вашу учетную запись! awaiting_review_title: Ваша регистрация проверяется + clicking_this_link: нажатие на эту ссылку login_link: войти proceed_to_login_html: Теперь вы можете перейти к %{login_link}. registration_complete: Ваша регистрация на %{domain} завершена! @@ -1536,7 +1537,7 @@ ru: update: subject: "%{name} изменил(а) пост" notifications: - administration_emails: E-mail уведомления администратора + administration_emails: Уведомления администратора по электронной почте email_events: События для e-mail уведомлений email_events_hint: 'Выберите события, для которых вы хотели бы получать уведомления:' other_settings: Остальные настройки уведомлений @@ -1631,6 +1632,7 @@ ru: over_total_limit: Вы превысили лимит на %{limit} запланированных постов too_soon: Запланированная дата должна быть в будущем self_destruct: + lead_html: К сожалению, %{domain} закрывается навсегда. Если вас учётная запись находиться здесь вы не сможете продолжить использовать его, но вы можете запросить резервную копию ваших данных. title: Этот сервер закрывается sessions: activity: Последняя активность diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml index 6c5cb837ac..69a6b86dd1 100644 --- a/config/locales/simple_form.lt.yml +++ b/config/locales/simple_form.lt.yml @@ -1 +1,45 @@ +--- lt: + simple_form: + hints: + account: + discoverable: Tavo vieši įrašai ir profilis gali būti rodomi arba rekomenduojami įvairiose Mastodon vietose, o profilis gali būti siūlomas kitiems naudotojams. + display_name: Tavo pilnas vardas arba smagus vardas. + fields: Tavo pagrindinis puslapis, įvardžiai, amžius, bet kas, ko tik nori. + indexable: Tavo vieši įrašai gali būti rodomi Mastodon paieškos rezultatuose. Žmonės, kurie bendravo su tavo įrašais, gali jų ieškoti nepriklausomai nuo to. + note: 'Gali @paminėti kitus žmones arba #saitažodžius.' + show_collections: Žmonės galės peržiūrėti tavo sekimus ir sekėjus. Žmonės, kuriuos seki, matys, kad juos seki, nepaisant to. + unlocked: Žmonės galės tave sekti nepaprašę patvirtinimo. Panaikink žymėjimą, jei nori peržiūrėti sekimo prašymus ir pasirinkti, ar priimti, ar atmesti naujus sekėjus. + account_warning_preset: + text: Gali naudoti įrašų sintaksę, pavyzdžiui, URL adresus, saitažodus ir paminėjimus + defaults: + header: PNG, GIF arba JPG. Ne daugiau kaip %{size}. Bus sumažintas iki %{dimensions}tšk. + inbox_url: Nukopijuok URL adresą iš pradinio puslapio perdavėjo, kurį nori naudoti + irreversible: Filtruoti įrašai išnyks negrįžtamai, net jei vėliau filtras bus pašalintas + locale: Naudotojo sąsajos kalba, el. laiškai ir stumiamieji pranešimai + password: Naudok bent 8 simbolius + phrase: Bus suderinta, neatsižvelgiant į teksto korpusą arba įrašo turinio įspėjimą + setting_display_media_hide_all: Visada slėpti žiniasklaidą + setting_display_media_show_all: Visada rodyti žiniasklaidą + setting_use_blurhash: Gradientai pagrįsti paslėptų vaizdų spalvomis, tačiau užgožia bet kokias detales + setting_use_pending_items: Slėpti laiko skalės naujienas po paspaudimo, vietoj automatinio kanalo slinkimo + featured_tag: + name: 'Štai keletas pastaruoju metu dažniausiai saitažodžių, kurių tu naudojai:' + form_admin_settings: + peers_api_enabled: Domenų pavadinimų sąrašas, su kuriais šis serveris susidūrė fediverse. Čia nėra duomenų apie tai, ar tu bendrauji su tam tikru serveriu, tik apie tai, kad tavo serveris apie jį žino. Tai naudojama tarnybose, kurios renka federacijos statistiką bendrąja prasme. + site_contact_email: Kaip žmonės gali su tavimi susisiekti teisiniais ar pagalbos užklausimais. + site_contact_username: Kaip žmonės gali tave pasiekti Mastodon. + site_extended_description: Bet kokia papildoma informacija, kuri gali būti naudinga lankytojams ir naudotojams. Gali būti struktūrizuota naudojant Markdown sintaksę. + trends: Trendai rodo, kurios įrašai, saitažodžiai ir naujienų istorijos tavo serveryje sulaukia didžiausio susidomėjimo. + sessions: + webauthn: Jei tai USB raktas, būtinai jį įkišk ir, jei reikia, paliesk. + settings: + indexable: Tavo profilio puslapis gali būti rodomas paieškos rezultatuose Google, Bing ir kituose. + labels: + featured_tag: + name: Saitažodis + tag: + listable: Leisti šį saitažodį rodyti paieškose ir pasiūlymuose + name: Saitažodis + trendable: Leisti šį saitažodį rodyti pagal trendus + usable: Leisti įrašams naudoti šį saitažodį From 220a2e8fbfb7700e14a9569548a9ee9bd85d1fce Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Thu, 9 Nov 2023 19:15:58 +0900 Subject: [PATCH 17/24] Run `yarn dedupe` when updating with Renovate (#27786) --- .github/renovate.json5 | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index e3744ee6dc..77b64fdd3f 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -12,6 +12,7 @@ // If we do not want a package to be grouped with others, we need to set its groupName // to `null` after any other rule set it to something. dependencyDashboardHeader: 'This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more. Before approving any upgrade: read the description and comments in the [`renovate.json5` file](https://github.com/mastodon/mastodon/blob/main/.github/renovate.json5).', + postUpdateOptions: ['yarnDedupeHighest'], packageRules: [ { // Require Dependency Dashboard Approval for major version bumps of these node packages From 23d88aa943b9aa816c68df7f3700a1ff9e18a065 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Nov 2023 10:16:36 +0000 Subject: [PATCH 18/24] Update babel monorepo to v7.23.3 (#27789) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 777 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 434 insertions(+), 343 deletions(-) diff --git a/yarn.lock b/yarn.lock index af10d531de..8ad9805b06 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,33 +52,40 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9, @babel/compat-data@npm:^7.23.2": +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": version: 7.23.2 resolution: "@babel/compat-data@npm:7.23.2" checksum: 0397a08c3e491696cc1b12cf0879bf95fc550bfc6ef524d5a9452981aa0e192a958b2246debfb230fa22718fac473cc5a36616f89b1ad6e7e52055732cd374a1 languageName: node linkType: hard +"@babel/compat-data@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/compat-data@npm:7.23.3" + checksum: c6af331753c34ee8a5678bc94404320826cb56b1dda3efc1311ec8fb0774e78225132f3c1acc988440ace667f14a838e297a822692b95758aa63da406e1f97a1 + languageName: node + linkType: hard + "@babel/core@npm:^7.10.4, @babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1": - version: 7.23.2 - resolution: "@babel/core@npm:7.23.2" + version: 7.23.3 + resolution: "@babel/core@npm:7.23.3" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@babel/code-frame": "npm:^7.22.13" - "@babel/generator": "npm:^7.23.0" + "@babel/generator": "npm:^7.23.3" "@babel/helper-compilation-targets": "npm:^7.22.15" - "@babel/helper-module-transforms": "npm:^7.23.0" + "@babel/helper-module-transforms": "npm:^7.23.3" "@babel/helpers": "npm:^7.23.2" - "@babel/parser": "npm:^7.23.0" + "@babel/parser": "npm:^7.23.3" "@babel/template": "npm:^7.22.15" - "@babel/traverse": "npm:^7.23.2" - "@babel/types": "npm:^7.23.0" + "@babel/traverse": "npm:^7.23.3" + "@babel/types": "npm:^7.23.3" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 14ad6e0a3ac0085dc008e7fb0c8513f0a3e39f2ab883a964a89ef1311338d49cf085c94cb6165c07fdec0fdcc6e865ce4811253c479f9f45ac375226dfe3ad3b + checksum: 08d43b749e24052d12713a7fb1f0c0d1275d4fb056d00846faeb8da79ecf6d0ba91a11b6afec407b8b0f9388d00e2c2f485f282bef0ade4d6d0a17de191a4287 languageName: node linkType: hard @@ -94,6 +101,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/generator@npm:7.23.3" + dependencies: + "@babel/types": "npm:^7.23.3" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: d5fff1417eecfada040e01a7c77a4968e81c436aeb35815ce85b4e80cd01e731423613d61033044a6cb5563bb8449ee260e3379b63eb50b38ec0a9ea9c00abfd + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" @@ -103,7 +122,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15" dependencies: @@ -112,17 +131,17 @@ __metadata: languageName: node linkType: hard -"@babel/helper-builder-react-jsx@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-builder-react-jsx@npm:7.22.5" +"@babel/helper-builder-react-jsx@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/helper-builder-react-jsx@npm:7.22.10" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/types": "npm:^7.22.5" - checksum: 001b727c911b4c777c10844070a2bf3bdf7cdb46bb3169de273eb2415e1efc3769980520fbdcd47912e9bd3055cb563a0a703a3c9150368f45e68d894bd863ec + "@babel/types": "npm:^7.22.10" + checksum: 8e2ad2e17dd779ddccec29f6b1de61df1f199694673bdbbae0474878211139f2e574810726110e4d46c1e9a0221af1f2d38bd0398dd20490eb03a24f790602be languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6": +"@babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.6": version: 7.22.15 resolution: "@babel/helper-compilation-targets@npm:7.22.15" dependencies: @@ -135,7 +154,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.22.11, @babel/helper-create-class-features-plugin@npm:^7.22.15, @babel/helper-create-class-features-plugin@npm:^7.22.5": +"@babel/helper-create-class-features-plugin@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-create-class-features-plugin@npm:7.22.15" dependencies: @@ -154,7 +173,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": version: 7.22.15 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" dependencies: @@ -217,7 +236,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.22.5": +"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-module-imports@npm:7.22.15" dependencies: @@ -226,9 +245,9 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/helper-module-transforms@npm:7.23.0" +"@babel/helper-module-transforms@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/helper-module-transforms@npm:7.23.3" dependencies: "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-module-imports": "npm:^7.22.15" @@ -237,7 +256,7 @@ __metadata: "@babel/helper-validator-identifier": "npm:^7.22.20" peerDependencies: "@babel/core": ^7.0.0 - checksum: 15a52e401bd17fe44ba9be51cca693a3e182dc93264dc28ede732081c43211741df81ce8eb15e82e81c8ad51beb8893301ecc31d5c77add0f7be78dff6815318 + checksum: 211e1399d0c4993671e8e5c2b25383f08bee40004ace5404ed4065f0e9258cc85d99c1b82fd456c030ce5cfd4d8f310355b54ef35de9924eabfc3dff1331d946 languageName: node linkType: hard @@ -257,7 +276,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.22.20, @babel/helper-remap-async-to-generator@npm:^7.22.5": +"@babel/helper-remap-async-to-generator@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" dependencies: @@ -270,7 +289,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9": +"@babel/helper-replace-supers@npm:^7.22.20, @babel/helper-replace-supers@npm:^7.22.9": version: 7.22.20 resolution: "@babel/helper-replace-supers@npm:7.22.20" dependencies: @@ -373,27 +392,48 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.15" +"@babel/parser@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/parser@npm:7.23.3" + bin: + parser: ./bin/babel-parser.js + checksum: 0fe11eadd4146a9155305b5bfece0f8223a3b1b97357ffa163c0156940de92e76cd0e7a173de819b8692767147e62f33389b312d1537f84cede51092672df6ef + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0 - checksum: fb2288ac168e6670a77f73b92e835f7a579468435e81c9261729e9ba9c601ff22622bacd3e71eb190b135016a6fbab5d824501c7b91733dd379022a75163806c + checksum: 356a4e9fc52d7ca761ce6857fc58e2295c2785d22565760e6a5680be86c6e5883ab86e0ba25ef572882c01713d3a31ae6cfa3e3222cdb95e6026671dab1fa415 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.15" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" - "@babel/plugin-transform-optional-chaining": "npm:^7.22.15" + "@babel/plugin-transform-optional-chaining": "npm:^7.23.3" peerDependencies: "@babel/core": ^7.13.0 - checksum: 46fb46af40446918d64530f544ea0104e274ccd8a16b8a8f6fa2e51a198af6ac2b620aaf8875f3427671f09717949a584c79fe20f521245214f50b8de56cd116 + checksum: a8785f099d55ca71ed89815e0f3a636a80c16031f80934cfec17c928d096ee0798964733320c8b145ef36ba429c5e19d5107b06231e0ab6777cfb0f01adfdc23 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.23.3" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 0f43b74741d50e637ba4dcef2786621126fe4da6ccf4ee2e94423ee23f6a04ecd91d458e59764c43e4968be139e5197ee43be8a2fea2c09f0b202a3391e548cc languageName: node linkType: hard @@ -472,25 +512,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.22.5" +"@babel/plugin-syntax-import-assertions@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b297d7c757c746ed0ef3496ad749ae2ce648ec73dae5184120b191c280e62da7dc104ee126bc0053dfece3ce198a5ee7dc1cbf4768860f666afef5dee84a7146 + checksum: 7db8b59f75667bada2293353bb66b9d5651a673b22c72f47da9f5c46e719142481601b745f9822212fd7522f92e26e8576af37116f85dae1b5e5967f80d0faab languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.5" +"@babel/plugin-syntax-import-attributes@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: de0b104a82cb8ffdc29472177210936609b973665a2ad8ef26c078251d7c728fbd521119de4c417285408a8bae345b5da09cd4a4a3311619f71b9b2c64cce3fa + checksum: 99b40d33d79205a8e04bb5dea56fd72906ffc317513b20ca7319e7683e18fce8ea2eea5e9171056f92b979dc0ab1e31b2cb5171177a5ba61e05b54fe7850a606 languageName: node linkType: hard @@ -527,6 +567,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 563bb7599b868773f1c7c1d441ecc9bc53aeb7832775da36752c926fc402a1fa5421505b39e724f71eb217c13e4b93117e081cac39723b0e11dac4c897f33c3e + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -615,7 +666,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.22.5, @babel/plugin-syntax-typescript@npm:^7.7.2": +"@babel/plugin-syntax-typescript@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4d6e9cdb9d0bfb9bd9b220fc951d937fce2ca69135ec121153572cebe81d86abc9a489208d6b69ee5f10cadcaeffa10d0425340a5029e40e14a6025021b90948 + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": version: 7.22.5 resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" dependencies: @@ -638,20 +700,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.22.5" +"@babel/plugin-transform-arrow-functions@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1b24d47ddac6ae2fe8c7fab9a020fdb6a556d17d8c5f189bb470ff2958a5437fe6441521fd3d850f4283a1131d7a0acf3e8ebe789f9077f54bab4e2e8c6df176 + checksum: b128315c058f5728d29b0b78723659b11de88247ea4d0388f0b935cddf60a80c40b9067acf45cbbe055bd796928faef152a09d9e4a0695465aca4394d9f109ca languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.23.2": - version: 7.23.2 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.2" +"@babel/plugin-transform-async-generator-functions@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.3" dependencies: "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-plugin-utils": "npm:^7.22.5" @@ -659,289 +721,289 @@ __metadata: "@babel/plugin-syntax-async-generators": "npm:^7.8.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 16d7bd5dbd67991ab320a46ada19a9a0c8364725603c731f152afc98ee8764dc738c93f081a7560906d265b78c376bccabf3e31b9f99071c8982a6f9c8e2ac45 + checksum: e846f282658e097fce4fccf3ee29289bf05f0654846a5994727a36f0cdc2e47abdffd4be4fa65787e94aa975824fae894c90afbfdc8caacd46c12c7f43e99d7f languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.22.5" +"@babel/plugin-transform-async-to-generator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.23.3" dependencies: - "@babel/helper-module-imports": "npm:^7.22.5" + "@babel/helper-module-imports": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-remap-async-to-generator": "npm:^7.22.5" + "@babel/helper-remap-async-to-generator": "npm:^7.22.20" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2972f22c3a5a56a8b225f4fa1bbdbcf6e989e0da460d5f4e2280652b1433d7c68b6ddc0cc2affc4b59905835133a253a31c24c7ca1bebe1a2f28377d27b4ca1c + checksum: da3ffd413eef02a8e2cfee3e0bb0d5fc0fcb795c187bc14a5a8e8874cdbdc43bbf00089c587412d7752d97efc5967c3c18ff5398e3017b9a14a06126f017e7e9 languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.22.5" +"@babel/plugin-transform-block-scoped-functions@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 21878d4f0040f5001c4a14e17759e80bf699cb883a497552fa882dbc05230b100e8572345654b091021d5c4227555ed2bf40c8d6ba16a54d81145abfe0022cf8 + checksum: 82c12a11277528184a979163de7189ceb00129f60dd930b0d5313454310bf71205f302fb2bf0430247161c8a22aaa9fb9eec1459f9f7468206422c191978fd59 languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.23.0" +"@babel/plugin-transform-block-scoping@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-block-scoping@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f5d0822a4e2bb3a0b5172f01f8c107999b880f0e538a9c1bae3c7720e85d8d117a67167f5e8eba909e0ec3db67be3b30e7f5c83211dd4be5c7096222071571be + checksum: ccaeded7954c196811d22a35322579254cda52676e823682b6234885a3aaf88fe0d5152dacaec43db9031dcf35a050a5343e36028e5905b0ba9c02d36b30a57f languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-class-properties@npm:7.22.5" +"@babel/plugin-transform-class-properties@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-class-properties@npm:7.23.3" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 707f976d3aea2b52dad36a5695a71af8956f9b1d5dec02c2b8cce7ff3b5e60df4cbe059c71ae0b7983034dc639de654a2c928b97e4e01ebf436d58ea43639e7d + checksum: bca30d576f539eef216494b56d610f1a64aa9375de4134bc021d9660f1fa735b1d7cc413029f22abc0b7cb737e3a57935c8ae9d8bd1730921ccb1deebce51bfd languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.22.11": - version: 7.22.11 - resolution: "@babel/plugin-transform-class-static-block@npm:7.22.11" +"@babel/plugin-transform-class-static-block@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-class-static-block@npm:7.23.3" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.11" + "@babel/helper-create-class-features-plugin": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.12.0 - checksum: 74c06f315dbeb101784682f89d6e40a46b243132b63f430ac9ee5781d3fedff57fc6bf7390aa2b19d44a9d7e49a1e70e572bdde1907480881204ef33163b9630 + checksum: 89cdb66d7bc834cd51659eb7286a6bee23add0bc114943d68c4b6c0c834178cf0d55183df0cf508fec9c55ed4155641360e6f55a91c16fe826ccaf1adf381922 languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-transform-classes@npm:7.22.15" +"@babel/plugin-transform-classes@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-classes@npm:7.23.3" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" "@babel/helper-compilation-targets": "npm:^7.22.15" - "@babel/helper-environment-visitor": "npm:^7.22.5" - "@babel/helper-function-name": "npm:^7.22.5" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-optimise-call-expression": "npm:^7.22.5" "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.9" + "@babel/helper-replace-supers": "npm:^7.22.20" "@babel/helper-split-export-declaration": "npm:^7.22.6" globals: "npm:^11.1.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c9342bcf41e0253d83d9f73c4f9d2c9f885c0412f58ebfe462d57579c8247b949cbb023f15383d18c89fe5d12b537633e2ca4ba906ce47238615bc679beafb55 + checksum: 88bfd332db0ba5cbfb8557a2ba5a7185151aebc9cfe3035b014aa6d795556acbe672bb8c78da3c9fd1d23f55a333d14b5daa127ef037f5ced5198b6d79a146d6 languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5" +"@babel/plugin-transform-computed-properties@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-computed-properties@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/template": "npm:^7.22.5" + "@babel/template": "npm:^7.22.15" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 22ecea23c1635083f5473092c5fbca62cbf7a85764bcf3e704c850446d68fe946097f6001c4cbfc92b4aee27ed30b375773ee479f749293e41fdb8f1fb8fcb67 + checksum: 3ca8a006f8e652b58c21ecb84df1d01a73f0a96b1d216fd09a890b235dd90cb966b152b603b88f7e850ae238644b1636ce5c30b7c029c0934b43383932372e4a languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/plugin-transform-destructuring@npm:7.23.0" +"@babel/plugin-transform-destructuring@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-destructuring@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 038505eabdde2e1bb3bb904e50292b263d61d35e18660f751e7753b5723e2a5a5903a493290d772c8598da98c2c904b7cf45552ad1c11636fcb78f60754abd53 + checksum: 717e9a62c1b0c93c507f87b4eaf839ec08d3c3147f14d74ae240d8749488d9762a8b3950132be620a069bde70f4b3e4ee9867b226c973fcc40f3cdec975cde71 languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.22.5" +"@babel/plugin-transform-dotall-regex@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.23.3" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" + "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e0d7b95380483ef563c13f7c0a2122f575c58708cfb56494d6265ebb31753cf46ee0b3f5126fa6bbea5af392b3a2da05bf1e028d0b2b4d1dc279edd67cf3c3d9 + checksum: 6c89286d1277c2a63802a453c797c87c1203f89e4c25115f7b6620f5fce15d8c8d37af613222f6aa497aa98773577a6ec8752e79e13d59bc5429270677ea010b languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.22.5" +"@babel/plugin-transform-duplicate-keys@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 82772fdcc1301358bc722c1316bea071ad0cd5893ca95b08e183748e044277a93ee90f9c641ac7873a00e4b31a8df7cf8c0981ca98d01becb4864a11b22c09d1 + checksum: 7e2640e4e6adccd5e7b0615b6e9239d7c98363e21c52086ea13759dfa11cf7159b255fc5331c2de435639ea8eb6acefae115ae0d797a3d19d12587652f8052a5 languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.22.11": - version: 7.22.11 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.22.11" +"@babel/plugin-transform-dynamic-import@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: cf0dd2d3da42ae18ccfa54bef7c80bf26b3bcc48751fc38dd41ad47bc14cc76ca8ec692f39f8b1ef54b3f48eff8db79e6397e4653033bb3a64e433f3c3a43edf + checksum: df3fd130312dc53d068fa76333991dce5e86987b023af8c3b502bd7d36a8e67da6f718e61dc838576a9fbacd06628e29607ee22d9bae30705485c14130eab201 languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.22.5" +"@babel/plugin-transform-exponentiation-operator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.23.3" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e8832460cfc9e087561fa42a796bb4eb181e6983d6db85c6dcec15f98af4ae3d13fcab18a262252a43b075d79ac93aaa38d33022bc5a870d2760c6888ba5d211 + checksum: 5c33ee6a1bdc52fcdf0807f445b27e3fbdce33008531885e65a699762327565fffbcfde8395be7f21bcb22d582e425eddae45650c986462bb84ba68f43687516 languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.22.11": - version: 7.22.11 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.11" +"@babel/plugin-transform-export-namespace-from@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2b65ddf9ab4cfa8ffc72983c689b99d9ce0fe74846c2e518a1955f703e1fe073d0865810959164800613c3235a29cf9cae3567a46bf9cb53a2384469d3913e85 + checksum: 390c6626dcda99023629049d92090242b4575351a4a7b47f97febabd2381f2cd0f624de661d8de8d1f715fedd63753cfd1feddead19e5960c27b88e447465b81 languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-transform-for-of@npm:7.22.15" +"@babel/plugin-transform-for-of@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-for-of@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 64182292f4be8cdf1fff06fe62ba110bf5e5dbb5d966d5e8871ef40a673cd934217da51b9f4a4ba303ca936be787f30e3d13a91fe410339de79e0fe9f0807e15 + checksum: 8a36202cfee312ba80e509c7c2131e6773524e572b4dc64a8ee95bd912634fdeb5ea91c6c7747ee30e03562d0f0d333f88ed7dbb929b36b60b8d74189189e12f languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-function-name@npm:7.22.5" +"@babel/plugin-transform-function-name@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-function-name@npm:7.23.3" dependencies: - "@babel/helper-compilation-targets": "npm:^7.22.5" - "@babel/helper-function-name": "npm:^7.22.5" + "@babel/helper-compilation-targets": "npm:^7.22.15" + "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 206bdef2ff91c29a7d94c77778ad79f18bdb2cd6a30179449f2b95af04637cb68d96625dc673d9a0961b6b7088bd325bbed7540caf9aa8f69e5b003d6ba20456 + checksum: 89cb9747802118048115cf92a8f310752f02030549b26f008904990cbdc86c3d4a68e07ca3b5c46de8a46ed4df2cb576ac222c74c56de67253d2a3ddc2956083 languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.22.11": - version: 7.22.11 - resolution: "@babel/plugin-transform-json-strings@npm:7.22.11" +"@babel/plugin-transform-json-strings@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-json-strings@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 90f46a99c4136187d16f30f1f5f51e479c919edb6f6b4ce43fe81fdae2c89a556a0a6f6f2ec7ea3de7014a504f6df2220e3bc19dd7011f76bd275c195842f886 + checksum: e1cef6a485b9da32aba9449fb459dac062dfc401f3d6ad48e7fbdcb73bbe470c995cc15ce5c421b95efe1e9a90d5507eb606360fe10b6d8cb869dd5dae7a2562 languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-literals@npm:7.22.5" +"@babel/plugin-transform-literals@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-literals@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1003d0cf98e9ae432889bcf5f3d5f7d463f777fc2c74b0d4a1a93b51e83606c263a16146e34f0a06b291300aa5f2001d6e8bf65ed1bf478ab071b714bf158aa5 + checksum: 8292106b106201464c2bfdd5c014fe6a9ca1c0256eb0a8031deb20081e21906fe68b156186f77d993c23eeab6d8d6f5f66e8895eec7ed97ce6de5dbcafbcd7f4 languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.11": - version: 7.22.11 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.11" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9810f7918514bd59579ccc0950b4f352569abb40959569d38931e57f11e6b9aa920bdef403ffd8cd5d4e0243e0bbf7a1ebb445f3428c8b7a2421568ff2f681be + checksum: 23b7588b26d420c8b132bd08916d49871ca0c8db892f6b58637b10e2a0d918163d413c505db880a9157fc2e61d089040f139298a60d837ccbd0efca0474ac7ca languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.22.5" +"@babel/plugin-transform-member-expression-literals@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 731a341b17511809ae435b64822d4d093e86fd928b572028e6742bdfba271c57070860b0f3da080a76c5574d58c4f369fac3f7bf0f450b37920c0fc6fe27bb4e + checksum: 687f24f3ec60b627fef6e87b9e2770df77f76727b9d5f54fa4c84a495bb24eb4a20f1a6240fa22d339d45aac5eaeb1b39882e941bfd00cf498f9c53478d1ec88 languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/plugin-transform-modules-amd@npm:7.23.0" +"@babel/plugin-transform-modules-amd@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-modules-amd@npm:7.23.3" dependencies: - "@babel/helper-module-transforms": "npm:^7.23.0" + "@babel/helper-module-transforms": "npm:^7.23.3" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: dda02864029ff66955e21d19c3d245aad69792b75e748de1391403bc86c8e9720b4f320b0db8413a29c11ba63b168146cf849180b5677bc6a74bfd085d20376d + checksum: 9f7ec036f7cfc588833a4dd117a44813b64aa4c1fd5bfb6c78f60198c1d290938213090c93a46f97a68a2490fad909e21a82b2472e95da74d108c125df21c8d5 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.0" +"@babel/plugin-transform-modules-commonjs@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" dependencies: - "@babel/helper-module-transforms": "npm:^7.23.0" + "@babel/helper-module-transforms": "npm:^7.23.3" "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-simple-access": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1f015764c2e63445d46660e7a2eb9002c20def04daf98fa93c9dadb5bd55adbefefd1ccdc11bcafa5e2f04275939d2414482703bc35bc60d6ca2bf1f67b720e3 + checksum: 5c8840c5c9ecba39367ae17c973ed13dbc43234147b77ae780eec65010e2a9993c5d717721b23e8179f7cf49decdd325c509b241d69cfbf92aa647a1d8d5a37d languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.0" +"@babel/plugin-transform-modules-systemjs@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.3" dependencies: "@babel/helper-hoist-variables": "npm:^7.22.5" - "@babel/helper-module-transforms": "npm:^7.23.0" + "@babel/helper-module-transforms": "npm:^7.23.3" "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-validator-identifier": "npm:^7.22.20" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 04c5cef7d6921bb9c9073cea389289099124e78cd1e3b7e020e3c085d486b48efadd9a42c0c0d963a9b1c3d5465c3151229092ea719997e53427f36935c84178 + checksum: 0d55280a276510222c8896bf4e581acb84824aa5b14c824f7102242ad6bc5104aaffe5ab22fe4d27518f4ae2811bd59c36d0c0bfa695157f9cfce33f0517a069 languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-modules-umd@npm:7.22.5" +"@babel/plugin-transform-modules-umd@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-modules-umd@npm:7.23.3" dependencies: - "@babel/helper-module-transforms": "npm:^7.22.5" + "@babel/helper-module-transforms": "npm:^7.23.3" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f4a40e18986182a2b1be6af949aaff67a7d112af3d26bbd4319d05b50f323a62a10b32b5584148e4630bdffbd4d85b31c0d571fe4f601354898b837b87afca4c + checksum: f0d2f890a15b4367d0d8f160bed7062bdb145c728c24e9bfbc1211c7925aae5df72a88df3832c92dd2011927edfed4da1b1249e4c78402e893509316c0c2caa6 languageName: node linkType: hard @@ -957,138 +1019,138 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-new-target@npm:7.22.5" +"@babel/plugin-transform-new-target@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-new-target@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 22ead0668bfd8db9166a4a47579d9f44726b59f21104561a6dd851156336741abdc5c576558e042c58c4b4fd577d3e29e4bd836021007f3381c33fe3c88dca19 + checksum: f489b9e1f17b42b2ba6312d58351e757cb23a8409f64f2bb6af4c09d015359588a5d68943b20756f141d0931a94431c782f3ed1225228a930a04b07be0c31b04 languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.11, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3": - version: 7.22.11 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.11" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 328c0ebfbbc82256af00252fb795996b093f57b528a57afcb30843ca52d24a6d824029ad6d22f042f3af336bb4dc1963b4841c2ad774424b02d14ae7cfff2701 + checksum: f960faed3975c8454c52d2b5d85daf0c9a27677b248d7933882e59b10202ade2a98c7b925ce0bae2b8eb4d66eb5d63a5588c1090d54eaa4cd235533d71228ff3 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.22.11": - version: 7.22.11 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.11" +"@babel/plugin-transform-numeric-separator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: fcde065002948c9c39f853be99c38b02aa1a1eb453e70ab1a164feb250c1fcbf1edd38071e28ed8bde6840b8a394af8b291b2ab2d793f283872ba43f89cf6dd2 + checksum: d3748cce20e8752e61dfda55e275c699459a3ff8d0bb46585da813136e04066b1ce70b71beef504fcdc8d4cca3c955112cea96d5e9fd5a42a5bc8956d05236c2 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.15" +"@babel/plugin-transform-object-rest-spread@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.23.3" dependencies: - "@babel/compat-data": "npm:^7.22.9" + "@babel/compat-data": "npm:^7.23.3" "@babel/helper-compilation-targets": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-transform-parameters": "npm:^7.22.15" + "@babel/plugin-transform-parameters": "npm:^7.23.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c485084360607a4392227d8af461e0f313953a6088221826668f90e92df6e16da04e2b3424e283c2980586095430d1068ae6e549b828dfa3891e2d1a397bd034 + checksum: 31ab631aaba945c118662943e5f1f54a21f07d64f06e06b25d55871168c460f3eeeccdf7b05aa74a1340e2cfbe781ad3c7ceccd0c2585d39f7b73ba11ebaa9d0 languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-object-super@npm:7.22.5" +"@babel/plugin-transform-object-super@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-object-super@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.5" + "@babel/helper-replace-supers": "npm:^7.22.20" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 062a78ff897c095a71f0db577bd4e4654659d542cb9ef79ec0fda7873ee6fefe31a0cb8a6c2e307e16dacaae1f50d48572184a59e1235b8d9d9cb2f38c4259ce + checksum: a6856fd8c0afbe5b3318c344d4d201d009f4051e2f6ff6237ff2660593e93c5997a58772b13d639077c3e29ced3440247b29c496cd77b13af1e7559a70009775 languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.22.11": - version: 7.22.11 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.11" +"@babel/plugin-transform-optional-catch-binding@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6a731f4fee93397634b088ef7de990c150ea1c29e2cf681b2520d9196888d79a4252cbcc497d9b0db0453160ea2267043036fee4ccea8964864ef1b55a40d76f + checksum: 85ac1e94ee8f21648816151628ff931cc16143ec8c904649a1ecfd8960160290eccc5a197b4ae3ee7a1c7a27a7c4189e61b4de24483d5bad4040784afe2d206f languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.22.15, @babel/plugin-transform-optional-chaining@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.0" +"@babel/plugin-transform-optional-chaining@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2bf605b908c75f8d7616e8be52e4656983f2b027032260fbf5279f28297a67a1a28ec3ed60cd5760537dbd08a021246b8092ce06fb2418884390230b807142b3 + checksum: 2b358962169d871392aa292a67527e5335909438da0ddbb0d19e7838c0f8a2081cc751a49e6e534ac4d6c932254531a205ac22b197f64fc4c89f41bf9f595497 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-transform-parameters@npm:7.22.15" +"@babel/plugin-transform-parameters@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-parameters@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9b9faf55b20aea4755a66db75e1195f7a203b4cfeef0ed5ceb25d6364bbb7a5bd0b5c587489c37ab339c4e4e7275406d0db0c05c25aa731a3cf6b4cc51e97c8d + checksum: a8d4cbe0f6ba68d158f5b4215c63004fc37a1fdc539036eb388a9792017c8496ea970a1932ccb929308f61e53dc56676ed01d8df6f42bc0a85c7fd5ba82482b7 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-private-methods@npm:7.22.5" +"@babel/plugin-transform-private-methods@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-private-methods@npm:7.23.3" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a62f2e47ca30f6b8043201483c5a505e3d54416e6ddfbe7cb696a1db853a4281b1fffee9f883fe26ac72ba02bba0db5832d69e02f2eb4746e9811b8779287cc1 + checksum: 745a655edcd111b7f91882b921671ca0613079760d8c9befe336b8a9bc4ce6bb49c0c08941831c950afb1b225b4b2d3eaac8842e732db095b04db38efd8c34f4 languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.22.11": - version: 7.22.11 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.11" +"@babel/plugin-transform-private-property-in-object@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.23.3" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-create-class-features-plugin": "npm:^7.22.11" + "@babel/helper-create-class-features-plugin": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ec1ed8cc5483b8661e2cf7c020ffefe2a85e793a353d580c4174686923e465cdfaf13fc344ebb2eead4a1dbecd49baba93e342a9de400a29abedb79dcc6745a2 + checksum: 9211dd25a6e87a01535f2d97a663fa6de3472b963c8dcfaacce229a2e3fa6500f2e9fc690bc100a540fc7b66c8364faf7ef19b32e9c9b9791e4561b742c15ed3 languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-property-literals@npm:7.22.5" +"@babel/plugin-transform-property-literals@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-property-literals@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8d25b7b01b5f487cfc1a296555273c1ddad45276f01039130f57eb9ab0fafa0560d10d972323071042e73ac3b8bab596543c9d1a877229624a52e6535084ea51 + checksum: b2549f23f90cf276c2e3058c2225c3711c2ad1c417e336d3391199445a9776dd791b83be47b2b9a7ae374b40652d74b822387e31fa5267a37bf49c122e1a9747 languageName: node linkType: hard @@ -1103,26 +1165,26 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-display-name@npm:7.22.5" +"@babel/plugin-transform-react-display-name@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-react-display-name@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 41e0167ecd8e5281e427556146b1d3bee8652bcd0664be013f16ffeeb4d61b7ab0b1e59bcc2c923774f0d265f78012628d5277880f758f3675893226f9be012e + checksum: 3aed142af7bd1aed1df2bdad91ed33ba1cdd5c3c67ce6eafba821ff72f129162a197ffb55f1eb1775af276abd5545934489a8257fef6c6665ddf253a4f39a939 languageName: node linkType: hard "@babel/plugin-transform-react-inline-elements@npm:^7.21.0": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-inline-elements@npm:7.22.5" + version: 7.23.3 + resolution: "@babel/plugin-transform-react-inline-elements@npm:7.23.3" dependencies: - "@babel/helper-builder-react-jsx": "npm:^7.22.5" + "@babel/helper-builder-react-jsx": "npm:^7.22.10" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9c814948e7e8fda4426e778ebc31999c47c3e68fa03bf6f99642d27c0872b4b5ee70a174fb405ce9be6e7f70606ee9269fc41de2e68852f215fdb63447a94c92 + checksum: 138f7769b30f65d339588155affe677c68fde3cdaa060a2dc73152cc8c941c246d4b2ae73c8f1d9ddf1055e587fcb7379c155d49daec086ed50557f2117c1d50 languageName: node linkType: hard @@ -1152,44 +1214,44 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-pure-annotations@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.22.5" +"@babel/plugin-transform-react-pure-annotations@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.23.3" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 18db2e2346d79ebe4a3f85f51fa7757a63a09bc6da7f339e6ce9e7534de68b5165fe7d49ac363dee6ba3f81eb904d44bf9c13653331805f9b236a1d9fec7e018 + checksum: 76287adeab656fb7f39243e5ab6a8c60069cf69fffeebd1566457d56cb2f966366a23bd755d3e369f4d0437459e3b76243df370caa7d7d2287a8560b66c53ca2 languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/plugin-transform-regenerator@npm:7.22.10" +"@babel/plugin-transform-regenerator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-regenerator@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" regenerator-transform: "npm:^0.15.2" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b903bfc1e849ca956a981a199b4913c0998877b6ba759f6d64530c5106610f89a818d61471a9c1bdabb6d94ba4ba150febeb4d196f6a8e67fcdc44207bb8fef6 + checksum: 3b0e989ae5db78894ee300b24e07fbcec490c39ab48629c519377581cf94e90308f4ddc10a8914edc9f403e2d3ac7a7ae0ae09003629d852da03e2ba846299c6 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-reserved-words@npm:7.22.5" +"@babel/plugin-transform-reserved-words@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-reserved-words@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3ee861941b1d3f9e50f1bb97a2067f33c868b8cd5fd3419a610b2ad5f3afef5f9e4b3740d26a617dc1a9e169a33477821d96b6917c774ea87cac6790d341abbd + checksum: 4e6d61f6c9757592661cfbd2c39c4f61551557b98cb5f0995ef10f5540f67e18dde8a42b09716d58943b6e4b7ef5c9bcf19902839e7328a4d49149e0fecdbfcd languageName: node linkType: hard "@babel/plugin-transform-runtime@npm:^7.22.4": - version: 7.23.2 - resolution: "@babel/plugin-transform-runtime@npm:7.23.2" + version: 7.23.3 + resolution: "@babel/plugin-transform-runtime@npm:7.23.3" dependencies: "@babel/helper-module-imports": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" @@ -1199,145 +1261,146 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 440291cd42e51c3f8789a0bd45cebbf597cf5d4ee4185050f1151f579465db016902054c50684e288342a03c9f1af8cec365fc02d85d14dc2b2a30ad5eb07c42 + checksum: 111fc412cc3968402183086879e1625ad4b869309f2e5aa33498a71ba700d3196c151d506977b5b535e8ff2c42c0731d59bfbfcb158ecddeeb3c49d5d4a58c0a languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.22.5" +"@babel/plugin-transform-shorthand-properties@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d2dd6b7033f536dd74569d7343bf3ca88c4bc12575e572a2c5446f42a1ebc8e69cec5e38fc0e63ac7c4a48b944a3225e4317d5db94287b9a5b381a5045c0cdb2 + checksum: c423c66fec0b6503f50561741754c84366ef9e9818442c8881fbaa90cc363fd137084b9431cdc00ed2f1fd8c8a1a5982c4a7e1f2af3769db4caf2ac7ea55d4f0 languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-spread@npm:7.22.5" +"@babel/plugin-transform-spread@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-spread@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f8896b00d69557a4aafb3f48b7db6fbaa8462588e733afc4eabfdf79b12a6aed7d20341d160d704205591f0a43d04971d391fa80328f61240d1edc918079a1b0 + checksum: a348e4ae47e4ceeceb760506ec7bf835ccc18a2cf70ec74ebfbe41bc172fa2412b05b7d1b86836f8aee375e41a04ff20486074778d0e2d19d668b33dc52e9dbb languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.22.5" +"@babel/plugin-transform-sticky-regex@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 42d9295d357415b55c04967ff1cd124cdcbabf2635614f9ad4f8b372d9ae35f6c02bf7473a5418b91e75235960cb1e61493e2c0581cb55bf9719b0986bcd22a5 + checksum: cd15c407906b41e4b924ea151e455c11274dba050771ee7154ad88a1a274140ac5e84efc8d08c4379f2f0cec8a09e4a0a3b2a3a954ba6a67d9fb35df1c714c56 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-template-literals@npm:7.22.5" +"@babel/plugin-transform-template-literals@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-template-literals@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1fc597716edf9f5c7bc74e2fead4d7751467500486dd17092af90ccbd65c5fc4a1db2e9c86e9ed1a9f206f6a3403bbc07eab50b0c2b8e50f819b4118f2cf71ef + checksum: 9b5f43788b9ffcb8f2b445a16b1aa40fcf23cb0446a4649445f098ec6b4cb751f243a535da623d59fefe48f4c40552f5621187a61811779076bab26863e3373d languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.22.5" +"@babel/plugin-transform-typeof-symbol@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 277084dd3e873d62541f683173c7cf33b8317f7714335b7e861cc5b4b76f09acbf532a4c9dfbcf7756d29bc07b94b48bd9356af478f424865a86c7d5798be7c0 + checksum: 50e81d84c6059878be2a0e41e0d790cab10882cfb8fa85e8c2665ccb0b3cd7233f49197f17427bc7c1b36c80e07076640ecf1b641888d78b9cb91bc16478d84a languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/plugin-transform-typescript@npm:7.22.15" +"@babel/plugin-transform-typescript@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-typescript@npm:7.23.3" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" "@babel/helper-create-class-features-plugin": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-typescript": "npm:^7.22.5" + "@babel/plugin-syntax-typescript": "npm:^7.23.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e6a110f5b70334c6a503c90855dde5660f479e48262c8338261aeb30c70eedcfe885265b788c89f5bef757d99ab6704ee22bb0d23579597bc9415cfa86607458 + checksum: a3c738efcf491ceb1eee646f57c44990ee0c80465527b88fcfa0b7602688c4ff8c165a4c5b62caf05d968b095212018fd30a02879c12d37c657081f57b31fb26 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.10" +"@babel/plugin-transform-unicode-escapes@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 68425d56698650087faa33fe40adf8bde32efc1d05ce564f02b62526e7f5b2f4633278b0a10ee2e7e36fb89c79c3330c730d96b8a872acea4702c5645cee98f8 + checksum: f1ed54742dc982666f471df5d087cfda9c6dbf7842bec2d0f7893ed359b142a38c0210358f297ab5c7a3e11ec0dfb0e523de2e2edf48b62f257aaadd5f068866 languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.5" +"@babel/plugin-transform-unicode-property-regex@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.23.3" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" + "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: da424c1e99af0e920d21f7f121fb9503d0771597a4bd14130fb5f116407be29e9340c049d04733b3d8a132effe4f4585fe3cc9630ae3294a2df9199c8dfd7075 + checksum: dca5702d43fac70351623a12e4dfa454fd028a67498888522b644fd1a02534fabd440106897e886ebcc6ce6a39c58094ca29953b6f51bc67372aa8845a5ae49f languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.22.5" +"@babel/plugin-transform-unicode-regex@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.23.3" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" + "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4cfaf4bb724a5c55a6fb5b0ee6ebbeba78dc700b9bc0043715d4b37409d90b43c888735c613690a1ec0d8d8e41a500b9d3f0395aa9f55b174449c8407663684b + checksum: df824dcca2f6e731f61d69103e87d5dd974d8a04e46e28684a4ba935ae633d876bded09b8db890fd72d0caf7b9638e2672b753671783613cc78d472951e2df8c languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.5" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.23.3" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" + "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0 - checksum: af37b468332db051f0aaa144adbfab39574e570f613e121b58a551e3cbb7083c9f8c32a83ba2641172a4065128052643468438c19ad098cd62b2d97140dc483e + checksum: 30fe1d29af8395a867d40a63a250ca89072033d9bc7d4587eeebeaf4ad7f776aab83064321bfdb1d09d7e29a1d392852361f4f60a353f0f4d1a3b435dcbf256b languageName: node linkType: hard "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": - version: 7.23.2 - resolution: "@babel/preset-env@npm:7.23.2" + version: 7.23.3 + resolution: "@babel/preset-env@npm:7.23.3" dependencies: - "@babel/compat-data": "npm:^7.23.2" + "@babel/compat-data": "npm:^7.23.3" "@babel/helper-compilation-targets": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-validator-option": "npm:^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.22.15" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.23.3" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/plugin-syntax-class-properties": "npm:^7.12.13" "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" - "@babel/plugin-syntax-import-assertions": "npm:^7.22.5" - "@babel/plugin-syntax-import-attributes": "npm:^7.22.5" + "@babel/plugin-syntax-import-assertions": "npm:^7.23.3" + "@babel/plugin-syntax-import-attributes": "npm:^7.23.3" "@babel/plugin-syntax-import-meta": "npm:^7.10.4" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" @@ -1349,56 +1412,55 @@ __metadata: "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.22.5" - "@babel/plugin-transform-async-generator-functions": "npm:^7.23.2" - "@babel/plugin-transform-async-to-generator": "npm:^7.22.5" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.22.5" - "@babel/plugin-transform-block-scoping": "npm:^7.23.0" - "@babel/plugin-transform-class-properties": "npm:^7.22.5" - "@babel/plugin-transform-class-static-block": "npm:^7.22.11" - "@babel/plugin-transform-classes": "npm:^7.22.15" - "@babel/plugin-transform-computed-properties": "npm:^7.22.5" - "@babel/plugin-transform-destructuring": "npm:^7.23.0" - "@babel/plugin-transform-dotall-regex": "npm:^7.22.5" - "@babel/plugin-transform-duplicate-keys": "npm:^7.22.5" - "@babel/plugin-transform-dynamic-import": "npm:^7.22.11" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.22.5" - "@babel/plugin-transform-export-namespace-from": "npm:^7.22.11" - "@babel/plugin-transform-for-of": "npm:^7.22.15" - "@babel/plugin-transform-function-name": "npm:^7.22.5" - "@babel/plugin-transform-json-strings": "npm:^7.22.11" - "@babel/plugin-transform-literals": "npm:^7.22.5" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.22.11" - "@babel/plugin-transform-member-expression-literals": "npm:^7.22.5" - "@babel/plugin-transform-modules-amd": "npm:^7.23.0" - "@babel/plugin-transform-modules-commonjs": "npm:^7.23.0" - "@babel/plugin-transform-modules-systemjs": "npm:^7.23.0" - "@babel/plugin-transform-modules-umd": "npm:^7.22.5" + "@babel/plugin-transform-arrow-functions": "npm:^7.23.3" + "@babel/plugin-transform-async-generator-functions": "npm:^7.23.3" + "@babel/plugin-transform-async-to-generator": "npm:^7.23.3" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.23.3" + "@babel/plugin-transform-block-scoping": "npm:^7.23.3" + "@babel/plugin-transform-class-properties": "npm:^7.23.3" + "@babel/plugin-transform-class-static-block": "npm:^7.23.3" + "@babel/plugin-transform-classes": "npm:^7.23.3" + "@babel/plugin-transform-computed-properties": "npm:^7.23.3" + "@babel/plugin-transform-destructuring": "npm:^7.23.3" + "@babel/plugin-transform-dotall-regex": "npm:^7.23.3" + "@babel/plugin-transform-duplicate-keys": "npm:^7.23.3" + "@babel/plugin-transform-dynamic-import": "npm:^7.23.3" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.23.3" + "@babel/plugin-transform-export-namespace-from": "npm:^7.23.3" + "@babel/plugin-transform-for-of": "npm:^7.23.3" + "@babel/plugin-transform-function-name": "npm:^7.23.3" + "@babel/plugin-transform-json-strings": "npm:^7.23.3" + "@babel/plugin-transform-literals": "npm:^7.23.3" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.23.3" + "@babel/plugin-transform-member-expression-literals": "npm:^7.23.3" + "@babel/plugin-transform-modules-amd": "npm:^7.23.3" + "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" + "@babel/plugin-transform-modules-systemjs": "npm:^7.23.3" + "@babel/plugin-transform-modules-umd": "npm:^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.22.5" - "@babel/plugin-transform-new-target": "npm:^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.22.11" - "@babel/plugin-transform-numeric-separator": "npm:^7.22.11" - "@babel/plugin-transform-object-rest-spread": "npm:^7.22.15" - "@babel/plugin-transform-object-super": "npm:^7.22.5" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.22.11" - "@babel/plugin-transform-optional-chaining": "npm:^7.23.0" - "@babel/plugin-transform-parameters": "npm:^7.22.15" - "@babel/plugin-transform-private-methods": "npm:^7.22.5" - "@babel/plugin-transform-private-property-in-object": "npm:^7.22.11" - "@babel/plugin-transform-property-literals": "npm:^7.22.5" - "@babel/plugin-transform-regenerator": "npm:^7.22.10" - "@babel/plugin-transform-reserved-words": "npm:^7.22.5" - "@babel/plugin-transform-shorthand-properties": "npm:^7.22.5" - "@babel/plugin-transform-spread": "npm:^7.22.5" - "@babel/plugin-transform-sticky-regex": "npm:^7.22.5" - "@babel/plugin-transform-template-literals": "npm:^7.22.5" - "@babel/plugin-transform-typeof-symbol": "npm:^7.22.5" - "@babel/plugin-transform-unicode-escapes": "npm:^7.22.10" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.22.5" - "@babel/plugin-transform-unicode-regex": "npm:^7.22.5" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.22.5" + "@babel/plugin-transform-new-target": "npm:^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.23.3" + "@babel/plugin-transform-numeric-separator": "npm:^7.23.3" + "@babel/plugin-transform-object-rest-spread": "npm:^7.23.3" + "@babel/plugin-transform-object-super": "npm:^7.23.3" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.23.3" + "@babel/plugin-transform-optional-chaining": "npm:^7.23.3" + "@babel/plugin-transform-parameters": "npm:^7.23.3" + "@babel/plugin-transform-private-methods": "npm:^7.23.3" + "@babel/plugin-transform-private-property-in-object": "npm:^7.23.3" + "@babel/plugin-transform-property-literals": "npm:^7.23.3" + "@babel/plugin-transform-regenerator": "npm:^7.23.3" + "@babel/plugin-transform-reserved-words": "npm:^7.23.3" + "@babel/plugin-transform-shorthand-properties": "npm:^7.23.3" + "@babel/plugin-transform-spread": "npm:^7.23.3" + "@babel/plugin-transform-sticky-regex": "npm:^7.23.3" + "@babel/plugin-transform-template-literals": "npm:^7.23.3" + "@babel/plugin-transform-typeof-symbol": "npm:^7.23.3" + "@babel/plugin-transform-unicode-escapes": "npm:^7.23.3" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.23.3" + "@babel/plugin-transform-unicode-regex": "npm:^7.23.3" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.23.3" "@babel/preset-modules": "npm:0.1.6-no-external-plugins" - "@babel/types": "npm:^7.23.0" babel-plugin-polyfill-corejs2: "npm:^0.4.6" babel-plugin-polyfill-corejs3: "npm:^0.8.5" babel-plugin-polyfill-regenerator: "npm:^0.5.3" @@ -1406,7 +1468,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b5912f09dc92a8f6b93420f3274499e30255af6dbe5673075a30a5bfead1a651e5eb362c6b95e3ba48c6e6bd4e38b7a5aceebba99997ec7c83833e2e6af9abde + checksum: 36b02a86817ab5474bb74a8d62a110723b0b05904a52ddc5627cf89457525b8d5ac0739b8e435a6ae12ef8b90cd5fc191169898c3dc2ac9d2c84026b02f2580a languageName: node linkType: hard @@ -1424,33 +1486,33 @@ __metadata: linkType: hard "@babel/preset-react@npm:^7.12.5, @babel/preset-react@npm:^7.22.3": - version: 7.22.15 - resolution: "@babel/preset-react@npm:7.22.15" + version: 7.23.3 + resolution: "@babel/preset-react@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-validator-option": "npm:^7.22.15" - "@babel/plugin-transform-react-display-name": "npm:^7.22.5" + "@babel/plugin-transform-react-display-name": "npm:^7.23.3" "@babel/plugin-transform-react-jsx": "npm:^7.22.15" "@babel/plugin-transform-react-jsx-development": "npm:^7.22.5" - "@babel/plugin-transform-react-pure-annotations": "npm:^7.22.5" + "@babel/plugin-transform-react-pure-annotations": "npm:^7.23.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 80940aa494292b7f689d902b76828cb3ab4eaf4e6421107f23388b6ea7316ab25ccd817b766fde5c40787fd92f1cba1f660190bfd71965c902e49b42c9e290c2 + checksum: cecb2493e09fd4ffa5effcef1d06e968386b1bfe077a99834f7e8ef249208274fca62fe5a6b3986ef1c1c3900b2eb409adb528ae1b73dba31397b16f9262e83c languageName: node linkType: hard "@babel/preset-typescript@npm:^7.21.5": - version: 7.23.2 - resolution: "@babel/preset-typescript@npm:7.23.2" + version: 7.23.3 + resolution: "@babel/preset-typescript@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-validator-option": "npm:^7.22.15" - "@babel/plugin-syntax-jsx": "npm:^7.22.5" - "@babel/plugin-transform-modules-commonjs": "npm:^7.23.0" - "@babel/plugin-transform-typescript": "npm:^7.22.15" + "@babel/plugin-syntax-jsx": "npm:^7.23.3" + "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" + "@babel/plugin-transform-typescript": "npm:^7.23.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 40eb71e9959d97a0c2e89fe5cf4c9db7edea5b103618d4c4b5cc7a41dd8c66ab1b1922c443607427000d7bb63e135e8c5f268f35426b2ba00ce53f75bf3b0f8b + checksum: e72b654c7f0f08b35d7e1c0e3a59c0c13037f295c425760b8b148aa7dde01e6ddd982efc525710f997a1494fafdd55cb525738c016609e7e4d703d02014152b7 languageName: node linkType: hard @@ -1479,7 +1541,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": version: 7.22.15 resolution: "@babel/template@npm:7.22.15" dependencies: @@ -1508,6 +1570,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/traverse@npm:7.23.3" + dependencies: + "@babel/code-frame": "npm:^7.22.13" + "@babel/generator": "npm:^7.23.3" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/parser": "npm:^7.23.3" + "@babel/types": "npm:^7.23.3" + debug: "npm:^4.1.0" + globals: "npm:^11.1.0" + checksum: 3c2784f4765185126d64fd5eebce0413b7aee6d54f779998594a343a7f973a9693a441ba27533df84e7ab7ce22f1239c6837f35e903132a1b25f7fc7a67bc30f + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.23.0 resolution: "@babel/types@npm:7.23.0" @@ -1519,6 +1599,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.22.10, @babel/types@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/types@npm:7.23.3" + dependencies: + "@babel/helper-string-parser": "npm:^7.22.5" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: 371a10dd9c8d8ebf48fc5d9e1b327dafd74453f8ea582dcbddd1cee5ae34e8881b743e783a86c08c04dcd1849b1842455472a911ae8a1c185484fe9b7b5f1595 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" From 4812832620c47c477e5faac5c9862f56f82c4a41 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Nov 2023 10:16:44 +0000 Subject: [PATCH 19/24] Update dependency axios to v1.6.1 (#27773) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8ad9805b06..6356a2ec92 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4753,13 +4753,13 @@ __metadata: linkType: hard "axios@npm:^1.4.0": - version: 1.6.0 - resolution: "axios@npm:1.6.0" + version: 1.6.1 + resolution: "axios@npm:1.6.1" dependencies: follow-redirects: "npm:^1.15.0" form-data: "npm:^4.0.0" proxy-from-env: "npm:^1.1.0" - checksum: 2879e17b96cbca7e2096d231a44e2d0f03e657d79f8928ea38ec5fbaf5a5b7bf952d580cdb58a66ba328c26eb3528b89d5a32da57cc5cf89813786c044f7e9d6 + checksum: ca2c6f56659a7f19e4a99082f549fe151952f6fd8aa72ed148559ab2d6a32ce37cd5dc72ce6d4d3cd91f0c1e2617c7c95c20077e5e244a79f319a6c0ce41204f languageName: node linkType: hard From dec2796a4aa61ff8bd86cc803d4729b418d97879 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Nov 2023 11:16:53 +0100 Subject: [PATCH 20/24] Update dependency lint-staged to v15 (#27407) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 258 +++++++++++++++++++++++++-------------------------- 2 files changed, 125 insertions(+), 135 deletions(-) diff --git a/package.json b/package.json index 362c650132..e8f7f02e0e 100644 --- a/package.json +++ b/package.json @@ -208,7 +208,7 @@ "husky": "^8.0.3", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", - "lint-staged": "^13.2.2", + "lint-staged": "^15.0.0", "prettier": "^3.0.0", "react-test-renderer": "^18.2.0", "stylelint": "^15.10.1", diff --git a/yarn.lock b/yarn.lock index 6356a2ec92..1b2bfe0598 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2533,7 +2533,7 @@ __metadata: jest-environment-jsdom: "npm:^29.5.0" js-yaml: "npm:^4.1.0" jsdom: "npm:^22.1.0" - lint-staged: "npm:^13.2.2" + lint-staged: "npm:^15.0.0" lodash: "npm:^4.17.21" mark-loader: "npm:^0.1.6" marky: "npm:^1.2.5" @@ -4270,7 +4270,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0": +"ansi-escapes@npm:^4.2.1": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -4279,6 +4279,15 @@ __metadata: languageName: node linkType: hard +"ansi-escapes@npm:^5.0.0": + version: 5.0.0 + resolution: "ansi-escapes@npm:5.0.0" + dependencies: + type-fest: "npm:^1.0.2" + checksum: f705cc7fbabb981ddf51562cd950792807bccd7260cc3d9478a619dda62bff6634c87ca100f2545ac7aade9b72652c4edad8c7f0d31a0b949b5fa58f33eaf0d0 + languageName: node + linkType: hard + "ansi-html-community@npm:0.0.8": version: 0.0.8 resolution: "ansi-html-community@npm:0.0.8" @@ -5517,10 +5526,10 @@ __metadata: languageName: node linkType: hard -"chalk@npm:5.2.0": - version: 5.2.0 - resolution: "chalk@npm:5.2.0" - checksum: 8a519b35c239f96e041b7f1ed8fdd79d3ca2332a8366cb957378b8a1b8a4cdfb740d19628e8bf74654d4c0917aa10cf39c20752e177a1304eac29a1168a740e9 +"chalk@npm:5.3.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 languageName: node linkType: hard @@ -5677,22 +5686,12 @@ __metadata: languageName: node linkType: hard -"cli-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-cursor@npm:3.1.0" +"cli-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-cursor@npm:4.0.0" dependencies: - restore-cursor: "npm:^3.1.0" - checksum: 92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 - languageName: node - linkType: hard - -"cli-truncate@npm:^2.1.0": - version: 2.1.0 - resolution: "cli-truncate@npm:2.1.0" - dependencies: - slice-ansi: "npm:^3.0.0" - string-width: "npm:^4.2.0" - checksum: dfaa3df675bcef7a3254773de768712b590250420345a4c7ac151f041a4bacb4c25864b1377bee54a39b5925a030c00eabf014e312e3a4ac130952ed3b3879e9 + restore-cursor: "npm:^4.0.0" + checksum: e776e8c3c6727300d0539b0d25160b2bb56aed1a63942753ba1826b012f337a6f4b7ace3548402e4f2f13b5e16bfd751be672c44b203205e7eca8be94afec42c languageName: node linkType: hard @@ -5843,7 +5842,7 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^2.0.19": +"colorette@npm:^2.0.20": version: 2.0.20 resolution: "colorette@npm:2.0.20" checksum: e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 @@ -5866,10 +5865,10 @@ __metadata: languageName: node linkType: hard -"commander@npm:^10.0.0": - version: 10.0.1 - resolution: "commander@npm:10.0.1" - checksum: 53f33d8927758a911094adadda4b2cbac111a5b377d8706700587650fd8f45b0bbe336de4b5c3fe47fd61f420a3d9bd452b6e0e6e5600a7e74d7bf0174f6efe3 +"commander@npm:11.1.0": + version: 11.1.0 + resolution: "commander@npm:11.1.0" + checksum: 13cc6ac875e48780250f723fb81c1c1178d35c5decb1abb1b628b3177af08a8554e76b2c0f29de72d69eef7c864d12613272a71fabef8047922bc622ab75a179 languageName: node linkType: hard @@ -6502,7 +6501,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -7771,6 +7770,13 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 4ba5c00c506e6c786b4d6262cfbce90ddc14c10d4667e5c83ae993c9de88aa856033994dd2b35b83e8dc1170e224e66a319fa80adc4c32adcd2379bbc75da814 + languageName: node + linkType: hard + "events@npm:^3.0.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -7796,6 +7802,23 @@ __metadata: languageName: node linkType: hard +"execa@npm:8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: 2c52d8775f5bf103ce8eec9c7ab3059909ba350a5164744e9947ed14a53f51687c040a250bda833f906d1283aa8803975b84e6c8f7a7c42f99dc8ef80250d1af + languageName: node + linkType: hard + "execa@npm:^1.0.0": version: 1.0.0 resolution: "execa@npm:1.0.0" @@ -7828,7 +7851,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^7.0.0, execa@npm:^7.1.1": +"execa@npm:^7.1.1": version: 7.2.0 resolution: "execa@npm:7.2.0" dependencies: @@ -8477,6 +8500,13 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: 5c2181e98202b9dae0bb4a849979291043e5892eb40312b47f0c22b9414fc9b28a3b6063d2375705eb24abc41ecf97894d9a51f64ff021511b504477b27b4290 + languageName: node + linkType: hard + "get-symbol-description@npm:^1.0.0": version: 1.0.0 resolution: "get-symbol-description@npm:1.0.0" @@ -9077,6 +9107,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 5a9359073fe17a8b58e5a085e9a39a950366d9f00217c4ff5878bd312e09d80f460536ea6a3f260b5943a01fe55c158d1cea3fc7bee3d0520aeef04f6d915c82 + languageName: node + linkType: hard + "husky@npm:^8.0.3": version: 8.0.3 resolution: "husky@npm:8.0.3" @@ -10920,47 +10957,37 @@ __metadata: languageName: node linkType: hard -"lint-staged@npm:^13.2.2": - version: 13.2.3 - resolution: "lint-staged@npm:13.2.3" +"lint-staged@npm:^15.0.0": + version: 15.0.2 + resolution: "lint-staged@npm:15.0.2" dependencies: - chalk: "npm:5.2.0" - cli-truncate: "npm:^3.1.0" - commander: "npm:^10.0.0" - debug: "npm:^4.3.4" - execa: "npm:^7.0.0" + chalk: "npm:5.3.0" + commander: "npm:11.1.0" + debug: "npm:4.3.4" + execa: "npm:8.0.1" lilconfig: "npm:2.1.0" - listr2: "npm:^5.0.7" - micromatch: "npm:^4.0.5" - normalize-path: "npm:^3.0.0" - object-inspect: "npm:^1.12.3" - pidtree: "npm:^0.6.0" - string-argv: "npm:^0.3.1" - yaml: "npm:^2.2.2" + listr2: "npm:7.0.2" + micromatch: "npm:4.0.5" + pidtree: "npm:0.6.0" + string-argv: "npm:0.3.2" + yaml: "npm:2.3.3" bin: lint-staged: bin/lint-staged.js - checksum: 4907d2e60c8bd4b7ba354464a914e9db61d3e121232a3111bfe3e9f24d1ae8c9bd89c8ff19f819227a97fce0d797a33a62bcc29adebb37fb937e012a0a8b358b + checksum: 5c8806137c8c9c63e1156e16f2a2763586a9eab8f24713b95bbfd099308c83f85af2df622fdc326a9f0e455e657718f61f6d4a81067a5c77243e65e822c8f16c languageName: node linkType: hard -"listr2@npm:^5.0.7": - version: 5.0.8 - resolution: "listr2@npm:5.0.8" +"listr2@npm:7.0.2": + version: 7.0.2 + resolution: "listr2@npm:7.0.2" dependencies: - cli-truncate: "npm:^2.1.0" - colorette: "npm:^2.0.19" - log-update: "npm:^4.0.0" - p-map: "npm:^4.0.0" + cli-truncate: "npm:^3.1.0" + colorette: "npm:^2.0.20" + eventemitter3: "npm:^5.0.1" + log-update: "npm:^5.0.1" rfdc: "npm:^1.3.0" - rxjs: "npm:^7.8.0" - through: "npm:^2.3.8" - wrap-ansi: "npm:^7.0.0" - peerDependencies: - enquirer: ">= 2.3.0 < 3" - peerDependenciesMeta: - enquirer: - optional: true - checksum: 00f00ad18262909bafff21b42d2d94faa9ed3911d70094a12a1182e773533f9b3cfd78d83a81fdbfb7dbc42e3e3252093f504c822de152100a953a91f3adf7cb + wrap-ansi: "npm:^8.1.0" + checksum: 37b6501be84ebea66dcce07c5f86c224aff0c01c9fb43f5055cc38a063030281d58198aad0aad481f174438309831ddf5f763b890e820cd7b7b4f4a5dfa229c9 languageName: node linkType: hard @@ -11163,15 +11190,16 @@ __metadata: languageName: node linkType: hard -"log-update@npm:^4.0.0": - version: 4.0.0 - resolution: "log-update@npm:4.0.0" +"log-update@npm:^5.0.1": + version: 5.0.1 + resolution: "log-update@npm:5.0.1" dependencies: - ansi-escapes: "npm:^4.3.0" - cli-cursor: "npm:^3.1.0" - slice-ansi: "npm:^4.0.0" - wrap-ansi: "npm:^6.2.0" - checksum: 18b299e230432a156f2535660776406d15ba8bb7817dd3eaadd58004b363756d4ecaabcd658f9949f90b62ea7d3354423be3fdeb7a201ab951ec0e8d6139af86 + ansi-escapes: "npm:^5.0.0" + cli-cursor: "npm:^4.0.0" + slice-ansi: "npm:^5.0.0" + strip-ansi: "npm:^7.0.1" + wrap-ansi: "npm:^8.0.1" + checksum: 1050ea2027e80f32e132aace909987cb00c2719368c78b82ffca681a5b3f4020eeb5f4b4e310c47c35c6c36aff258c1d1bc51485ac44d6fdac9eb0a4275c539f languageName: node linkType: hard @@ -11463,6 +11491,16 @@ __metadata: languageName: node linkType: hard +"micromatch@npm:4.0.5, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: "npm:^3.0.2" + picomatch: "npm:^2.3.1" + checksum: 3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff + languageName: node + linkType: hard + "micromatch@npm:^3.0.4, micromatch@npm:^3.1.10, micromatch@npm:^3.1.4": version: 3.1.10 resolution: "micromatch@npm:3.1.10" @@ -11484,16 +11522,6 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" - dependencies: - braces: "npm:^3.0.2" - picomatch: "npm:^2.3.1" - checksum: 3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff - languageName: node - linkType: hard - "miller-rabin@npm:^4.0.0": version: 4.0.1 resolution: "miller-rabin@npm:4.0.1" @@ -12107,7 +12135,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.3, object-inspect@npm:^1.13.1, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.13.1, object-inspect@npm:^1.9.0": version: 1.13.1 resolution: "object-inspect@npm:1.13.1" checksum: fad603f408e345c82e946abdf4bfd774260a5ed3e5997a0b057c44153ac32c7271ff19e3a5ae39c858da683ba045ccac2f65245c12763ce4e8594f818f4a648d @@ -12757,7 +12785,7 @@ __metadata: languageName: node linkType: hard -"pidtree@npm:^0.6.0": +"pidtree@npm:0.6.0": version: 0.6.0 resolution: "pidtree@npm:0.6.0" bin: @@ -14517,13 +14545,13 @@ __metadata: languageName: node linkType: hard -"restore-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "restore-cursor@npm:3.1.0" +"restore-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "restore-cursor@npm:4.0.0" dependencies: onetime: "npm:^5.1.0" signal-exit: "npm:^3.0.2" - checksum: 8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f + checksum: 6f7da8c5e422ac26aa38354870b1afac09963572cf2879443540449068cb43476e9cbccf6f8de3e0171e0d6f7f533c2bc1a0a008003c9a525bbc098e89041318 languageName: node linkType: hard @@ -14651,15 +14679,6 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.8.0": - version: 7.8.1 - resolution: "rxjs@npm:7.8.1" - dependencies: - tslib: "npm:^2.1.0" - checksum: 3c49c1ecd66170b175c9cacf5cef67f8914dcbc7cd0162855538d365c83fea631167cacb644b3ce533b2ea0e9a4d0b12175186985f89d75abe73dbd8f7f06f68 - languageName: node - linkType: hard - "safe-array-concat@npm:^1.0.0, safe-array-concat@npm:^1.0.1": version: 1.0.1 resolution: "safe-array-concat@npm:1.0.1" @@ -15071,7 +15090,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^4.0.1": +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" checksum: 41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 @@ -15103,17 +15122,6 @@ __metadata: languageName: node linkType: hard -"slice-ansi@npm:^3.0.0": - version: 3.0.0 - resolution: "slice-ansi@npm:3.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - astral-regex: "npm:^2.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - checksum: 88083c9d0ca67d09f8b4c78f68833d69cabbb7236b74df5d741ad572bbf022deaf243fa54009cd434350622a1174ab267710fcc80a214ecc7689797fe00cb27c - languageName: node - linkType: hard - "slice-ansi@npm:^4.0.0": version: 4.0.0 resolution: "slice-ansi@npm:4.0.0" @@ -15539,7 +15547,7 @@ __metadata: languageName: node linkType: hard -"string-argv@npm:^0.3.1": +"string-argv@npm:0.3.2": version: 0.3.2 resolution: "string-argv@npm:0.3.2" checksum: 75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 @@ -16200,13 +16208,6 @@ __metadata: languageName: node linkType: hard -"through@npm:^2.3.8": - version: 2.3.8 - resolution: "through@npm:2.3.8" - checksum: 4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc - languageName: node - linkType: hard - "thunky@npm:^1.0.2": version: 1.1.0 resolution: "thunky@npm:1.1.0" @@ -16400,7 +16401,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.6.2, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0": +"tslib@npm:2.6.2, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb @@ -16470,7 +16471,7 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^1.0.1, type-fest@npm:^1.2.1, type-fest@npm:^1.2.2": +"type-fest@npm:^1.0.1, type-fest@npm:^1.0.2, type-fest@npm:^1.2.1, type-fest@npm:^1.2.2": version: 1.4.0 resolution: "type-fest@npm:1.4.0" checksum: a3c0f4ee28ff6ddf800d769eafafcdeab32efa38763c1a1b8daeae681920f6e345d7920bf277245235561d8117dab765cb5f829c76b713b4c9de0998a5397141 @@ -17683,18 +17684,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": +"wrap-ansi@npm:^8.0.1, wrap-ansi@npm:^8.1.0": version: 8.1.0 resolution: "wrap-ansi@npm:8.1.0" dependencies: @@ -17820,6 +17810,13 @@ __metadata: languageName: node linkType: hard +"yaml@npm:2.3.3": + version: 2.3.3 + resolution: "yaml@npm:2.3.3" + checksum: a0c56bf682159b0567e9cbbddf23efc2f6806f6450716d9be6ec5eb1af1b941e95c8d3dc9c47da20d1b6883a9d6c61e31cf98bb4b77ebca4396bf772657f2f00 + languageName: node + linkType: hard + "yaml@npm:^1.10.0": version: 1.10.2 resolution: "yaml@npm:1.10.2" @@ -17827,13 +17824,6 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.2.2": - version: 2.3.1 - resolution: "yaml@npm:2.3.1" - checksum: ed4c21a907fb1cd60a25177612fa46d95064a144623d269199817908475fe85bef20fb17406e3bdc175351b6488056a6f84beb7836e8c262646546a0220188e3 - languageName: node - linkType: hard - "yargs-parser@npm:^13.1.2": version: 13.1.2 resolution: "yargs-parser@npm:13.1.2" From 63c9102f8afb7853d6b42f335d44601139cf113a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 9 Nov 2023 07:57:23 -0500 Subject: [PATCH 21/24] Fix `RSpec/MessageChain` cop (#27776) --- .rubocop_todo.yml | 6 ---- .../session_activation_fabricator.rb | 2 +- spec/models/concerns/remotable_spec.rb | 4 ++- spec/models/session_activation_spec.rb | 36 ++++++++++++------- spec/models/setting_spec.rb | 7 ++-- 5 files changed, 32 insertions(+), 23 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index b3228bac6e..f9d14fd551 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -104,12 +104,6 @@ RSpec/LetSetup: - 'spec/services/unsuspend_account_service_spec.rb' - 'spec/workers/scheduler/user_cleanup_scheduler_spec.rb' -RSpec/MessageChain: - Exclude: - - 'spec/models/concerns/remotable_spec.rb' - - 'spec/models/session_activation_spec.rb' - - 'spec/models/setting_spec.rb' - RSpec/MultipleExpectations: Max: 8 diff --git a/spec/fabricators/session_activation_fabricator.rb b/spec/fabricators/session_activation_fabricator.rb index 4b5244cec6..655ec37aa8 100644 --- a/spec/fabricators/session_activation_fabricator.rb +++ b/spec/fabricators/session_activation_fabricator.rb @@ -2,5 +2,5 @@ Fabricator(:session_activation) do user { Fabricate.build(:user) } - session_id 'MyString' + session_id { sequence(:session_id) { |i| "session_id_#{i}" } } end diff --git a/spec/models/concerns/remotable_spec.rb b/spec/models/concerns/remotable_spec.rb index 6413b6f467..db690da3c2 100644 --- a/spec/models/concerns/remotable_spec.rb +++ b/spec/models/concerns/remotable_spec.rb @@ -69,7 +69,9 @@ RSpec.describe Remotable do context 'with an invalid URL' do before do - allow(Addressable::URI).to receive_message_chain(:parse, :normalize).with(url).with(no_args).and_raise(Addressable::URI::InvalidURIError) + parsed = instance_double(Addressable::URI) + allow(parsed).to receive(:normalize).with(no_args).and_raise(Addressable::URI::InvalidURIError) + allow(Addressable::URI).to receive(:parse).with(url).and_return(parsed) end it 'makes no request' do diff --git a/spec/models/session_activation_spec.rb b/spec/models/session_activation_spec.rb index 4012d46fd7..bed411c369 100644 --- a/spec/models/session_activation_spec.rb +++ b/spec/models/session_activation_spec.rb @@ -98,34 +98,44 @@ RSpec.describe SessionActivation do end context 'when id exists' do - let(:id) { '1' } + let!(:session_activation) { Fabricate(:session_activation) } - it 'calls where.destroy_all' do - expect(described_class).to receive_message_chain(:where, :destroy_all) - .with(session_id: id).with(no_args) + it 'destroys the record' do + described_class.deactivate(session_activation.session_id) - described_class.deactivate(id) + expect { session_activation.reload }.to raise_error(ActiveRecord::RecordNotFound) end end end describe '.purge_old' do - it 'calls order.offset.destroy_all' do - expect(described_class).to receive_message_chain(:order, :offset, :destroy_all) - .with('created_at desc').with(Rails.configuration.x.max_session_activations).with(no_args) + around do |example| + before = Rails.configuration.x.max_session_activations + Rails.configuration.x.max_session_activations = 1 + example.run + Rails.configuration.x.max_session_activations = before + end + let!(:oldest_session_activation) { Fabricate(:session_activation, created_at: 10.days.ago) } + let!(:newest_session_activation) { Fabricate(:session_activation, created_at: 5.days.ago) } + + it 'preserves the newest X records based on config' do described_class.purge_old + + expect { oldest_session_activation.reload }.to raise_error(ActiveRecord::RecordNotFound) + expect { newest_session_activation.reload }.to_not raise_error end end describe '.exclusive' do - let(:id) { '1' } + let!(:unwanted_session_activation) { Fabricate(:session_activation) } + let!(:wanted_session_activation) { Fabricate(:session_activation) } - it 'calls where.destroy_all' do - expect(described_class).to receive_message_chain(:where, :not, :destroy_all) - .with(session_id: id).with(no_args) + it 'preserves supplied record and destroys all others' do + described_class.exclusive(wanted_session_activation.session_id) - described_class.exclusive(id) + expect { unwanted_session_activation.reload }.to raise_error(ActiveRecord::RecordNotFound) + expect { wanted_session_activation.reload }.to_not raise_error end end end diff --git a/spec/models/setting_spec.rb b/spec/models/setting_spec.rb index 5f53ee5634..b08136a1c1 100644 --- a/spec/models/setting_spec.rb +++ b/spec/models/setting_spec.rb @@ -77,10 +77,13 @@ RSpec.describe Setting do let(:default_value) { { default_value: 'default_value' } } it 'calls default_value.with_indifferent_access.merge!' do - expect(default_value).to receive_message_chain(:with_indifferent_access, :merge!) - .with(db_val.value) + indifferent_hash = instance_double(Hash, merge!: nil) + allow(default_value).to receive(:with_indifferent_access).and_return(indifferent_hash) described_class[key] + + expect(default_value).to have_received(:with_indifferent_access) + expect(indifferent_hash).to have_received(:merge!).with(db_val.value) end end From 9b06c0f24a2d3fb5a453611fe8e1c938e2351e5a Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 9 Nov 2023 13:58:02 +0100 Subject: [PATCH 22/24] Fix Web UI not displaying appropriate explanation when a user hides their follows/followers (#27791) --- app/javascript/mastodon/api_types/accounts.ts | 1 + app/javascript/mastodon/features/followers/index.jsx | 5 ++++- app/javascript/mastodon/features/following/index.jsx | 5 ++++- app/javascript/mastodon/locales/en.json | 1 + app/javascript/mastodon/models/account.ts | 1 + app/serializers/rest/account_serializer.rb | 2 +- 6 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/api_types/accounts.ts b/app/javascript/mastodon/api_types/accounts.ts index ce55dc604a..985abf9463 100644 --- a/app/javascript/mastodon/api_types/accounts.ts +++ b/app/javascript/mastodon/api_types/accounts.ts @@ -42,4 +42,5 @@ export interface ApiAccountJSON { suspended?: boolean; limited?: boolean; memorial?: boolean; + hide_collections: boolean; } diff --git a/app/javascript/mastodon/features/followers/index.jsx b/app/javascript/mastodon/features/followers/index.jsx index e50b2171a0..4885f9ca99 100644 --- a/app/javascript/mastodon/features/followers/index.jsx +++ b/app/javascript/mastodon/features/followers/index.jsx @@ -45,6 +45,7 @@ const mapStateToProps = (state, { params: { acct, id } }) => { hasMore: !!state.getIn(['user_lists', 'followers', accountId, 'next']), isLoading: state.getIn(['user_lists', 'followers', accountId, 'isLoading'], true), suspended: state.getIn(['accounts', accountId, 'suspended'], false), + hideCollections: state.getIn(['accounts', accountId, 'hide_collections'], false), hidden: getAccountHidden(state, accountId), blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false), }; @@ -111,7 +112,7 @@ class Followers extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { accountId, accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading, suspended, hidden, remote, remoteUrl } = this.props; + const { accountId, accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading, suspended, hidden, remote, remoteUrl, hideCollections } = this.props; if (!isAccount) { return ( @@ -137,6 +138,8 @@ class Followers extends ImmutablePureComponent { emptyMessage = ; } else if (blockedBy) { emptyMessage = ; + } else if (hideCollections && accountIds.isEmpty()) { + emptyMessage = ; } else if (remote && accountIds.isEmpty()) { emptyMessage = ; } else { diff --git a/app/javascript/mastodon/features/following/index.jsx b/app/javascript/mastodon/features/following/index.jsx index 73e77aadd7..fb4a4d5c3a 100644 --- a/app/javascript/mastodon/features/following/index.jsx +++ b/app/javascript/mastodon/features/following/index.jsx @@ -45,6 +45,7 @@ const mapStateToProps = (state, { params: { acct, id } }) => { hasMore: !!state.getIn(['user_lists', 'following', accountId, 'next']), isLoading: state.getIn(['user_lists', 'following', accountId, 'isLoading'], true), suspended: state.getIn(['accounts', accountId, 'suspended'], false), + hideCollections: state.getIn(['accounts', accountId, 'hide_collections'], false), hidden: getAccountHidden(state, accountId), blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false), }; @@ -111,7 +112,7 @@ class Following extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { accountId, accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading, suspended, hidden, remote, remoteUrl } = this.props; + const { accountId, accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading, suspended, hidden, remote, remoteUrl, hideCollections } = this.props; if (!isAccount) { return ( @@ -137,6 +138,8 @@ class Following extends ImmutablePureComponent { emptyMessage = ; } else if (blockedBy) { emptyMessage = ; + } else if (hideCollections && accountIds.isEmpty()) { + emptyMessage = ; } else if (remote && accountIds.isEmpty()) { emptyMessage = ; } else { diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 4399b99951..9cbaf93054 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -222,6 +222,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_hides_collections": "This user has chosen to not make this information available", "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No posts here!", "empty_column.account_unavailable": "Profile unavailable", diff --git a/app/javascript/mastodon/models/account.ts b/app/javascript/mastodon/models/account.ts index f20d2a2d3e..00066e2840 100644 --- a/app/javascript/mastodon/models/account.ts +++ b/app/javascript/mastodon/models/account.ts @@ -93,6 +93,7 @@ export const accountDefaultValues: AccountShape = { memorial: false, limited: false, moved: null, + hide_collections: false, }; const AccountFactory = ImmutableRecord(accountDefaultValues); diff --git a/app/serializers/rest/account_serializer.rb b/app/serializers/rest/account_serializer.rb index 435ae36b74..8c6520b303 100644 --- a/app/serializers/rest/account_serializer.rb +++ b/app/serializers/rest/account_serializer.rb @@ -8,7 +8,7 @@ class REST::AccountSerializer < ActiveModel::Serializer attributes :id, :username, :acct, :display_name, :locked, :bot, :discoverable, :group, :created_at, :note, :url, :uri, :avatar, :avatar_static, :header, :header_static, - :followers_count, :following_count, :statuses_count, :last_status_at + :followers_count, :following_count, :statuses_count, :last_status_at, :hide_collections has_one :moved_to_account, key: :moved, serializer: REST::AccountSerializer, if: :moved_and_not_nested? From 548bb30b2acd2e1926682d2b1ef476a7178a6ae3 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 9 Nov 2023 08:05:57 -0500 Subject: [PATCH 23/24] Consolidate html page title output logic into helper (#27563) --- .haml-lint_todo.yml | 1 - app/helpers/application_helper.rb | 8 +++++ app/views/layouts/application.html.haml | 2 +- spec/helpers/application_helper_spec.rb | 46 +++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index 9686c177bd..3be2a3d490 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -31,4 +31,3 @@ linters: - 'app/views/admin/accounts/_buttons.html.haml' - 'app/views/admin/accounts/_local_account.html.haml' - 'app/views/admin/roles/_form.html.haml' - - 'app/views/layouts/application.html.haml' diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5f9d7e7c48..48d9119fbd 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -91,6 +91,14 @@ module ApplicationHelper end end + def html_title + safe_join( + [content_for(:page_title).to_s.chomp, title] + .select(&:present?), + ' - ' + ) + end + def title Rails.env.production? ? site_title : "#{site_title} (Dev)" end diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 4fe2f18bfb..1244fd5eb3 100755 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -24,7 +24,7 @@ %meta{ name: 'theme-color', content: '#191b22' }/ %meta{ name: 'apple-mobile-web-app-capable', content: 'yes' }/ - %title= content_for?(:page_title) ? safe_join([yield(:page_title).chomp.html_safe, title], ' - ') : title + %title= html_title = stylesheet_pack_tag 'common', media: 'all', crossorigin: 'anonymous' = stylesheet_pack_tag current_theme, media: 'all', crossorigin: 'anonymous' diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 3f3638e462..3cc88014cd 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -296,5 +296,51 @@ describe ApplicationHelper do expect(helper.title).to eq 'site title' expect(Rails.env).to have_received(:production?) end + + it 'returns site title with note on non-production environment' do + Setting.site_title = 'site title' + allow(Rails.env).to receive(:production?).and_return(false) + expect(helper.title).to eq 'site title (Dev)' + expect(Rails.env).to have_received(:production?) + end + end + + describe 'html_title' do + before do + allow(Rails.env).to receive(:production?).and_return(true) + end + + around do |example| + site_title = Setting.site_title + example.run + Setting.site_title = site_title + end + + context 'with a page_title content_for value' do + it 'uses the value in the html title' do + Setting.site_title = 'Site Title' + helper.content_for(:page_title, 'Test Value') + + expect(helper.html_title).to eq 'Test Value - Site Title' + expect(helper.html_title).to be_html_safe + end + + it 'removes extra new lines' do + Setting.site_title = 'Site Title' + helper.content_for(:page_title, "Test Value\n") + + expect(helper.html_title).to eq 'Test Value - Site Title' + expect(helper.html_title).to be_html_safe + end + end + + context 'without any page_title content_for value' do + it 'returns the site title' do + Setting.site_title = 'Site Title' + + expect(helper.html_title).to eq 'Site Title' + expect(helper.html_title).to be_html_safe + end + end end end From b87bfb8c96c8491f1228e0258d05119f3420db05 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Thu, 9 Nov 2023 08:30:07 -0600 Subject: [PATCH 24/24] Fix Yarn version in devcontainer (#27788) --- .devcontainer/Dockerfile | 2 +- .devcontainer/post-create.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 3c96546b49..b5e72a0973 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -15,6 +15,6 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ RUN gem install foreman # [Optional] Uncomment this line to install global node packages. -RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g yarn" 2>&1 +RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && corepack enable" 2>&1 COPY welcome-message.txt /usr/local/etc/vscode-dev-containers/first-run-notice.txt diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh index 8d4d63847a..20f3437f4e 100755 --- a/.devcontainer/post-create.sh +++ b/.devcontainer/post-create.sh @@ -11,6 +11,7 @@ bundle install git checkout -- Gemfile.lock # Fetch Javascript dependencies +corepack prepare yarn install --immutable # [re]create, migrate, and seed the test database