diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000000..d5734664cc --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,9 @@ +[production] +defaults +not IE 11 +not dead + +[development] +last 1 chrome version +last 1 firefox version +last 1 safari version diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 628efc8ec5..9d9e54d4f8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -11,7 +11,8 @@ "extensions": [ "EditorConfig.EditorConfig", "dbaeumer.vscode-eslint", - "rebornix.Ruby" + "rebornix.Ruby", + "webben.browserslist" ], // Use 'forwardPorts' to make a list of ports inside the container available locally. diff --git a/Gemfile b/Gemfile index 28e696b27f..c8d58b06ed 100644 --- a/Gemfile +++ b/Gemfile @@ -81,7 +81,7 @@ gem 'scenic', '~> 1.6' gem 'sidekiq', '~> 6.4' gem 'sidekiq-scheduler', '~> 4.0' gem 'sidekiq-unique-jobs', '~> 7.1' -gem 'sidekiq-bulk', '~>0.2.0' +gem 'sidekiq-bulk', '~> 0.2.0' gem 'simple-navigation', '~> 4.3' gem 'simple_form', '~> 5.1' gem 'sprockets-rails', '~> 3.4', require: 'sprockets/railtie' @@ -116,7 +116,7 @@ end group :test do gem 'capybara', '~> 3.37' gem 'climate_control', '~> 0.2' - gem 'faker', '~> 2.20' + gem 'faker', '~> 2.21' gem 'microformats', '~> 4.2' gem 'rails-controller-testing', '~> 1.0' gem 'rspec-sidekiq', '~> 3.1' @@ -134,7 +134,7 @@ group :development do gem 'letter_opener', '~> 1.8' gem 'letter_opener_web', '~> 2.0' gem 'memory_profiler' - gem 'rubocop', '~> 1.28', require: false + gem 'rubocop', '~> 1.29', require: false gem 'rubocop-rails', '~> 2.14', require: false gem 'brakeman', '~> 5.2', require: false gem 'bundler-audit', '~> 0.9', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 6f796429d2..3218adceec 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -219,7 +219,7 @@ GEM tzinfo excon (0.76.0) fabrication (2.28.0) - faker (2.20.0) + faker (2.21.0) i18n (>= 1.8.11, < 2) faraday (1.9.3) faraday-em_http (~> 1.0) @@ -571,16 +571,16 @@ GEM rspec-support (3.11.0) rspec_junit_formatter (0.5.1) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (1.28.2) + rubocop (1.29.1) parallel (~> 1.10) parser (>= 3.1.0.0) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) - rexml + rexml (>= 3.2.5, < 4.0) rubocop-ast (>= 1.17.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.17.0) + rubocop-ast (1.18.0) parser (>= 3.1.1.0) rubocop-rails (2.14.2) activesupport (>= 4.2.0) @@ -603,7 +603,7 @@ GEM railties (>= 4.0.0) securecompare (1.0.0) semantic_range (3.0.0) - sidekiq (6.4.1) + sidekiq (6.4.2) connection_pool (>= 2.2.2) rack (~> 2.0) redis (>= 4.2.0) @@ -760,7 +760,7 @@ DEPENDENCIES dotenv-rails (~> 2.7) ed25519 (~> 1.3) fabrication (~> 2.28) - faker (~> 2.20) + faker (~> 2.21) fast_blank (~> 1.0) fastimage fog-core (<= 2.1.0) @@ -825,7 +825,7 @@ DEPENDENCIES rspec-rails (~> 5.1) rspec-sidekiq (~> 3.1) rspec_junit_formatter (~> 0.5) - rubocop (~> 1.28) + rubocop (~> 1.29) rubocop-rails (~> 2.14) ruby-progressbar (~> 1.11) sanitize (~> 6.0) diff --git a/app/chewy/accounts_index.rb b/app/chewy/accounts_index.rb index 6f9ea76e9a..e38e14a106 100644 --- a/app/chewy/accounts_index.rb +++ b/app/chewy/accounts_index.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class AccountsIndex < Chewy::Index - settings index: { refresh_interval: '5m' }, analysis: { + settings index: { refresh_interval: '30s' }, analysis: { analyzer: { content: { tokenizer: 'whitespace', @@ -23,7 +23,7 @@ class AccountsIndex < Chewy::Index }, } - index_scope ::Account.searchable.includes(:account_stat), delete_if: ->(account) { account.destroyed? || !account.searchable? } + index_scope ::Account.searchable.includes(:account_stat) root date_detection: false do field :id, type: 'long' @@ -36,8 +36,8 @@ class AccountsIndex < Chewy::Index field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content' end - field :following_count, type: 'long', value: ->(account) { account.following.local.count } - field :followers_count, type: 'long', value: ->(account) { account.followers.local.count } + field :following_count, type: 'long', value: ->(account) { account.following_count } + field :followers_count, type: 'long', value: ->(account) { account.followers_count } field :last_status_at, type: 'date', value: ->(account) { account.last_status_at || account.created_at } end end diff --git a/app/chewy/statuses_index.rb b/app/chewy/statuses_index.rb index 1304aeedbd..6dd4fb18b0 100644 --- a/app/chewy/statuses_index.rb +++ b/app/chewy/statuses_index.rb @@ -3,7 +3,7 @@ class StatusesIndex < Chewy::Index include FormattingHelper - settings index: { refresh_interval: '15m' }, analysis: { + settings index: { refresh_interval: '30s' }, analysis: { filter: { english_stop: { type: 'stop', @@ -33,6 +33,8 @@ class StatusesIndex < Chewy::Index }, } + # We do not use delete_if option here because it would call a method that we + # expect to be called with crutches without crutches, causing n+1 queries index_scope ::Status.unscoped.kept.without_reblogs.includes(:media_attachments, :preloadable_poll) crutch :mentions do |collection| diff --git a/app/chewy/tags_index.rb b/app/chewy/tags_index.rb index f9db2b03af..df3d9e4cce 100644 --- a/app/chewy/tags_index.rb +++ b/app/chewy/tags_index.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class TagsIndex < Chewy::Index - settings index: { refresh_interval: '15m' }, analysis: { + settings index: { refresh_interval: '30s' }, analysis: { analyzer: { content: { tokenizer: 'keyword', @@ -23,7 +23,11 @@ class TagsIndex < Chewy::Index }, } - index_scope ::Tag.listable, delete_if: ->(tag) { tag.destroyed? || !tag.listable? } + index_scope ::Tag.listable + + crutch :time_period do + 7.days.ago.to_date..0.days.ago.to_date + end root date_detection: false do field :name, type: 'text', analyzer: 'content' do @@ -31,7 +35,7 @@ class TagsIndex < Chewy::Index end field :reviewed, type: 'boolean', value: ->(tag) { tag.reviewed? } - field :usage, type: 'long', value: ->(tag) { tag.history.reduce(0) { |total, day| total + day.accounts } } + field :usage, type: 'long', value: ->(tag, crutches) { tag.history.aggregate(crutches.time_period).accounts } field :last_status_at, type: 'date', value: ->(tag) { tag.last_status_at || tag.created_at } end end diff --git a/app/javascript/flavours/glitch/features/compose/components/search_results.js b/app/javascript/flavours/glitch/features/compose/components/search_results.js index d92a6bf6bc..e82ee2ca2c 100644 --- a/app/javascript/flavours/glitch/features/compose/components/search_results.js +++ b/app/javascript/flavours/glitch/features/compose/components/search_results.js @@ -48,6 +48,9 @@ class SearchResults extends ImmutablePureComponent { render () { const { intl, results, suggestions, dismissSuggestion, searchTerm } = this.props; + let accounts, statuses, hashtags; + let count = 0; + if (searchTerm === '' && !suggestions.isEmpty()) { return (
#{ERB::Util.h(code).gsub("\n", '
')}
HTML
end
diff --git a/app/lib/importer/accounts_index_importer.rb b/app/lib/importer/accounts_index_importer.rb
new file mode 100644
index 0000000000..792a31b1bd
--- /dev/null
+++ b/app/lib/importer/accounts_index_importer.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+class Importer::AccountsIndexImporter < Importer::BaseImporter
+ def import!
+ scope.includes(:account_stat).find_in_batches(batch_size: @batch_size) do |tmp|
+ in_work_unit(tmp) do |accounts|
+ bulk = Chewy::Index::Import::BulkBuilder.new(index, to_index: accounts).bulk_body
+
+ indexed = bulk.select { |entry| entry[:index] }.size
+ deleted = bulk.select { |entry| entry[:delete] }.size
+
+ Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
+
+ [indexed, deleted]
+ end
+ end
+
+ wait!
+ end
+
+ private
+
+ def index
+ AccountsIndex
+ end
+
+ def scope
+ Account.searchable
+ end
+end
diff --git a/app/lib/importer/base_importer.rb b/app/lib/importer/base_importer.rb
new file mode 100644
index 0000000000..ea522c600c
--- /dev/null
+++ b/app/lib/importer/base_importer.rb
@@ -0,0 +1,87 @@
+# frozen_string_literal: true
+
+class Importer::BaseImporter
+ # @param [Integer] batch_size
+ # @param [Concurrent::ThreadPoolExecutor] executor
+ def initialize(batch_size:, executor:)
+ @batch_size = batch_size
+ @executor = executor
+ @wait_for = Concurrent::Set.new
+ end
+
+ # Callback to run when a concurrent work unit completes
+ # @param [Proc]
+ def on_progress(&block)
+ @on_progress = block
+ end
+
+ # Callback to run when a concurrent work unit fails
+ # @param [Proc]
+ def on_failure(&block)
+ @on_failure = block
+ end
+
+ # Reduce resource usage during and improve speed of indexing
+ def optimize_for_import!
+ Chewy.client.indices.put_settings index: index.index_name, body: { index: { refresh_interval: -1 } }
+ end
+
+ # Restore original index settings
+ def optimize_for_search!
+ Chewy.client.indices.put_settings index: index.index_name, body: { index: { refresh_interval: index.settings_hash[:settings][:index][:refresh_interval] } }
+ end
+
+ # Estimate the amount of documents that would be indexed. Not exact!
+ # @returns [Integer]
+ def estimate!
+ ActiveRecord::Base.connection_pool.with_connection { |connection| connection.select_one("SELECT reltuples AS estimate FROM pg_class WHERE relname = '#{index.adapter.target.table_name}'")['estimate'].to_i }
+ end
+
+ # Import data from the database into the index
+ def import!
+ raise NotImplementedError
+ end
+
+ # Remove documents from the index that no longer exist in the database
+ def clean_up!
+ index.scroll_batches do |documents|
+ ids = documents.map { |doc| doc['_id'] }
+ existence_map = index.adapter.target.where(id: ids).pluck(:id).each_with_object({}) { |id, map| map[id.to_s] = true }
+ tmp = ids.reject { |id| existence_map[id] }
+
+ next if tmp.empty?
+
+ in_work_unit(tmp) do |deleted_ids|
+ bulk = Chewy::Index::Import::BulkBuilder.new(index, delete: deleted_ids).bulk_body
+
+ Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
+
+ [0, bulk.size]
+ end
+ end
+
+ wait!
+ end
+
+ protected
+
+ def in_work_unit(*args, &block)
+ work_unit = Concurrent::Promises.future_on(@executor, *args, &block)
+
+ work_unit.on_fulfillment!(&@on_progress)
+ work_unit.on_rejection!(&@on_failure)
+ work_unit.on_resolution! { @wait_for.delete(work_unit) }
+
+ @wait_for << work_unit
+ rescue Concurrent::RejectedExecutionError
+ sleep(0.1) && retry # Backpressure
+ end
+
+ def wait!
+ Concurrent::Promises.zip(*@wait_for).wait
+ end
+
+ def index
+ raise NotImplementedError
+ end
+end
diff --git a/app/lib/importer/statuses_index_importer.rb b/app/lib/importer/statuses_index_importer.rb
new file mode 100644
index 0000000000..7c65325600
--- /dev/null
+++ b/app/lib/importer/statuses_index_importer.rb
@@ -0,0 +1,89 @@
+# frozen_string_literal: true
+
+class Importer::StatusesIndexImporter < Importer::BaseImporter
+ def import!
+ # The idea is that instead of iterating over all statuses in the database
+ # and calculating the searchable_by for each of them (majority of which
+ # would be empty), we approach the index from the other end
+
+ scopes.each do |scope|
+ # We could be tempted to keep track of status IDs we have already processed
+ # from a different scope to avoid indexing them multiple times, but that
+ # could end up being a very large array
+
+ scope.find_in_batches(batch_size: @batch_size) do |tmp|
+ in_work_unit(tmp.map(&:status_id)) do |status_ids|
+ bulk = ActiveRecord::Base.connection_pool.with_connection do
+ Chewy::Index::Import::BulkBuilder.new(index, to_index: Status.includes(:media_attachments, :preloadable_poll).where(id: status_ids)).bulk_body
+ end
+
+ indexed = 0
+ deleted = 0
+
+ # We can't use the delete_if proc to do the filtering because delete_if
+ # is called before rendering the data and we need to filter based
+ # on the results of the filter, so this filtering happens here instead
+ bulk.map! do |entry|
+ new_entry = begin
+ if entry[:index] && entry.dig(:index, :data, 'searchable_by').blank?
+ { delete: entry[:index].except(:data) }
+ else
+ entry
+ end
+ end
+
+ if new_entry[:index]
+ indexed += 1
+ else
+ deleted += 1
+ end
+
+ new_entry
+ end
+
+ Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
+
+ [indexed, deleted]
+ end
+ end
+ end
+
+ wait!
+ end
+
+ private
+
+ def index
+ StatusesIndex
+ end
+
+ def scopes
+ [
+ local_statuses_scope,
+ local_mentions_scope,
+ local_favourites_scope,
+ local_votes_scope,
+ local_bookmarks_scope,
+ ]
+ end
+
+ def local_mentions_scope
+ Mention.where(account: Account.local, silent: false).select(:id, :status_id)
+ end
+
+ def local_favourites_scope
+ Favourite.where(account: Account.local).select(:id, :status_id)
+ end
+
+ def local_bookmarks_scope
+ Bookmark.select(:id, :status_id)
+ end
+
+ def local_votes_scope
+ Poll.joins(:votes).where(votes: { account: Account.local }).select('polls.id, polls.status_id')
+ end
+
+ def local_statuses_scope
+ Status.local.select('id, coalesce(reblog_of_id, id) as status_id')
+ end
+end
diff --git a/app/lib/importer/tags_index_importer.rb b/app/lib/importer/tags_index_importer.rb
new file mode 100644
index 0000000000..f5bd8f052b
--- /dev/null
+++ b/app/lib/importer/tags_index_importer.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+class Importer::TagsIndexImporter < Importer::BaseImporter
+ def import!
+ index.adapter.default_scope.find_in_batches(batch_size: @batch_size) do |tmp|
+ in_work_unit(tmp) do |tags|
+ bulk = Chewy::Index::Import::BulkBuilder.new(index, to_index: tags).bulk_body
+
+ indexed = bulk.select { |entry| entry[:index] }.size
+ deleted = bulk.select { |entry| entry[:delete] }.size
+
+ Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
+
+ [indexed, deleted]
+ end
+ end
+
+ wait!
+ end
+
+ private
+
+ def index
+ TagsIndex
+ end
+end
diff --git a/app/models/admin/account_action.rb b/app/models/admin/account_action.rb
index 2379758801..aed3bc0c7d 100644
--- a/app/models/admin/account_action.rb
+++ b/app/models/admin/account_action.rb
@@ -164,8 +164,8 @@ class Admin::AccountAction
def reports
@reports ||= begin
- if type == 'none' && with_report?
- [report]
+ if type == 'none'
+ with_report? ? [report] : []
else
Report.where(target_account: target_account).unresolved
end
diff --git a/app/models/trends/history.rb b/app/models/trends/history.rb
index 608e337924..74723e35c9 100644
--- a/app/models/trends/history.rb
+++ b/app/models/trends/history.rb
@@ -11,11 +11,11 @@ class Trends::History
end
def uses
- redis.mget(*@days.map { |day| day.key_for(:uses) }).map(&:to_i).sum
+ with_redis { |redis| redis.mget(*@days.map { |day| day.key_for(:uses) }).map(&:to_i).sum }
end
def accounts
- redis.pfcount(*@days.map { |day| day.key_for(:accounts) })
+ with_redis { |redis| redis.pfcount(*@days.map { |day| day.key_for(:accounts) }) }
end
end
@@ -33,19 +33,21 @@ class Trends::History
attr_reader :day
def accounts
- redis.pfcount(key_for(:accounts))
+ with_redis { |redis| redis.pfcount(key_for(:accounts)) }
end
def uses
- redis.get(key_for(:uses))&.to_i || 0
+ with_redis { |redis| redis.get(key_for(:uses))&.to_i || 0 }
end
def add(account_id)
- redis.pipelined do
- redis.incrby(key_for(:uses), 1)
- redis.pfadd(key_for(:accounts), account_id)
- redis.expire(key_for(:uses), EXPIRE_AFTER)
- redis.expire(key_for(:accounts), EXPIRE_AFTER)
+ with_redis do |redis|
+ redis.pipelined do |pipeline|
+ pipeline.incrby(key_for(:uses), 1)
+ pipeline.pfadd(key_for(:accounts), account_id)
+ pipeline.expire(key_for(:uses), EXPIRE_AFTER)
+ pipeline.expire(key_for(:accounts), EXPIRE_AFTER)
+ end
end
end
diff --git a/app/services/activitypub/fetch_remote_status_service.rb b/app/services/activitypub/fetch_remote_status_service.rb
index 9672b3d2b6..8030982450 100644
--- a/app/services/activitypub/fetch_remote_status_service.rb
+++ b/app/services/activitypub/fetch_remote_status_service.rb
@@ -30,6 +30,7 @@ class ActivityPub::FetchRemoteStatusService < BaseService
end
return if activity_json.nil? || object_uri.nil? || !trustworthy_attribution?(@json['id'], actor_uri)
+ return ActivityPub::TagManager.instance.uri_to_resource(object_uri, Status) if ActivityPub::TagManager.instance.local_uri?(object_uri)
actor = account_from_uri(actor_uri)
diff --git a/app/workers/scheduler/indexing_scheduler.rb b/app/workers/scheduler/indexing_scheduler.rb
new file mode 100644
index 0000000000..3a6f47a29a
--- /dev/null
+++ b/app/workers/scheduler/indexing_scheduler.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+class Scheduler::IndexingScheduler
+ include Sidekiq::Worker
+ include Redisable
+
+ sidekiq_options retry: 0
+
+ def perform
+ indexes.each do |type|
+ with_redis do |redis|
+ ids = redis.smembers("chewy:queue:#{type.name}")
+
+ type.import!(ids)
+
+ redis.pipelined do |pipeline|
+ ids.each { |id| pipeline.srem("chewy:queue:#{type.name}", id) }
+ end
+ end
+ end
+ end
+
+ def indexes
+ [AccountsIndex, TagsIndex, StatusesIndex]
+ end
+end
diff --git a/config/application.rb b/config/application.rb
index 64987cfe7b..24fa2a9781 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -38,7 +38,7 @@ require_relative '../lib/mastodon/version'
require_relative '../lib/mastodon/rack_middleware'
require_relative '../lib/devise/two_factor_ldap_authenticatable'
require_relative '../lib/devise/two_factor_pam_authenticatable'
-require_relative '../lib/chewy/strategy/custom_sidekiq'
+require_relative '../lib/chewy/strategy/mastodon'
require_relative '../lib/webpacker/manifest_extensions'
require_relative '../lib/webpacker/helper_extensions'
require_relative '../lib/rails/engine_extensions'
diff --git a/config/initializers/chewy.rb b/config/initializers/chewy.rb
index f303fc54d3..752fc3c6df 100644
--- a/config/initializers/chewy.rb
+++ b/config/initializers/chewy.rb
@@ -13,15 +13,14 @@ Chewy.settings = {
journal: false,
user: user,
password: password,
- sidekiq: { queue: 'pull' },
}
# We use our own async strategy even outside the request-response
# cycle, which takes care of checking if Elasticsearch is enabled
# or not. However, mind that for the Rails console, the :urgent
# strategy is set automatically with no way to override it.
-Chewy.root_strategy = :custom_sidekiq
-Chewy.request_strategy = :custom_sidekiq
+Chewy.root_strategy = :mastodon
+Chewy.request_strategy = :mastodon
Chewy.use_after_commit_callbacks = false
module Chewy
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index a9f0c17302..d4cc81f1b3 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -496,6 +496,13 @@ ar:
delivery_error_days: أيام أخطاء التوصيل
delivery_error_hint: إذا كان التوصيل غير ممكناً لـ%{count} يوم، فستوضع عليها علامة {غير قابلة للتسليم} تلقائياً.
empty: لم يتم العثور على نطاقات.
+ known_accounts:
+ few: "%{count} حسابات معروفة"
+ many: "%{count} حسابًا معروفًا"
+ one: حساب %{count} معروف
+ other: "%{count} حساب معروف"
+ two: حسابان %{count} معروفان
+ zero: "%{count} حسابًا معروفًا"
moderation:
all: كافتها
limited: محدود
@@ -1389,6 +1396,7 @@ ar:
open_in_web: افتح في الويب
over_character_limit: تم تجاوز حد الـ %{max} حرف المسموح بها
pin_errors:
+ direct: لا يمكن تثبيت المنشورات التي يراها فقط المتسخدمون المشار إليهم
limit: لقد بلغت الحد الأقصى للمنشورات المثبتة
ownership: لا يمكن تثبيت منشور نشره شخص آخر
reblog: لا يمكن تثبيت ترقية
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 79ed79d3b9..58be571a82 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -1329,7 +1329,7 @@ de:
last_active: Zuletzt aktiv
most_recent: Neuste
moved: Umgezogen
- mutual: Bekannt
+ mutual: Gegenseitig
primary: Primär
relationship: Beziehung
remove_selected_domains: Entferne alle Follower von den ausgewählten Domains
@@ -1484,7 +1484,7 @@ de:
enabled: Automatisch alte Beiträge löschen
enabled_hint: Löscht automatisch deine Beiträge, sobald sie einen bestimmten Altersgrenzwert erreicht haben, es sei denn, sie entsprechen einer der folgenden Ausnahmen
exceptions: Ausnahmen
- explanation: Da das Löschen von Beiträgen eine kostspielige Operation ist, geschieht dies langsam im Laufe der Zeit, wenn der Server sonst nicht beschäftigt ist. Aus diesem Grund können deine Beiträge gelöscht werden, eine Weile nachdem sie die Altersgrenze erreicht haben.
+ explanation: Damit Mastodon nicht durch das Löschen von Beiträgen ausgebremst wird, wartet der Server damit bis wenig los ist. Aus diesem Grund werden deine Beiträge ggf. erst einige Zeit nach Erreichen der Altersgrenze gelöscht.
ignore_favs: Favoriten ignorieren
ignore_reblogs: Boosts ignorieren
interaction_exceptions: Ausnahmen basierend auf Interaktionen
diff --git a/config/locales/devise.gl.yml b/config/locales/devise.gl.yml
index 0bb52d8e2b..7ea0229927 100644
--- a/config/locales/devise.gl.yml
+++ b/config/locales/devise.gl.yml
@@ -92,7 +92,7 @@ gl:
signed_up_but_inactive: A túa conta foi rexistada. Porén aínda non está activada.
signed_up_but_locked: A túa conta foi rexistada. Porén está bloqueada.
signed_up_but_pending: Unha mensaxe cunha ligazón de confirmación foi enviada ó teu enderezo de email. Após premer na ligazón, revisaremos a túa aplicación. Serás notificado se a túa conta é aprobada.
- signed_up_but_unconfirmed: Unha mensaxe cunha ligazón de confirmación foi enviada ó teu email. Por favor, segue esa ligazón para activar a túa conta. Comproba o teu cartafol de correo lixo (spam) se ves que non recibiches o correo.
+ signed_up_but_unconfirmed: Enviouse unha mensaxe cunha ligazón de confirmación ao teu email. Por favor, preme nesa ligazón para activar a túa conta. Comproba o teu cartafol de correo lixo (spam) se ves que non recibiches o correo.
update_needs_confirmation: Actualizaches a túa conta de xeito correcto, pero precisamos verificar o teu novo enderezo de email. Por favor, revisa o teu email e segue a ligazón para confirmar o teu novo enderezo de email. Comproba o teu cartafol de correo lixo (spam) se ves que non recibiches o correo.
updated: A túa conta foi actualizada de xeito correcto.
sessions:
diff --git a/config/locales/devise.ru.yml b/config/locales/devise.ru.yml
index ada7867f2d..d2903ce23d 100644
--- a/config/locales/devise.ru.yml
+++ b/config/locales/devise.ru.yml
@@ -57,7 +57,7 @@ ru:
two_factor_recovery_codes_changed:
explanation: Предыдущие резервные коды были аннулированы и созданы новые.
subject: 'Mastodon: Резервные коды двуфакторной авторизации обновлены'
- title: Резервные коды 2ФА изменены
+ title: Коды восстановления 2FA изменены
unlock_instructions:
subject: 'Mastodon: Инструкция по разблокировке'
webauthn_credential:
diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml
index 93cd0c55a4..684b993abc 100644
--- a/config/locales/doorkeeper.pt-BR.yml
+++ b/config/locales/doorkeeper.pt-BR.yml
@@ -70,6 +70,7 @@ pt-BR:
confirmations:
revoke: Você tem certeza?
index:
+ authorized_at: Autorizado em %{date}
never_used: Nunca usado
scopes: Permissões
superapp: Interno
@@ -140,6 +141,7 @@ pt-BR:
admin:write: alterar todos os dados no servidor
admin:write:accounts: executar ações de moderação em contas
admin:write:reports: executar ações de moderação em denúncias
+ crypto: usar criptografia de ponta-a-ponta
follow: alterar o relacionamento das contas
push: receber notificações push
read: ler todos os dados da sua conta
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index d7e08e9a52..0609d8735a 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -791,6 +791,7 @@ eo:
strikes:
title_actions:
delete_statuses: Forigo de afiŝo
+ none: Averto
domain_validator:
invalid_domain: ne estas valida domajna nomo
errors:
@@ -861,6 +862,7 @@ eo:
changes_saved_msg: Ŝanĝoj sukcese konservitaj!
copy: Kopii
delete: Forigi
+ none: Neniu
order_by: Ordigi de
save_changes: Konservi ŝanĝojn
today: hodiaŭ
@@ -951,6 +953,9 @@ eo:
new_followers_summary:
one: Ankaŭ, vi ekhavis novan sekvanton en via foresto! Jej!
other: Ankaŭ, vi ekhavis %{count} novajn sekvantojn en via foresto! Mirinde!
+ subject:
+ one: "1 nova sciigo ekde via lasta vizito 🐘"
+ other: "%{count} novaj sciigoj ekde via lasta vizito 🐘"
title: En via foresto…
favourite:
body: "%{name} stelumis vian mesaĝon:"
@@ -1180,7 +1185,7 @@ eo:
'2629746': 1 monato
'31556952': 1 jaro
'5259492': 2 monatoj
- '604800': 1 week
+ '604800': 1 semajno
'63113904': 2 jaroj
'7889238': 3 monatoj
stream_entries:
@@ -1219,6 +1224,8 @@ eo:
subject: Via arkivo estas preta por elŝutado
title: Arkiva elŝuto
warning:
+ categories:
+ spam: Spamo
subject:
disable: Via konto %{acct} estas frostigita
none: Averto por %{acct}
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index bfb06e3ee0..bc515fe5e7 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -887,7 +887,7 @@ eu:
cas: CAS
saml: SAML
register: Eman izena
- registration_closed: "%{instance} instantziak ez ditu kide berriak onartzen"
+ registration_closed: "%{instance} instantziak ez du kide berririk onartzen"
resend_confirmation: Birbidali berresteko argibideak
reset_password: Berrezarri pasahitza
security: Segurtasuna
diff --git a/config/locales/gd.yml b/config/locales/gd.yml
index c6a0c39f1b..450134bbcf 100644
--- a/config/locales/gd.yml
+++ b/config/locales/gd.yml
@@ -1573,6 +1573,9 @@ gd:
pinned: Post prìnichte
reblogged: "’ga bhrosnachadh"
sensitive_content: Susbaint fhrionasach
+ strikes:
+ errors:
+ too_late: Tha e ro anmoch airson an rabhadh seo ath-thagradh
tags:
does_not_match_previous_name: "– chan eil seo a-rèir an ainm roimhe"
terms:
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 56a33eb6bb..93634adcd3 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -931,7 +931,7 @@ gl:
prefix_invited_by_user: "@%{name} convídate a que te unas a este servidor Mastodon!"
prefix_sign_up: Rexístrate agora en Mastodon!
suffix: Ao abrir unha conta, poderás seguir a xente, actualizacións das publicacións e intercambiar mensaxes coas usuarias de calquera servidor de Mastodon e moito máis!
- didnt_get_confirmation: Non recibeu as instruccións de confirmación?
+ didnt_get_confirmation: Non recibiches as instruccións de confirmación?
dont_have_your_security_key: "¿Non tes a túa chave de seguridade?"
forgot_password: Esqueceu o contrasinal?
invalid_reset_password_token: O testemuño para restablecer o contrasinal non é válido ou caducou. Por favor solicite un novo.
@@ -953,8 +953,8 @@ gl:
security: Seguranza
set_new_password: Estabelecer novo contrasinal
setup:
- email_below_hint_html: Se o enderezo inferior non é correcto, pode cambialo aquí e recibir un correo de confirmación.
- email_settings_hint_html: Enviouse un correo de confirmación a %{email}. Se o enderezo non é correcto pode cambialo nos axustes da conta.
+ email_below_hint_html: Se o enderezo inferior non é correcto, podes cambialo aquí e recibir un correo de confirmación.
+ email_settings_hint_html: Enviouse un correo de confirmación a %{email}. Se o enderezo non é correcto podes cambialo nos axustes da conta.
title: Axustes
status:
account_status: Estado da conta
@@ -1519,6 +1519,9 @@ gl:
pinned: Publicación fixada
reblogged: promoveu
sensitive_content: Contido sensible
+ strikes:
+ errors:
+ too_late: É demasiado tarde para recurrir este aviso
tags:
does_not_match_previous_name: non concorda co nome anterior
terms:
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index b6108c6e67..1ee801fd02 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -1521,6 +1521,9 @@ hu:
pinned: Kitűzött bejegyzés
reblogged: megtolta
sensitive_content: Kényes tartalom
+ strikes:
+ errors:
+ too_late: Túl késő, hogy fellebbezd ezt a szankciót
tags:
does_not_match_previous_name: nem illeszkedik az előző névvel
terms:
diff --git a/config/locales/io.yml b/config/locales/io.yml
index 044dbf22e8..58d7f99f36 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -1,166 +1,1729 @@
---
io:
about:
+ about_hashtag_html: Co esas publika posti quo etiketigesis kun #%{hashtag}. Vu povas interagar kun oli se vu havas konto irgaloke en fediverso.
about_mastodon_html: Mastodon esas gratuita, apertitkodexa sociala reto. Ol esas sencentra altra alternativo a komercala servadi. Ol evitigas, ke sola firmo guvernez tua tota komunikadol. Selektez servero, quan tu fidas. Irge qua esas tua selekto, tu povas komunikar kun omna altra uzeri. Irgu povas krear sua propra instaluro di Mastodon en sua servero, e partoprenar en la sociala reto tote glate.
about_this: Pri ta instaluro
+ active_count_after: aktiva
+ active_footnote: Monade Aktiva Uzanti (MAU)
+ administered_by: 'Administresis da:'
+ api: API
+ apps: Smartfonsoftwari
+ apps_platforms: Uzez Mastodon de iOS, Android e altra platformi
+ browse_directory: Videz profilcheflisto e filtrez segun interesi
+ browse_local_posts: Videz samtempa video di publika posti de ca servilo
+ browse_public_posts: Videz samtempa video di publika posti che Mastodon
contact: Kontaktar
+ contact_missing: Ne fixigita
+ contact_unavailable: Nula
+ continue_to_web: Durez a retsoftwaro
+ discover_users: Deskovrez uzanti
+ documentation: Dokumentajo
+ federation_hint_html: Per konto che %{instance}, vu povas sequar persono che irga servilo di Mastodon e altra siti.
+ get_apps: Probez smartfonsoftwaro
+ hosted_on: Mastodon hostigesas che %{domain}
+ instance_actor_flash: 'Ca konto esas virtuala aganto quo uzesas por reprezentar la servilo e ne irga individuala uzanto. Ol uzesas por federskopo e ne debas restriktesar se vu ne volas obstruktar tota instanco, se ol esas la kaso, do vu debas uzar domenobstrukto.
+
+ '
+ learn_more: Lernez plu
+ logged_in_as_html: Vu nun eniras quale %{username}.
+ logout_before_registering: Vu ja eniris.
+ privacy_policy: Privatesguidilo
+ rules: Servilreguli
+ rules_html: 'La subo montras rezumo di reguli quon vu bezonas sequar se vu volas havar konto che ca servilo di Mastodon:'
+ see_whats_happening: Videz quo eventas
+ server_stats: 'Servilstatistiko:'
source_code: Fontkodexo
+ status_count_after:
+ one: posto
+ other: posti
status_count_before: Qua publikigis
+ tagline: Sequez amiki e deskovrez nova personi
+ terms: Serveskondicioni
+ unavailable_content: Jerata servili
+ unavailable_content_description:
+ domain: Servilo
+ reason: Motivo
+ rejecting_media: 'Mediifaili de ca servili ne procedagesas o retenesos, e imajeti ne montresos, do manuala klikto bezonesas a originala failo:'
+ rejecting_media_title: Filtrita medii
+ silenced: 'Posti de ca servili celesos en publika tempolinei e konversi, e notifiki ne facesos de oli uzantinteragi, se vu ne sequas oli:'
+ silenced_title: Limitizita servili
+ suspended: 'Informi de ca servili procedagesos o retenesos o kambiesos, do irga interago o komuniko kun uzanti de ca servili esas imposebla:'
+ suspended_title: Restriktita servili
+ unavailable_content_html: Mastodon generale permisas on vidar kontenajo e interagar kun uzanti de irga altra servilo en fediverso. Existas eceptioni quo facesis che ca partikulara servilo.
+ user_count_after:
+ one: uzanto
+ other: uzanti
user_count_before: Hemo di
+ what_is_mastodon: Quo esas Mastodon?
accounts:
+ choices_html: 'Selektaji di %{name}:'
+ endorsements_hint: Vu povas rekomendar personi quon vu sequas de retintervizajo, e oli montresos hike.
+ featured_tags_hint: Vu povas estalar partikulara hashtagi quo montresos hike.
follow: Sequar
+ followers:
+ one: Sequanto
+ other: Sequanti
following: Sequati
+ instance_actor_flash: Ca konto esas virtuala aganto quo uzesas por reprezentar la servilo e ne irga individuala uzanto. Ol uzesas por federskopo e ne debas restriktesar.
+ joined: Juntis ye %{date}
+ last_active: lasta aktiva tempo
+ link_verified_on: Proprieteso di ca ligilo kontrolesis ye %{date}
+ media: Medii
+ moved_html: "%{name} transferesis a %{new_profile_link}:"
+ network_hidden: Ca informi ne esas disponebla
nothing_here: Esas nulo hike!
people_followed_by: Sequati da %{name}
people_who_follow: Sequanti di %{name}
+ pin_errors:
+ following: Vu mustas ja sequar persono quon vu volas estalar
+ posts:
+ one: Posto
+ other: Posti
+ posts_tab_heading: Posti
+ posts_with_replies: Posti e respondi
+ roles:
+ admin: Administrero
+ bot: Boto
+ group: Grupo
+ moderator: Jerero
+ unavailable: Profilo esas nedisponebla
unfollow: Dessequar
admin:
+ account_actions:
+ action: Agez
+ title: Agez jero a %{acct}
+ account_moderation_notes:
+ create: Pozez noto
+ created_msg: Jernoto sucesoze kreesis!
+ destroyed_msg: Jernoto sucesoze efacesis!
accounts:
+ add_email_domain_block: Obstruktez retpostodomeno
+ approve: Aprobez
+ approved_msg: Sucesoze aprobis registroapliko di %{username}
are_you_sure: Ka tu esas certa?
+ avatar: Profilimajo
+ by_domain: Domeno
+ change_email:
+ changed_msg: Kontoretposto sucesoze chanjesis!
+ current_email: Nuna retposto
+ label: Chanjez retposto
+ new_email: Nova retposto
+ submit: Chanjez retposto
+ title: Chanjez retposto por %{username}
+ confirm: Konfirmez
+ confirmed: Konfirmita
+ confirming: Ankore konfirmesas
+ custom: Kustuma
+ delete: Efacez informi
+ deleted: Efacita
+ demote: Despromocez
+ destroyed_msg: Informi di %{username} nun aranjesis por efacesar aparante
+ disable: Frostigez
+ disable_sign_in_token_auth: Desaktivigez retpostofichyurizeso
+ disable_two_factor_authentication: Desaktivigez 2FA
+ disabled: Desinterdiktita
+ display_name: Profilnomo
+ domain: Domeno
+ edit: Modifikez
email: E-mail
+ email_status: Retpostostando
+ enable: Defrostigez
+ enable_sign_in_token_auth: Aktivigez retpostofichyurizeso
+ enabled: Aktivigita
+ enabled_msg: Sucesoze desfrostigas konto di %{username}
+ followers: Uzanti
+ follows: Uzati
+ header: Kapimajo
+ inbox_url: URL di enbuxo
+ invite_request_text: Juntomotivo
+ invited_by: Invitesis da
+ ip: IP
+ joined: Juntita
+ location:
+ all: Omna
+ local: Lokala
+ remote: Nelokala
+ title: Loko
+ login_status: Enirstando
+ media_attachments: Mediiatachaji
+ memorialize: Memorializez
+ memorialized: Memorializita
+ memorialized_msg: Sucesoze chanjesis %{username} a memorialkonto
+ moderation:
+ active: Aktiva
+ all: Omna
+ pending: Vartanta
+ suspended: Restriktita
+ title: Jero
+ moderation_notes: Jernoti
+ most_recent_activity: Maxim recenta aktiveso
+ most_recent_ip: Maxim recenta IP
+ no_account_selected: Nula konti chanjesis pro ke nulo selektesis
+ no_limits_imposed: Limiti ne fixesis
+ not_subscribed: Ne abonita
+ pending: Vartar kontrolo
perform_full_suspension: Perform full suspension
+ previous_strikes: Antea streki
+ previous_strikes_description_html:
+ one: Ca konto havas 1 streko.
+ other: Ca konto havas %{count} streki.
+ promote: Promocez
+ protocol: Protokolo
+ public: Publika
+ push_subscription_expires: Abono PuSH expiras
+ redownload: Rifreshigez profilo
+ redownloaded_msg: Sucesoze rifreshis profilo di %{username} de origino
+ reject: Refuzez
+ rejected_msg: Sucesoze refuzis registroapliko di %{username}
+ remove_avatar: Efacez profilimajo
+ remove_header: Efacez kapimajo
+ removed_avatar_msg: Sucesoze efacis profilimajo di %{username}
+ removed_header_msg: Sucesoze efacis kapimajo di %{username}
+ resend_confirmation:
+ already_confirmed: Ca uzanto ja konfirmesis
+ send: Risendez konfirmretposto
+ success: Konfirmretposto sucesoze sendesas!
+ reset: Richanjez
+ reset_password: Richanjez pasvorto
+ resubscribe: Riabonez
+ role: Permisi
+ roles:
+ admin: Administrero
+ moderator: Jerero
+ staff: Laborero
+ user: Uzanto
+ search: Trovez
+ search_same_email_domain: Altra uzanti kun sama retpostodomeno
+ search_same_ip: Altra uzanti kun sama IP
+ security_measures:
+ only_password: Nur pasvorto
+ password_and_2fa: Pasvorto e 2FA
+ sensitive: Forcsentoza
+ sensitized: Markizesis quale sentoza
+ shared_inbox_url: Partigita enbux-URL
show:
created_reports: Reports created by this account
targeted_reports: Reports made about this account
+ silence: Limito
+ silenced: Limitizita
+ statuses: Posti
+ strikes: Antea streki
+ subscribe: Abonez
+ suspend: Restriktez
+ suspended: Restriktita
+ suspension_irreversible: Ca informi di ca konto neinversigeble efacesis. Vu povas derestriktar konto por uzebligar lu ma ol ne riganos irga dati quon ol antee havis.
+ suspension_reversible_hint_html: Ca konto restriktesis, e ca informi tota efacesos en %{date}. Ante ta tempo, konto povas riganesar sen irga mala efekti. Se vu volas efacar omna informi di konto quik, vu povas agar lu sube.
+ title: Konti
+ unblock_email: Deobstruktez retpostoadreso
+ unblocked_email_msg: Sucesoze deobstruktis retpostoadreso di %{username}
+ unconfirmed_email: Nekonfirmita retposto
+ undo_sensitized: Deagez forcsentoza
+ undo_silenced: Deagez limito
+ undo_suspension: Deagez restrikto
+ unsilenced_msg: Sucesoza inversigis limito di konto di %{username}
+ unsubscribe: Deabonez
+ unsuspended_msg: Sucesoze derestriktis konto di %{username}
+ username: Uzantonomo
+ view_domain: Videz rezumo di domeno
+ warn: Avertez
+ web: Interret
+ whitelisted: Permisesis por federato
+ action_logs:
+ action_types:
+ approve_appeal: Aprobez apelo
+ approve_user: Aprobez uzanto
+ assigned_to_self_report: Taskigez raporto
+ change_email_user: Chanjez retposto por uzanto
+ confirm_user: Konfirmez uzanto
+ create_account_warning: Kreez averto
+ create_announcement: Kreez anunco
+ create_custom_emoji: Kreez kustumizita emocimajo
+ create_domain_allow: Kreez domenpermiso
+ create_domain_block: Kreez domenobstrukto
+ create_email_domain_block: Kreez retpostodomenobstrukto
+ create_ip_block: Kreez IP-regulo
+ create_unavailable_domain: Kreez nedisponebla domeno
+ demote_user: Despromocez uzanto
+ destroy_announcement: Efacez anunco
+ destroy_custom_emoji: Efacez kustumizita emocimajo
+ destroy_domain_allow: Efacez domenpermiso
+ destroy_domain_block: Efacez domenobstrukto
+ destroy_email_domain_block: Efacez retpostodomenobstrukto
+ destroy_instance: Efacez domeno
+ destroy_ip_block: Efacez IP-regulo
+ destroy_status: Efacez posto
+ destroy_unavailable_domain: Efacez nedisponebla domeno
+ disable_2fa_user: Desaktivigez 2FA
+ disable_custom_emoji: Desaktivigez kustumizita emocimajo
+ disable_sign_in_token_auth_user: Desaktivigez retpostofichyurizo por uzanto
+ disable_user: Desaktivigez uzanto
+ enable_custom_emoji: Aktivigez kustumizita emocimajo
+ enable_sign_in_token_auth_user: Aktivigez retpostofichyurizo por uzanto
+ enable_user: Aktivigez uzanto
+ memorialize_account: Memorializez konto
+ promote_user: Promocez uzanto
+ reject_appeal: Refuzez apelo
+ reject_user: Refuzez uzanto
+ remove_avatar_user: Efacez profilimajo
+ reopen_report: Riapertez raporto
+ reset_password_user: Richanjez pasvorto
+ resolve_report: Rezolvez raporto
+ sensitive_account: Forcsentoza konto
+ silence_account: Limitizez konto
+ suspend_account: Restriktez konto
+ unassigned_report: Destaskigez raporto
+ unblock_email_account: Deobstruktez retpostoadreso
+ unsensitive_account: Deagez forcsentoza konto
+ unsilence_account: Deagez limitkonto
+ unsuspend_account: Derestriktez konto
+ update_announcement: Novigez anunco
+ update_custom_emoji: Novigez kustumizita emocimajo
+ update_domain_block: Novigez domenobstrukto
+ update_status: Novigez posto
+ actions:
+ approve_appeal_html: "%{name} aprobis jerdecidapelo de %{target}"
+ approve_user_html: "%{name} aprobis registro de %{target}"
+ assigned_to_self_report_html: "%{name} taskigis raporto %{target} a su"
+ change_email_user_html: "%{name} chanjis retpostoadreso di uzanto %{target}"
+ confirm_user_html: "%{name} konfirmis retpostoadreso di uzanto %{target}"
+ create_account_warning_html: "%{name} sendis averto a %{target}"
+ create_announcement_html: "%{name} kreis nova anunco %{target}"
+ create_custom_emoji_html: "%{name} adchargis nova emocimajo %{target}"
+ create_domain_allow_html: "%{name} permisis federato kun domeno %{target}"
+ create_domain_block_html: "%{name} obstruktis domeno %{target}"
+ create_email_domain_block_html: "%{name} obstruktis retpostodomeno %{target}"
+ create_ip_block_html: "%{name} kreis regulo por IP %{target}"
+ create_unavailable_domain_html: "%{name} cesis sendo a domeno %{target}"
+ demote_user_html: "%{name} despromocis uzanto %{target}"
+ destroy_announcement_html: "%{name} efacis anunco %{target}"
+ destroy_custom_emoji_html: "%{name} destruktis emocimajo %{target}"
+ destroy_domain_allow_html: "%{name} despermisis federato kun domeno %{target}"
+ destroy_domain_block_html: "%{name} deobstruktis domeno %{target}"
+ destroy_email_domain_block_html: "%{name} deobstruktis retpostodomeno %{target}"
+ destroy_instance_html: "%{name} efacis domeno %{target}"
+ destroy_ip_block_html: "%{name} efacis regulo por IP %{target}"
+ destroy_status_html: "%{name} efacis posto da %{target}"
+ destroy_unavailable_domain_html: "%{name} durigis sendo a domeno %{target}"
+ disable_2fa_user_html: "%{name} desaktivigis 2-faktorbezono por uzanto %{target}"
+ disable_custom_emoji_html: "%{name} desaktivigis emocimajo %{target}"
+ disable_sign_in_token_auth_user_html: "%{name} desaktivigis retpostofichyurizo por %{target}"
+ disable_user_html: "%{name} desaktivigis eniro por uzanto %{target}"
+ enable_custom_emoji_html: "%{name} aktivigis emocimajo %{target}"
+ enable_sign_in_token_auth_user_html: "%{name} aktivigis retpostofichyurizo por %{target}"
+ enable_user_html: "%{name} aktivigis eniro por uzanto %{target}"
+ memorialize_account_html: "%{name} kauzigis konto di %{target} divenar memorialpagino"
+ promote_user_html: "%{name} promocis uzanto %{target}"
+ reject_appeal_html: "%{name} refuzis jerdecidapelo de %{target}"
+ reject_user_html: "%{name} refuzis registro de %{target}"
+ remove_avatar_user_html: "%{name} efacis profilimajo de %{target}"
+ reopen_report_html: "%{name} riapertis raporto %{target}"
+ reset_password_user_html: "%{name} richanjis pasvorto de uzanto %{target}"
+ resolve_report_html: "%{name} rezolvis raporto %{target}"
+ sensitive_account_html: "%{name} markizis medii di %{target} quale sentoza"
+ silence_account_html: "%{name} limitizis konto di %{target}"
+ suspend_account_html: "%{name} restriktis konto di %{target}"
+ unassigned_report_html: "%{name} detaskigis raporto %{target}"
+ unblock_email_account_html: "%{name} deobstruktis retpostoadreso di %{target}"
+ unsensitive_account_html: "%{name} demarkizis medii di %{target} quale sentoza"
+ unsilence_account_html: "%{name} efacis limito di konto di %{target}"
+ unsuspend_account_html: "%{name} derestriktis konto di %{target}"
+ update_announcement_html: "%{name} novigis anunco %{target}"
+ update_custom_emoji_html: "%{name} novigis emocimajo %{target}"
+ update_domain_block_html: "%{name} novigis domenobstrukto por %{target}"
+ update_status_html: "%{name} novigis posto da %{target}"
+ deleted_status: "(efacita posto)"
+ empty: Nula logi.
+ filter_by_action: Filtrez segun ago
+ filter_by_user: Filtrez segun uzanto
+ title: Kontrollogo
+ announcements:
+ destroyed_msg: Anunco sucesoze efacesas!
+ edit:
+ title: Modifikez anunco
+ empty: Nula anunci.
+ live: Samtempe
+ new:
+ create: Kreez anunco
+ title: Nova anunco
+ publish: Publikigez
+ published_msg: Anunco sucesoze publikigesas!
+ scheduled_for: Projetita por eventas en %{time}
+ scheduled_msg: Anunco projetesis por publikigo!
+ title: Anunci
+ unpublish: Depublikigez
+ unpublished_msg: Anunco sucesoze depublikigesas!
+ updated_msg: Anunco sucesoza novigesas!
+ custom_emojis:
+ assign_category: Insertez kategorio
+ by_domain: Domeno
+ copied_msg: Sucesoze kreis lokala kopiuro di emocimajo
+ copy: Kopiez
+ copy_failed_msg: Ne povas igar lokala kopiur di ta emocimajo
+ create_new_category: Kreez nova kategorio
+ created_msg: Emocimajo sucesoze kreesas!
+ delete: Efacez
+ destroyed_msg: Kustumizita emocimajo sucesoza destruktesas!
+ disable: Desaktivigez
+ disabled: Desaktivigita
+ disabled_msg: Sucesoze desaktivigis ta emocimajo
+ emoji: Emocimajo
+ enable: Aktivigez
+ enabled: Aktivigita
+ enabled_msg: Sucesoze aktivigis ta emocimajo
+ image_hint: Maximo grandeso di PNG o GIF esas %{size}
+ list: Listo
+ listed: Listita
+ new:
+ title: Insertez nova kustumizita emocimajo
+ not_permitted: Vu ne permisesis agar co
+ overwrite: Remplasez
+ shortcode: Kurtnumero
+ shortcode_hint: Minime 2 simboli, nur literi e nombri e sublinei
+ title: Kustumizita emocimaji
+ uncategorized: Nekategorigita
+ unlist: Delistigez
+ unlisted: Delistigita
+ update_failed_msg: Ne povas novigar ta emocimajo
+ updated_msg: Emocimajo sucesoze novigesis!
+ upload: Adchargez
+ dashboard:
+ active_users: aktiva uzanti
+ interactions: interagi
+ media_storage: Mediireteneso
+ new_users: nova uzanti
+ opened_reports: raporti apertesis
+ pending_appeals_html:
+ one: "%{count} vartanta apelo"
+ other: "%{count} vartanta apeli"
+ pending_reports_html:
+ one: "%{count} vartanta raporto"
+ other: "%{count} vartanta raporti"
+ pending_tags_html:
+ one: "%{count} vartanta hashtago"
+ other: "%{count} vartanta hashtagi"
+ pending_users_html:
+ one: "%{count} vartanta uzanti"
+ other: "%{count} vartanta uzanti"
+ resolved_reports: raporti rezolvesis
+ software: Softwaro
+ sources: Registrofonti
+ space: Spacuzeso
+ title: Chefpanelo
+ top_languages: Maxim aktiva lingui
+ top_servers: Maxim aktiva servili
+ website: Retsito
+ disputes:
+ appeals:
+ empty: Nula apeli.
+ title: Apeli
+ domain_allows:
+ add_new: Permisez federato kun domeno
+ created_msg: Domeno sucesoza permisesas por federato
+ destroyed_msg: Domeno despermisesas de federato
+ undo: Despermisez federato kun domeno
domain_blocks:
add_new: Add new
+ created_msg: Domenobstrukto nun procedesas
+ destroyed_msg: Domenobstrukto desagesis
+ domain: Domeno
+ edit: Modifikez domenobstrukto
+ existing_domain_block_html: Vu ja povis plu rigoroza limiti a %{name}, vu bezonas deobstruktar unesme.
new:
+ create: Kreez obstrukto
+ hint: Domenobstrukto ne preventos kreo di kontrekordaji en datumaturo, ma retroaktive e automate aplikos partikulara jermetodi a ta konti.
severity:
desc_html: "Silence will make the account's posts invisible to anyone who isn't following them. Suspend will remove all of the account's content, media, and profile data."
+ noop: Nulo
+ silence: Silencigez
+ suspend: Restriktez
+ title: Nova domenobstrukto
+ obfuscate: Nedicernebligez domennomo
+ obfuscate_hint: Partala nedicernebligez domennomo en listo se reklamo di listo di domenlimito aktivigesas
+ private_comment: Privata komento
+ private_comment_hint: Komento pri ca domenlimito esas por interna uzo da jereri.
+ public_comment: Publika komento
+ public_comment_hint: Komentez pri ca domenlimito por la publiko, se reklamar listo di domenlimito aktivigesis.
+ reject_media: Refusez mediifaili
+ reject_media_hint: Efacas lokale retenita mediifaili e refuzas deschargar irgo en futuro. Nerelatata por restrikti
+ reject_reports: Refuzez raporti
+ reject_reports_hint: Ignorez omna raporti quo venas de ca domeno. Nerelatata por restrikti
undo: Undo
+ view: Videz domenobstrukto
+ email_domain_blocks:
+ add_new: Insertez novo
+ attempts_over_week:
+ one: "%{count} probo de pos 1 week"
+ other: "%{count} registroprobi de pos 1 week"
+ created_msg: Sucesoze obstruktis retpostodomeno
+ delete: Efacez
+ dns:
+ types:
+ mx: Rekordo MX
+ domain: Domeno
+ new:
+ create: Insertez domeno
+ resolve: Rezolvez domeno
+ title: Obstruktez nova retpostodomeno
+ no_email_domain_block_selected: Retpostodomenobstrukti ne chanjesis por ke nulo selektesis
+ resolved_dns_records_hint_html: Ca domennomo rezolvesas a ca MX-domeni, quale esas ultime responsanta por ganar retposto. Obstruktar MX-domeno obstruktos registri de irga retpostoadreso quo uzas sama MX-domeni, mem se la videbla domennomo esas diferanta. Sorgemez e ne obstruktez majora retpostositi.
+ resolved_through_html: Rezolvesis tra %{domain}
+ title: Obstruktita retpostodomeni
+ follow_recommendations:
+ description_html: "Sequorekomendi helpas nova uzanti rapide trovar interesanta kontenajo. Se uzanto ne interagas kun altra personi sate por igar personaligita sequorekomendi, ca konti rekomendas. Oli rikalkulesas die de mixo di konti kun maxim alta recenta interagi e maxim altra lokala sequantoquanto segun selektita linguo."
+ language: Por linguo
+ status: Stando
+ suppress: Desfortigez sequorekomendo
+ suppressed: Desfortigita
+ title: Sequez rekomendi
+ unsuppress: Riganez sequorekomendo
instances:
+ availability:
+ description_html:
+ one: Se sendar a domeno falias %{count} dio sen sucesar, plua sendoprobi ne agesos se sendo de la domeno ne ganesas.
+ other: Se sendar a domeno falias en %{count} diferanta dii sen sucesar, plua sendoprobi ne agesos se sendo de la domeno ne ganesas.
+ failure_threshold_reached: Faliolimito atingesis en %{date}.
+ failures_recorded:
+ one: Falita probo en %{count} dio.
+ other: Falita probi en %{count} dii.
+ no_failures_recorded: Nula falio en rekordo.
+ title: Disponebleso
+ warning: Antea probo di konekto a ca servilo esas nesucesoza
+ back_to_all: Omna
+ back_to_limited: Limitizita
+ back_to_warning: Averto
+ by_domain: Domeno
+ confirm_purge: Ka vu certe volas netempale efacar informi de ca domeno?
+ content_policies:
+ comment: Interna noto
+ description_html: Vu povas fixar kontenajguidili quo aplikesos a omna konti de ca domeno e irga oli subdomeni.
+ policies:
+ reject_media: Refusez medii
+ reject_reports: Refusez raporti
+ silence: Limito
+ suspend: Restriktez
+ policy: Guidilo
+ reason: Publika motivo
+ title: Kontenajguidili
+ dashboard:
+ instance_accounts_dimension: Maxim sequata konti
+ instance_accounts_measure: retenata konti
+ instance_followers_measure: nia sequanti ibe
+ instance_follows_measure: olia sequanti hike
+ instance_languages_dimension: Maxim uzata lingui
+ instance_media_attachments_measure: retenata mediiatachaji
+ instance_reports_measure: raporti pri oli
+ instance_statuses_measure: retenata posti
+ delivery:
+ all: Omna
+ clear: Efacez senderori
+ failing: Falias
+ restart: Rikomencez sendo
+ stop: Cesez sendo
+ unavailable: Nedisponebla
+ delivery_available: Sendo esas disponebla
+ delivery_error_days: Senderordii
+ delivery_error_hint: Se sendo ne esas posebla dum %{count} dii, ol automata markizesos quale ne sendebla.
+ destroyed_msg: Informi de %{domain} nun faskigesis por partikulara efaco.
+ empty: Nula domeni.
+ known_accounts:
+ one: "%{count} savata konto"
+ other: "%{count} savata konti"
+ moderation:
+ all: Omna
+ limited: Limitizita
+ title: Jero
+ private_comment: Privata komento
+ public_comment: Publika komento
+ purge: Efacez grande
+ purge_description_html: Se vu kredas ke ca domeno esas nekonektata netempale, vu povas efacar omna kontorekordi e relatata informi de ca domeno de vua reteneyo. Co forsan esas nekurta.
title: Known Instances
+ total_blocked_by_us: Obstruktesis da ni
+ total_followed_by_them: Sequesis da oli
+ total_followed_by_us: Sequesis da ni
+ total_reported: Raporti pri oli
+ total_storage: Mediiatachaji
+ totals_time_period_hint_html: Sumi quo montresas sube inkluzas informi de pos la komenco.
+ invites:
+ deactivate_all: Deaktivigez omno
+ filter:
+ all: Omna
+ available: Disponebla
+ expired: Expirita
+ title: Filtrez
+ title: Inviti
+ ip_blocks:
+ add_new: Kreez regulo
+ created_msg: Sucesoze insertis nova regulo di IP
+ delete: Efacez
+ expires_in:
+ '1209600': 2 semani
+ '15778476': 6 monati
+ '2629746': 1 monato
+ '31556952': 1 yaro
+ '86400': 1 dio
+ '94670856': 3 yari
+ new:
+ title: Kreez nova regulo di IP
+ no_ip_block_selected: Reguli di IP nechanjesis por ke nulo selektesis
+ title: Reguli di IP
+ relationships:
+ title: "%{acct} relatesi"
+ relays:
+ add_new: Insertez nova relayo
+ delete: Efacez
+ description_html: "Federatrelayo esas mediatajservilo quo interchanjas multa publika posti inter servili quo abonas e publikigas ibe. Ol povas helpar mikra e mezgranda servili deskovrar kontenajo de fediverso, quale ne bezonas lokala uzanti manuale sequar altra personi en nelokala servili."
+ disable: Desaktivigez
+ disabled: Desaktivigita
+ enable: Aktivigez
+ enable_hint: Pos aktivigesar, vua servilo abonos omna publika posti de ca relayo, e komencos sendar publika posti di ca servilo a ol.
+ enabled: Aktivigita
+ inbox_url: URL di relayo
+ pending: Vartas aprobo di relayo
+ save_and_enable: Sparez e aktivigez
+ setup: Facez relayokonekto
+ signatures_not_enabled: Relayi ne korekta funcionos dum ke sekurmodo o limigita federatmodo aktivigesis
+ status: Stando
+ title: Relayi
+ report_notes:
+ created_msg: Raportnoto sucesoze kreesis!
+ destroyed_msg: Raportnoto sucesoze efacesis!
+ today_at: Hodie en %{time}
+ reports:
+ account:
+ notes:
+ one: "%{count} noto"
+ other: "%{count} noti"
+ action_log: Kontrollogo
+ action_taken_by: Agesis da
+ actions:
+ delete_description_html: Raportizita posti efacesos e streko rekordigesos por helpar vu intensigar en nexta malagi da la sama konto.
+ mark_as_sensitive_description_html: Medii en raportizita posti markizesos quale sentoza e streko rekordigesos por helpar vu intensigar en nexta malagi da la sama konto.
+ other_description_html: Videz plu multa opcioni por dominacar konduto di konto e kustumizar komuniko a raportizita konto.
+ resolve_description_html: Nulo agesos kontre raportizita konto, streko ne rekordizesos e raporto klozesos.
+ silence_description_html: Profilo esos videbla nur por personi quo ja sequis o manuale trovis, se severe limitizas ola porteo. Sempre povas inversigesar.
+ suspend_description_html: Ca profilo e omna ola kontenaji divenos neacesebla til ol eventuale efacesas. Interagar kun la konto divenos neposebla. Inversigebla til 30 dii.
+ actions_description_html: Decidez ago por rezolvar ca raporto. Se vu decidar puniso kontre raportizesis konto, retpostoavizo sendesos a ol, ecepte kande Spam kategorio selektesis.
+ add_to_report: Insertez plu a raporto
+ are_you_sure: Ka vu esas certa?
+ assign_to_self: Taskigez me
+ assigned: Taskigita jerero
+ by_target_domain: Domeno di raportizita konto
+ category: Kategorio
+ category_description_html: La motivo ke ca konto e kontenajo raportizesis citesos por komuniko kun raportizita konto
+ comment:
+ none: Nulo
+ comment_description_html: 'Por donar plu informo, %{name} skribis:'
+ created_at: Raportizesis
+ delete_and_resolve: Efacez posti
+ forwarded: Sendesis
+ forwarded_to: Sendesis a %{domain}
+ mark_as_resolved: Markizez quale rezolvita
+ mark_as_sensitive: Markizez quale sentoza
+ mark_as_unresolved: Markizez quale nerezolvita
+ no_one_assigned: Nulu
+ notes:
+ create: Insertez noto
+ create_and_resolve: Rezolvez per noto
+ create_and_unresolve: Riapertez per noto
+ delete: Efacez
+ placeholder: Deskriptez quo agesis o irga relatita novaji...
+ title: Noti
+ notes_description_html: Videz e pozez noti a altra jereri e vua su en futuro
+ quick_actions_description_html: 'Agetez o volvez base por vidar raportizita kontenajo:'
+ remote_user_placeholder: nelokala uzanti de %{instance}
+ reopen: Riapertez raporto
+ report: 'Raporto #%{id}'
+ reported_account: Raportizita konto
+ reported_by: Raportizesis da
+ resolved: Rezolvesis
+ resolved_msg: Raporto sucesoze rezolvesis!
+ skip_to_actions: Saltez a agi
+ status: Stando
+ statuses: Raportizita kontenajo
+ statuses_description_html: Ofensanta kontenajo citesos en komuniko kun raportizita konto
+ target_origin: Fonto di raportizita konto
+ title: Raporti
+ unassign: Detaskigez
+ unresolved: Nerezolvita
+ updated_at: Novigesis
+ view_profile: Videz profilo
+ rules:
+ add_new: Insertez regulo
+ delete: Efacez
+ description_html: Quankam maxim multa personi asertar ke lu ja lektis e konsentis serveskondicioni, frequente personi ne komplete lektas til problemo eventas. Faciligez on vidar vua reguli di servilo kurte per pozar puntostrukturlisto. Lasez singla reguli esar kurta e simpla, ma ne fendez a multa separata kozi anke.
+ edit: Modifikez regulo
+ empty: Nula servilreguli fixesis til nun.
+ title: Servilreguli
settings:
+ activity_api_enabled:
+ desc_html: Quanto de lokale publikigita posti, aktiva uzanti e nova registri quale semane faski
+ title: Publikigez rezumstatistiko pri uzantoaktiveso en API
+ bootstrap_timeline_accounts:
+ desc_html: Separez multopla uzantonomi kun komo. Ca konti garantiesos montresar en sequorekomendi
+ title: Rekomendez ca konti a nova uzanti
contact_information:
email: Enter a public e-mail address
username: Enter a username
+ custom_css:
+ desc_html: Modifikez aspekto kun CSS chargasas che singla pagino
+ title: Kustumizita CSS
+ default_noindex:
+ desc_html: Efektigar omna uzanti quo ne chanjis ca opciono per su
+ title: Despartoprenigez uzanti de trovmotorindexo quale originala stando
+ domain_blocks:
+ all: A omnu
+ disabled: A nulu
+ title: Montrez domenobstrukti
+ users: A enirinta lokala uzanti
+ domain_blocks_rationale:
+ title: Montrez motivo
+ hero:
+ desc_html: Montresas che chefpagino. Minime 600x100px rekomendesas. Se ne fixesis, ol retrouzas servilimajeto
+ title: Heroimajo
+ mascot:
+ desc_html: Montresas che multa chefpagino. Minime 293x205px rekomendesas. Se ne fixesis, ol retrouzas reprezentanto
+ title: Reprezenterimajo
+ peers_api_enabled:
+ desc_html: Domennomo quon ca servilo renkontris en fediverso
+ title: Publikigez listo di deskovrita servili en API
+ preview_sensitive_media:
+ desc_html: Ligilprevidi che altra retsiti montros imajeto mem se medii markizesas quale sentoza
+ title: Montrez sentoza medii e OpenGraph previdi
+ profile_directory:
+ desc_html: Permisez uzanti deskovresar
+ title: Aktivigez profilcheflisto
registrations:
closed_message:
desc_html: Displayed on frontpage when registrations are closed<a>
and <em>
.
title: Site description
site_description_extended:
desc_html: Displayed on extended information page%{instance}
forsan ne esas servilo ube vu registris, do ni bezonas ridirektar vu a vua hemservilo unesme."
+ remote_interaction:
+ favourite:
+ proceed: Durez favorizar
+ prompt: 'Vu povas favorizar ca posto:'
+ reblog:
+ proceed: Durez bustar
+ prompt: 'Vu volas bustar ca posto:'
+ reply:
+ proceed: Durez respondar
+ prompt: 'Vu volas respondar ca posto:'
+ reports:
+ errors:
+ invalid_rules: ne refera valida reguli
rss:
content_warning: 'Kontenajaverto:'
descriptions:
account: Publika posti de @%{acct}
tag: 'Publika posti kun tago #%{hashtag}'
+ scheduled_statuses:
+ over_daily_limit: Vu ecesas limito quale esas %{limit} projetita posti por hodio
+ over_total_limit: Vu ecesas limito quale esas %{limit} projetita posti
+ too_soon: Projetita dato mustas esar en futuro
+ sessions:
+ activity: Antea aktiveso
+ browser: Vidilo
+ browsers:
+ alipay: Alipay
+ blackberry: Blackberry
+ chrome: Chrome
+ edge: Microsoft Edge
+ electron: Electron
+ firefox: Firefox
+ generic: Nesavita vidilo
+ ie: Internet Explorer
+ micro_messenger: MicroMessenger
+ nokia: Vidilo Nokia S40 Ovi
+ opera: Opera
+ otter: Otter
+ phantom_js: PhantomJS
+ qq: Vidilo QQ
+ safari: Safari
+ uc_browser: UCBrowser
+ weibo: Weibo
+ current_session: Nuna sesiono
+ description: "%{browser} che %{platform}"
+ explanation: Co esas retvidili quo nun konektesis a vua konto di Mastodon.
+ ip: IP
+ platforms:
+ adobe_air: Adobe Air
+ android: Android
+ blackberry: Blackberry
+ chrome_os: Chrome OS
+ firefox_os: Firefox OS
+ ios: iOS
+ linux: Linux
+ mac: macOS
+ other: nesavata platformo
+ windows: Windows
+ windows_mobile: Windows Mobile
+ windows_phone: Windows Phone
+ revoke: Depermisez
+ revoke_success: Sesiono sucesoze deaprobesas
+ title: Sesioni
+ view_authentication_history: Videz yurizeshistorio di vua konto
settings:
+ account: Konto
+ account_settings: Kontoopcioni
+ aliases: Kontoaltnomi
+ appearance: Formo
authorized_apps: Yurizita apliki
back: Retro a Mastodon
+ delete: Kontoefaco
+ development: Developo
edit_profile: Redaktar la profilo
export: Exportacar datumi
+ featured_tags: Estelata hashtagi
import: Importacar
+ import_and_export: Importaco e exportaco
+ migrate: Kontomigro
+ notifications: Avizi
preferences: Preferi
+ profile: Profilo
+ relationships: Sequati e sequanti
+ statuses_cleanup: Automata postoefaco
+ strikes: Jerstreki
two_factor_authentication: Dufaktora autentikigo
+ webauthn_authentication: Sekuresklefi
statuses:
+ attached:
+ audio:
+ one: "%{count} audio"
+ other: "%{count} audii"
+ description: 'Atachajo: %{attached}'
+ image:
+ one: "%{count} imajo"
+ other: "%{count} imaji"
+ video:
+ one: "%{count} video"
+ other: "%{count} videi"
+ boosted_from_html: Bustesis de %{acct_link}
+ content_warning: 'Kontenajaverto: %{warning}'
+ default_language: Sama quale intervizajlinguo
+ disallowed_hashtags:
+ one: 'kontenas nepermisita hashtago: %{tags}'
+ other: 'kontenas nepermisita hashtagi: %{tags}'
+ edited_at_html: Modifikesis ye %{date}
+ errors:
+ in_reply_not_found: Posto quon vu probas respondar semblas ne existas.
open_in_web: Apertar retnavigile
over_character_limit: limito de %{max} signi ecesita
+ pin_errors:
+ direct: Posti quo povas videsar nur mencionita uzanti ne povas pinglagesar
+ limit: Vu ja pinglagis maxima posti
+ ownership: Posto di altra persono ne povas pinglagesar
+ reblog: Busto ne povas pinglagesar
+ poll:
+ total_people:
+ one: "%{count} persono"
+ other: "%{count} personi"
+ total_votes:
+ one: "%{count} voto"
+ other: "%{count} voti"
+ vote: Votez
show_more: Montrar plue
+ show_newer: Montrez plu nova kozo
+ show_older: Montrez plu olda kozo
+ show_thread: Montrez postaro
+ sign_in_to_participate: Registrez por partoprenar en konverso
+ title: '%{name}: "%{quote}"'
visibilities:
+ direct: Direta
private: Montrar nur a sequanti
+ private_long: Nur montrez a sequanti
public: Publika
+ public_long: Omnu povas vidar
unlisted: Publika, ma ne aperos en publika tempolinei
+ unlisted_long: Omnu povas vidar ma ne listigesas che publika tempolinei
+ statuses_cleanup:
+ enabled: Automata efacez olda posti
+ enabled_hint: Automata efacez vua posti pos oli atingar fixita oldeslimito, se oli ne parigesas a 1 de suba ecepti
+ exceptions: Ecepti
+ explanation: Pro ke efacar posti esas nechipa procedo, co agas lente progresive kande servilo ne esas okupata. Do, vua posti forsan efacesos kurte pos oli atingas oldeslimito.
+ ignore_favs: Ignorez favorati
+ ignore_reblogs: Ignorez busti
+ interaction_exceptions: Ecepti segun interagi
+ interaction_exceptions_explanation: Notale, ne existas garantio ke posti efacesos se oli iras sub favorato o bustlimito pos iras super ol.
+ keep_direct: Retenez direta mesaji
+ keep_direct_hint: Ne efacas irga vua direta mesaji
+ keep_media: Retenez posti kun mediiatachaji
+ keep_media_hint: Ne efacas irga vua posti quo havas mediiatachaji
+ keep_pinned: Retenez pinglagita posti
+ keep_pinned_hint: Ne efacas irga vua pinglagita posti
+ keep_polls: Retenez votposti
+ keep_polls_hint: Ne efacas irga vua votposti
+ keep_self_bookmark: Retenez posti quon vu libromarkizis
+ keep_self_bookmark_hint: Ne efacas vua sua posti se vu libromarkizis li
+ keep_self_fav: Retenez posti quon vu favorizis
+ keep_self_fav_hint: Ne efacas vua sua posti se vu favorizis li
+ min_age:
+ '1209600': 2 semani
+ '15778476': 6 monati
+ '2629746': 1 monato
+ '31556952': 1 yaro
+ '5259492': 2 monati
+ '604800': 1 semano
+ '63113904': 2 yari
+ '7889238': 3 monati
+ min_age_label: Oldeslimito
+ min_favs: Retenez favorizita posti mine
+ min_favs_hint: Ne efacas irga vua posti quo ganis mine ca favorizquanto. Restez quale vakua por efacar posti sen suciar olia favorizquanto
+ min_reblogs: Retenez bustita posti mine
+ min_reblogs_hint: Ne efacas irga vua posti quo bustigesos mine ca foyoquanto. Restez quale vakua por efacar posti sen suciar olia foyoquanto
stream_entries:
+ pinned: Pinglagita posto
reblogged: diskonocigita
sensitive_content: Titiliva kontenajo
strikes:
errors:
too_late: Ol esas tro tarda ye apelar ca strekizo
+ tags:
+ does_not_match_previous_name: ne parigesas a antea nomo
+ terms:
+ body_html: |
+ + Irga informi quon ni kolektas de vu forsan uzesas per ca metodi:
+ +Ni facar diversa sekuresdemarsh por mmantenar sekureso di vua personala informi kande vu enirar, sendar o acesar vua personala informi.
+ +Ni esforcive proba:
+ +Vu povas demandar e deschargar arkivo di vua kontenajo.
+ +Vu povas inversigebla efacar vua konto irgatempe.
+ +Yes. (Se vu permisas)
+ +Ni uzas kukii por komprenar e sparar vua preferaji por viziti en futuro.
+ +Ni ne vendas, komercar e transferar a externe grupi vua personala identigebla informi.
+ +Vua publika kontenajo forsan deschargesas da altra servili en reto.
+ +Kande vu yurizas softwaro uzar vua konto, ol forsan ganar vua publika profilinformi.
+ +Se ca servilo esas en EU o EEA: Minimo esas 16 yari. (General Data Protection Regulation)
+ +Se ca servilo esas en USA: Minimo esas 13 yari. (Children's Online Privacy Protection Act)
+ +Legalbezonaji forsan esas diferanta se ca servilo esas en altra regiono.
+ +Se ni decidas chanjar nia privatesguidilo, ni postigos ta chanji a ca pagino.
+ +Ca dokumento esas CC-BY-SA.
+ +Tradukesis e modifikesis de Angla de Discourse privacy policy.
+ title: Serveskondiconi e Privatesguidilo di %{instance} + themes: + contrast: Mastodon (Alta kontrasteso) + default: Mastodon (Obskura) + mastodon-light: Mastodon (Brila) + time: + formats: + default: "%d %b, %Y, %H:%M" + month: "%b %Y" + time: "%H:%M" two_factor_authentication: + add: Insertez disable: Extingar + disabled_success: 2-faktoryurizeso sucesoze desaktivigesas + edit: Modifikez + enabled: 2-faktoryurizeso aktivigesas + enabled_success: 2-faktoryurizeso sucesoze aktivigesas generate_recovery_codes: Generate Recovery Codes + lost_recovery_codes: Rigannumeri povigas vu riganas aceso a vua konto se vu perdas vua fono. Se vu perdas vua rigannumeri, vu povas rifacar hike. Vua olda rigannumeri nevalidigesos. + methods: 2-faktormetodi + otp: Yurizsoftwaro + recovery_codes: Kopiez rigannumeri + recovery_codes_regenerated: Rigannumeri sucesoze rifacesas recovery_instructions_html: If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. Keep the recovery codes safe, for example by printing them and storing them with other important documents. + webauthn: Sekuresklefi + user_mailer: + appeal_approved: + action: Irez a vua konto + explanation: Apelo di streko kontre vua konto en %{strike_date} quale vu sendis en %{appeal_date} aprobesis. Vua konto itere standas bone. + subject: Vua apelo de %{date} aprobesis + title: Apelo aprobesis + appeal_rejected: + explanation: Apelo di streko kontre vua konto en %{strike_date} quale vu sendis en %{appeal_date} refuzesis. + subject: Vua apelo de %{date} refuzesis + title: Apelo refuzesis + backup_ready: + explanation: Vu demandis kompleta kopiur di vua konto di Mastodon. Ol esas nun pronte deschargebla! + subject: Vua arkivo pronte deschargebla + title: Arkivekpreno + suspicious_sign_in: + change_password: chanjez vua pasvorto + details: 'Co esas detali di eniro:' + explanation: Ni deskovris eniro a vua konto de nova adreso IP. + further_actions_html: Se co ne agesis da vu, ni rekomendas ke vu %{action} quik e aktivigas 2-faktoryurizo por sekurigar vua konto. + subject: Vua konto acesesis de nova adreso IP + title: Nova eniro + warning: + appeal: Sendez apelo + appeal_description: Se vu kredas ke co esas eroro, vu povas sendar apelo a laboreri di %{instance}. + categories: + spam: Spamo + violation: Kontenajo nesequas ca komunitatguidili + explanation: + delete_statuses: Ol trovesis ke kelka vua posti nesequas komunitatguidilo e do efacesis da jereri di %{instance}. + disable: Vu ne povas uzar vua konto plu, ma vua profilo e altra informi restas bone. Vu povas demandar kopiur di vua informi, chanjar kontoopcioni e efacar vua konto. + mark_statuses_as_sensitive: Kelka vua posti markizesis quale sentoza da jereri di %{instance}. Do, personi bezonos kliktar medii en posti ante prevido montresas. Vu povas markizar medii quale sentoza per su kande postar en futuro. + sensitive: Pos co, omna vua adchargita mediifaili markizesos quale sentoza e celesos dop kliktoaverto. + silence: Vu povas ankore uzar vua konto ma nur personi quo ja sequis vu vidos vua posti en ca servilo, e vu forsan neinkluzesas de diversa deskovrotraiti. Tamen, altra personi povas ankore manuala sequar vu. + suspend: Vu ne povas uzar vua konto pluse, e vua profilo e altra informi ne esas acesebla pluse. Vu povas ankore enirar por demandar kopiur di vua informi til informi komplete efacesas pos cirkum 30 dii, ma ni retenos kelka bazala informi por preventar vu evitar restrikto. + reason: 'Motivo:' + statuses: 'Citita posti:' + subject: + delete_statuses: Vua posti che %{acct} efacis + disable: Vua konto %{acct} frostigesis + mark_statuses_as_sensitive: Vua posti che %{acct} markizesis quale sentoza + none: Averto por %{acct} + sensitive: Vua posti che %{acct} markizesos quale sentoza pos nun + silence: Vua konto %{acct} limitizesis + suspend: Vua konto %{acct} restriktesis + title: + delete_statuses: Posti efacesis + disable: Konto frostigesis + mark_statuses_as_sensitive: Posti markizesis quale sentoza + none: Averto + sensitive: Konto markizesis quale sentoza + silence: Konto limitizesis + suspend: Konto restriktigesis + welcome: + edit_profile_action: Facez profilo + edit_profile_step: Vu povas kustumizar vua profilo per adchargar profilimajo, kapimajo, chanjar vua montronomo e plu. Se vu volas kontrolar nova sequanti ante oli permisesar sequantar vu, vu povas klefklozar vua konto. + explanation: Subo esas guidilo por helpar vu komencar + final_action: Komencez postigar + final_step: 'Jus postigez! Mem sen sequanti, vua publika posti povas videsar da altra personi, exemplo es en lokala tempolineo e en hashtagi. Vu povas anke introduktar su en #introductions hashtagi.' + full_handle: Vua kompleta profilnomo + full_handle_hint: Co esas quon vu dicos a amiki por ke oli povas mesajigar o sequar vu de altra servilo. + review_preferences_action: Chanjez preferaji + review_preferences_step: Certigez ke vu fixas vua preferaji, tale quala retposto quon vu volas ganar, o privatesnivelo quo vu volas vua posti normale uzar. Se vu ne havas movmalado, vu povas selektar aktivigar GIF-autopleo. + subject: Bonveno a Mastodon + tip_federated_timeline: Federatata tempolineo esas generala vido di reto di Mastodon. Ma, ol nur inkluzas personi quon vua vicini abonis, do ol ne esas kompleta. + tip_following: Vu sequas vua administrer(o) di servilo quale originala stando. Por sequar plua interesanta personi, videz lokala e federatata tempolinei. + tip_local_timeline: Lokala tempolineo esas generala vido di personi che %{instance}. Co esas vua apuda vicini! + tip_mobile_webapp: Se vua fonvidilo povigas vu pozar Mastodon a vua hemskreno, vu povas ganar pulsavizi. Ol funcionas tale traiti di fonsoftwaro! + tips: Guidili + title: Bonveno, %{name}! users: + follow_limit_reached: Vu ne povas sequar plu kam %{limit} personi invalid_otp_token: La dufaktora autentikigila kodexo ne esas valida + otp_lost_help_html: Se vu perdas aceso de 2 konto, vu povas kontaktar kun %{email} + seamless_external_login: Vu enirar tra externa serveso, do pasvorto e retpostoopcioni ne esas disponebla. + signed_in_as: 'Eniris quale:' + verification: + explanation_html: 'Vu povas verifikar su kom proprietero di ligili en vua profilmetainformi. En ta kazo, ligita retsito mustas havarrel="me"
atributo. Textokontenajo di ligilo ne esas importanta. Co esas exemplo:'
+ verification: Verifikeso
+ webauthn_credentials:
+ add: Insertez nova sekuresklefo
+ create:
+ error: Existas problemo kande insertar vua sekuresklefo. Probez itere.
+ success: Vua sekuresklefo sucesoze insertesas.
+ delete: Efacez
+ delete_confirmation: Ka vu certe volas efacar ca sekuresklefo?
+ description_html: Se vu aktivigas sekuresklefyurizo, eniro bezonos vu uzar 1 de vua sekuresklefi.
+ destroy:
+ error: Existas problemo kande efacar vua sekuresklefo. Probez itere.
+ success: Vua sekuresklefo sucesoze efacesis.
+ invalid_credential: Nevalida sekuresklefo
+ nickname_hint: Insertez nometo di vua nova sekuresklefo
+ not_enabled: Vu ne aktivigesas WebAuthn til nun
+ not_supported: Ca vidilo ne suportas sekuresklefi
+ otp_required: Por uzar sekuresklefi, aktivigez 2-faktoryurizeso unesme.
+ registered_on: Registris ye %{date}
diff --git a/config/locales/is.yml b/config/locales/is.yml
index 02a2e02545..63d3809a3b 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -1519,6 +1519,9 @@ is:
pinned: Fest færsla
reblogged: endurbirt
sensitive_content: Viðkvæmt efni
+ strikes:
+ errors:
+ too_late: Það er orðið of sint að áfrýja þessari refsingu
tags:
does_not_match_previous_name: samsvarar ekki fyrra nafni
terms:
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 7963c2afe0..c404ea3ac7 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -164,9 +164,9 @@ it:
not_subscribed: Non sottoscritto
pending: Revisioni in attesa
perform_full_suspension: Sospendi
- previous_strikes: Provvedimenti precedenti
+ previous_strikes: Sanzioni precedenti
previous_strikes_description_html:
- one: Questo account ha una violazione.
+ one: Questo account ha una sanzione.
other: Questo account ha %{count} violazioni.
promote: Promuovi
protocol: Protocollo
@@ -208,7 +208,7 @@ it:
silence: Silenzia
silenced: Silenziato
statuses: Stati
- strikes: Provvedimenti precedenti
+ strikes: Sanzioni precedenti
subscribe: Sottoscrivi
suspend: Sospendi
suspended: Sospeso
@@ -597,10 +597,10 @@ it:
action_log: Registro di controllo
action_taken_by: Azione intrapresa da
actions:
- delete_description_html: I post segnalati saranno eliminati e la violazione sarà registrata per aiutarti a prendere ulteriori provvedimenti sulle future infrazioni dello stesso account.
- mark_as_sensitive_description_html: I contenuti nei post segnalati saranno segnati come sensibili e verrà registrata una violazione per aiutarti a prendere ulteriori provvedimenti sulle future infrazioni dello stesso account.
+ delete_description_html: I post segnalati saranno eliminati e la sanzione sarà registrata per aiutarti a prendere ulteriori provvedimenti sulle future infrazioni dello stesso account.
+ mark_as_sensitive_description_html: I contenuti nei post segnalati saranno segnati come sensibili e verrà registrata una sanzione per aiutarti a prendere ulteriori provvedimenti sulle future infrazioni dello stesso account.
other_description_html: Vedi altre opzioni per controllare il comportamento dell'account e personalizzare la comunicazione all'account segnalato.
- resolve_description_html: Nessuna azione sarà intrapresa contro l'account segnalato, nessuna violazione registrata, e la segnalazione sarà chiusa.
+ resolve_description_html: Nessuna azione sarà intrapresa contro l'account segnalato, nessuna sanzione registrata, e la segnalazione sarà chiusa.
silence_description_html: Il profilo sarà visibile solo a coloro che lo seguono o lo cercano manualmente, limitandone fortemente la raggiungibilità. Può sempre essere annullato.
suspend_description_html: Il profilo e tutti i suoi contenuti diventeranno inaccessibili fino a quando non sarà cancellato. L'interazione con l'account sarà impossibile. Annullabile entro 30 giorni.
actions_description_html: Decidete quali azioni intraprendere per risolvere la segnalazione. Se si intraprende un'azione punitiva contro l'account segnalato, gli sarà inviata una notifica via e-mail, tranne quando è selezionata la categoria Spam.
@@ -964,7 +964,7 @@ it:
functional: Il tuo profilo è completamente operativo.
pending: La tua richiesta è in attesa di esame da parte del nostro staff. Potrebbe richiedere un po' di tempo. Riceverai una e-mail se la richiesta è approvata.
redirecting_to: Il tuo account è inattivo perché attualmente reindirizza a %{acct}.
- view_strikes: Visualizza gli avvisi passati contro il tuo profilo
+ view_strikes: Visualizza le sanzioni precedenti prese nei confronti del tuo account
too_fast: Modulo inviato troppo velocemente, riprova.
trouble_logging_in: Problemi di accesso?
use_security_key: Usa la chiave di sicurezza
@@ -1429,7 +1429,7 @@ it:
profile: Profilo
relationships: Follows e followers
statuses_cleanup: Cancellazione automatica dei post
- strikes: Avvisi di moderazione
+ strikes: Sanzioni di moderazione
two_factor_authentication: Autenticazione a due fattori
webauthn_authentication: Chiavi di sicurezza
statuses:
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 6e7b6b0a7e..54dcbc9fa6 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -611,6 +611,7 @@ ja:
placeholder: どのような措置が取られたか、または関連する更新を記述してください…
title: メモ
notes_description_html: 他のモデレーターと将来の自分にメモを残してください
+ quick_actions_description_html: 'クイックアクションを実行するかスクロールして報告された通報を確認してください:'
remote_user_placeholder: "%{instance}からのリモートユーザー"
reopen: 未解決に戻す
report: '通報 #%{id}'
@@ -1321,6 +1322,11 @@ ja:
reports:
errors:
invalid_rules: 有効なルールを参照していません
+ rss:
+ content_warning: '閲覧注意:'
+ descriptions:
+ account: "@%{acct}からの公開投稿"
+ tag: "#%{hashtag}が付けられた公開投稿"
scheduled_statuses:
over_daily_limit: その日予約できる投稿数 %{limit}を超えています
over_total_limit: 予約できる投稿数 %{limit}を超えています
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 124708d340..c16c4f3241 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -17,13 +17,13 @@ ko:
contact_missing: 미설정
contact_unavailable: 없음
continue_to_web: 웹앱에서 계속하기
- discover_users: 유저 발견하기
+ discover_users: 사용자 발견하기
documentation: 문서
federation_hint_html: "%{instance}에 계정을 만드는 것으로 모든 마스토돈 서버, 그리고 호환 되는 모든 서버의 사용자를 팔로우 할 수 있습니다."
get_apps: 모바일 앱 사용해 보기
hosted_on: "%{domain}에서 호스팅 되는 마스토돈"
instance_actor_flash: |
- 이 계정은 가상의 actor로서 개인 유저가 아닌 서버 자체를 나타냅니다.
+ 이 계정은 가상의 actor로서 개인 사용자가 아닌 서버 자체를 나타냅니다.
이것은 페더레이션을 목적으로 사용 되며 인스턴스 전체를 차단하려 하지 않는 이상 차단하지 않아야 합니다, 그 경우에는 도메인 차단을 사용하세요.
learn_more: 자세히
logged_in_as_html: 현재 %{username}으로 로그인 했습니다.
@@ -49,7 +49,7 @@ ko:
silenced_title: 침묵 된 서버들
suspended: 이 서버의 아무도 팔로우 할 수 없으며, 어떤 데이터도 처리되거나 저장 되지 않고 데이터가 교환 되지도 않습니다.
suspended_title: 금지된 서버들
- unavailable_content_html: 마스토돈은 일반적으로 연합우주에 있는 어떤 서버의 유저와도 게시물을 보고 응답을 할 수 있도록 허용합니다. 다음 항목들은 특정한 서버에 대해 만들어 진 예외사항입니다.
+ unavailable_content_html: 마스토돈은 일반적으로 연합우주에 있는 어떤 서버의 사용자와도 게시물을 보고 응답을 할 수 있도록 허용합니다. 다음 항목들은 특정한 서버에 대해 만들어 진 예외사항입니다.
user_count_after:
other: 명
user_count_before: 사용자 수
@@ -330,7 +330,7 @@ ko:
deleted_status: "(삭제된 게시물)"
empty: 로그를 찾을 수 없습니다
filter_by_action: 행동으로 거르기
- filter_by_user: 유저로 거르기
+ filter_by_user: 사용자로 거르기
title: 감사 기록
announcements:
destroyed_msg: 공지가 성공적으로 삭제되었습니다!
@@ -498,8 +498,8 @@ ko:
dashboard:
instance_accounts_dimension: 제일 많이 팔로우된 계정
instance_accounts_measure: 보관된 계정
- instance_followers_measure: 저쪽을 팔로우 하는 우리의 팔로워 수
- instance_follows_measure: 우리를 팔로우 하는 저쪽의 팔로워 수
+ instance_followers_measure: 우리를 팔로우 하는 저쪽의 팔로워 수
+ instance_follows_measure: 저쪽을 팔로우 하는 우리의 팔로워 수
instance_languages_dimension: 상위 언어
instance_media_attachments_measure: 보관된 미디어 첨부파일
instance_reports_measure: 이들에 대한 신고
@@ -561,7 +561,7 @@ ko:
relays:
add_new: 릴레이 추가
delete: 삭제
- description_html: "연합 릴레이는 서버들 사이에서 많은 양의 공개 게시물을 구독하고 중개하는 서버입니다. 이것은 중소 규모의 서버에서 연합우주를 발견하는 데에 도움을 줄 수 있습니다, 이제 로컬 유저들이 다른 서버의 유저들을 수동으로 팔로우 하지 않아도 됩니다."
+ description_html: "연합 릴레이는 서버들 사이에서 많은 양의 공개 게시물을 구독하고 중개하는 서버입니다. 이것은 중소 규모의 서버에서 연합우주를 발견하는 데에 도움을 줄 수 있습니다, 이제 로컬 사용자들이 다른 서버의 사용자들을 수동으로 팔로우 하지 않아도 됩니다."
disable: 비활성화
disabled: 비활성화 됨
enable: 활성화
@@ -646,24 +646,24 @@ ko:
settings:
activity_api_enabled:
desc_html: 주별 로컬에 게시 된 글, 활성 사용자 및 새로운 가입자 수
- title: 유저 활동에 대한 통계 발행
+ title: 사용자 활동에 대한 통계 발행
bootstrap_timeline_accounts:
- desc_html: 콤마로 여러 유저명을 구분. 이 계정들은 팔로우 추천에 반드시 나타나게 됩니다
+ desc_html: 콤마로 여러 사용자명을 구분. 이 계정들은 팔로우 추천에 반드시 나타나게 됩니다
title: 새로운 사용자들에게 추천할 계정들
contact_information:
email: 공개할 메일 주소를 입력
- username: 연락 받을 관리자 유저네임
+ username: 연락 받을 관리자 사용자명
custom_css:
desc_html: 모든 페이지에 적용할 CSS
title: 커스텀 CSS
default_noindex:
- desc_html: 이 설정을 바꾸지 않은 모든 유저들에게 적용 됩니다
- title: 유저들이 기본적으로 검색엔진에 인덱싱 되지 않도록 합니다
+ desc_html: 이 설정을 바꾸지 않은 모든 사용자들에게 적용 됩니다
+ title: 사용자들이 기본적으로 검색엔진에 인덱싱 되지 않도록 합니다
domain_blocks:
all: 모두에게
disabled: 아무에게도 안 함
title: 도메인 차단 보여주기
- users: 로그인 한 유저에게
+ users: 로그인 한 사용자에게
domain_blocks_rationale:
title: 사유 보여주기
hero:
@@ -679,14 +679,14 @@ ko:
desc_html: 민감한 미디어로 설정되었더라도 다른 웹사이트에서 링크 미리보기에 썸네일을 보여줍니다
title: 민감한 미디어를 오픈그래프 미리보기에 보여주기
profile_directory:
- desc_html: 유저들이 발견 될 수 있도록 허용
+ desc_html: 사용자들이 발견 될 수 있도록 허용
title: 프로필 책자 활성화
registrations:
closed_message:
desc_html: 신규 등록을 받지 않을 때 프론트 페이지에 표시됩니다. HTML 태그를 사용할 수 있습니다
title: 신규 등록 정지 시 메시지
deletion:
- desc_html: 유저가 자신의 계정을 삭제할 수 있도록 허용합니다
+ desc_html: 사용자가 자신의 계정을 삭제할 수 있도록 허용합니다
title: 계정 삭제를 허가함
min_invite_role:
disabled: 아무도 못 하게
@@ -704,7 +704,7 @@ ko:
desc_html: 활성화 되면 프리뷰 페이지에서 페디버스의 모든 게시물을 표시합니다. 비활성화시 로컬에 있는 게시물만 표시 됩니다.
title: 타임라인 프리뷰에 알려진 페디버스 표시하기
show_staff_badge:
- desc_html: 유저 페이지에 스태프 배지를 표시합니다
+ desc_html: 사용자 페이지에 스태프 배지를 표시합니다
title: 스태프 배지 표시
site_description:
desc_html: API의 소개문에 사용 됩니다.이 마스토돈 서버의 특별한 점 등을 설명하세요. HTML 태그, 주로 <a>
, <em>
같은 것을 사용 가능합니다.
@@ -915,7 +915,7 @@ ko:
description:
prefix_invited_by_user: "@%{name} 님이 당신을 이 마스토돈 서버로 초대했습니다!"
prefix_sign_up: 마스토돈에 가입하세요!
- suffix: 계정 하나로 사람들을 팔로우 하고, 게시물을 작성하며 마스토돈을 포함한 다른 어떤 서버의 유저와도 메시지를 주고 받을 수 있습니다!
+ suffix: 계정 하나로 사람들을 팔로우 하고, 게시물을 작성하며 마스토돈을 포함한 다른 어떤 서버의 사용자와도 메시지를 주고 받을 수 있습니다!
didnt_get_confirmation: 확인 메일을 받지 못하셨습니까?
dont_have_your_security_key: 보안 키가 없습니까?
forgot_password: 비밀번호를 잊어버리셨습니까?
@@ -960,7 +960,7 @@ ko:
following: '성공! 당신은 다음 계정을 팔로우 하고 있습니다:'
post_follow:
close: 혹은, 당신은 이 윈도우를 닫을 수 있습니다.
- return: 유저 프로필 보기
+ return: 사용자 프로필 보기
web: 웹으로 가기
title: "%{acct} 를 팔로우"
challenge:
@@ -1009,7 +1009,7 @@ ko:
username_unavailable: 당신의 계정명은 앞으로 사용할 수 없습니다
directories:
directory: 프로필 책자
- explanation: 관심사에 대한 유저들을 발견합니다
+ explanation: 관심사에 대한 사용자들을 발견합니다
explore_mastodon: "%{title} 탐사하기"
disputes:
strikes:
@@ -1059,7 +1059,7 @@ ko:
'503': 이 페이지는 임시적인 서버 문제로 인해 제공 될 수 없습니다.
noscript_html: 마스토돈을 사용하기 위해서는 자바스크립트를 켜 주십시오. 아니면 네이티브 앱 중 하나를 사용할 수 있습니다.
existing_username_validator:
- not_found: 해당 유저네임에 대한 로컬 유저를 찾을 수 없습니다
+ not_found: 해당 사용자명에 대한 로컬 유저를 찾을 수 없습니다
not_found_multiple: "%{usernames}를 찾을 수 없습니다"
exports:
archive_takeout:
@@ -1315,7 +1315,7 @@ ko:
relationship: 관계
remove_selected_domains: 선택한 도메인의 모든 팔로워 삭제
remove_selected_followers: 선택한 팔로워 삭제
- remove_selected_follows: 선택한 유저들을 팔로우 해제
+ remove_selected_follows: 선택한 사용자들을 팔로우 해제
status: 계정 상태
remote_follow:
acct: 당신이 사용하는 아이디@도메인을 입력해 주십시오
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 5123a2d6f4..8b2d2787da 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -244,7 +244,7 @@ ru:
approve_appeal: Одобрить обжалование
approve_user: Утвердить
assigned_to_self_report: Присвоение жалоб
- change_email_user: Изменение e-mail пользователей
+ change_email_user: Изменение эл. почты пользователя
confirm_user: Подтверждение пользователей
create_account_warning: Выдача предупреждения
create_announcement: Создание объявлений
@@ -292,6 +292,7 @@ ru:
update_domain_block: Изменение блокировки домена
update_status: Изменение постов
actions:
+ approve_appeal_html: "%{name} одобрил апелляцию на умеренное решение от %{target}"
approve_user_html: "%{name} утвердил(а) регистрацию %{target}"
assigned_to_self_report_html: "%{name} назначил(а) себя для решения жалобы %{target}"
change_email_user_html: "%{name} сменил(а) e-mail пользователя %{target}"
@@ -323,6 +324,7 @@ ru:
enable_user_html: "%{name} разморозил(а) пользователя %{target}"
memorialize_account_html: "%{name} перевел(а) учётную запись пользователя %{target} в статус памятника"
promote_user_html: "%{name} повысил(а) пользователя %{target}"
+ reject_appeal_html: "%{name} отклонил апелляцию на модерацию от %{target}"
reject_user_html: "%{name} отклонил(а) регистрацию %{target}"
remove_avatar_user_html: "%{name} убрал(а) аватарку пользователя %{target}"
reopen_report_html: "%{name} повторно открыл(а) жалобу %{target}"
@@ -466,7 +468,9 @@ ru:
domain: Домен
new:
create: Создать блокировку
+ resolve: Отрезолвенные домены
title: Новая блокировка по домену
+ no_email_domain_block_selected: Блоки домена электронной почты не были изменены, так как не были выбраны
resolved_through_html: Разрешено через %{domain}
title: Блокировка e-mail доменов
follow_recommendations:
@@ -821,6 +825,9 @@ ru:
title: Управление шаблонами предупреждений
admin_mailer:
new_appeal:
+ actions:
+ silence: ограничить учётную запись
+ suspend: приостановить действие учётной записи
subject: "%{username} обжалует решение модерации на %{instance}"
new_pending_account:
body: Ниже указана информация учётной записи. Вы можете одобрить или отклонить заявку.
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 7c1f284ec7..9d82e43a4b 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -11,7 +11,7 @@ ko:
title: 선택사항. 수신자에게는 보이지 않습니다
admin_account_action:
include_statuses: 사용자는 어떤 게시물에 대해 경고나 조치가 취해졌는지 볼 수 있게 됩니다
- send_email_notification: 유저는 어떤 일이 일어났는 지에 대한 설명을 받게 됩니다
+ send_email_notification: 사용자는 어떤 일이 일어났는 지에 대한 설명을 받게 됩니다
text_html: 선택사항. 게시물 문법을 사용할 수 있습니다. 경고 틀을 추가하여 시간을 절약할 수 있습니다
type_html: "%{acct}에 대해 취할 행동 선택"
types:
@@ -43,7 +43,7 @@ ko:
header: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨
inbox_url: 사용 할 릴레이 서버의 프론트페이지에서 URL을 복사합니다
irreversible: 필터링 된 게시물은 나중에 필터가 사라지더라도 돌아오지 않게 됩니다
- locale: 유저 인터페이스, 이메일, 푸시 알림 언어
+ locale: 사용자 인터페이스, 이메일, 푸시 알림 언어
locked: 팔로우 요청을 승인함으로써 누가 당신을 팔로우 할 수 있는지를 수동으로 제어합니다.
password: 최소 8글자
phrase: 게시물 내용이나 열람주의 내용 안에서 대소문자 구분 없이 매칭 됩니다
@@ -59,7 +59,7 @@ ko:
setting_show_application: 당신이 게시물을 작성하는데에 사용한 앱이 게시물의 상세정보에 표시 됩니다
setting_use_blurhash: 그라디언트는 숨겨진 내용의 색상을 기반으로 하지만 상세 내용은 보이지 않게 합니다
setting_use_pending_items: 타임라인의 새 게시물을 자동으로 보여 주는 대신, 클릭해서 나타내도록 합니다
- username: 당신의 유저네임은 %{domain} 안에서 유일해야 합니다
+ username: 당신의 사용자명은 %{domain} 안에서 유일해야 합니다
whole_word: 키워드가 영문과 숫자로만 이루어 진 경우, 단어 전체에 매칭 되었을 때에만 작동하게 합니다
domain_allow:
domain: 이 도메인은 이 서버에서 데이터를 가져갈 수 있고 이 도메인에서 보내진 데이터는 처리되고 저장 됩니다
@@ -105,7 +105,7 @@ ko:
title: 제목
admin_account_action:
include_statuses: 신고된 게시물을 이메일에 포함
- send_email_notification: 이메일로 유저에게 알리기
+ send_email_notification: 이메일로 사용자에게 알리기
text: 커스텀 경고
type: 조치
types:
@@ -179,8 +179,8 @@ ko:
severity: 심각도
sign_in_token_attempt: 보안 코드
type: 불러오기 종류
- username: 유저 이름
- username_or_email: 유저네임 또는 이메일
+ username: 사용자명
+ username_or_email: 사용자명 또는 이메일
whole_word: 단어 전체에 매칭
email_domain_block:
with_dns_records: 도메인의 IP와 MX 레코드 값을 포함
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 1280e164c7..d846c8b92e 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -1573,6 +1573,9 @@ sl:
pinned: Pripeta objava
reblogged: izpostavljeno
sensitive_content: Občutljiva vsebina
+ strikes:
+ errors:
+ too_late: Prepozno je, da bi se pritožili na ta ukrep
tags:
does_not_match_previous_name: se ne ujema s prejšnjim imenom
terms:
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 9812d33bb7..c724b0ebc3 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -579,7 +579,7 @@ vi:
notes:
other: "%{count} kiểm duyệt"
action_log: Nhật ký kiểm duyệt
- action_taken_by: Hành động được thực hiện bởi
+ action_taken_by: Quyết định bởi
actions:
delete_description_html: Những tút bị báo cáo sẽ được xóa và 1 lần cảnh cáo sẽ được ghi lại để giúp bạn lưu ý về tài khoản này trong tương lai.
mark_as_sensitive_description_html: Media trong các tút bị báo cáo sẽ được đánh dấu là nhạy cảm và 1 lần cảnh cáo sẽ được ghi lại để giúp bạn nắm bắt nhanh những vi phạm của cùng một tài khoản.
@@ -1009,7 +1009,7 @@ vi:
explore_mastodon: Thành viên %{title}
disputes:
strikes:
- action_taken: Hành động thực hiện
+ action_taken: Hành động áp dụng
appeal: Khiếu nại
appeal_approved: Khiếu nại đã được chấp nhận và cảnh cáo không còn giá trị
appeal_rejected: Khiếu nại bị từ chối
@@ -1602,7 +1602,7 @@ vi:
mark_statuses_as_sensitive: Vài tút của bạn đã bị kiểm duyệt viên %{instance} đánh dấu nhạy cảm. Mọi người cần nhấn vào media để xem nó. Bạn có thể tự đánh dấu tài khoản của bạn là nhạy cảm.
sensitive: Từ giờ trở đi, tất cả các media của bạn bạn tải lên sẽ được đánh dấu là nhạy cảm và ẩn đằng sau cảnh báo nhấp chuột.
silence: Bạn vẫn có thể sử dụng tài khoản của mình, nhưng chỉ những người đang theo dõi bạn mới thấy bài đăng của bạn. Bạn cũng bị loại khỏi các tính năng khám phá khác. Tuy nhiên, những người khác vẫn có thể theo dõi bạn.
- suspend: Bạn không còn có thể sử dụng tài khoản của bạn, hồ sơ và các dữ liệu khác không còn có thể truy cập được. Bạn vẫn có thể đăng nhập để yêu cầu sao lưu dữ liệu của mình cho đến khi dữ liệu bị xóa hoàn toàn trong khoảng 30 ngày, nhưng chúng tôi sẽ giữ lại một số dữ liệu cơ bản để ngăn bạn tránh bị đình chỉ.
+ suspend: Bạn không còn có thể sử dụng tài khoản của bạn, hồ sơ và các dữ liệu khác không còn có thể truy cập được. Trong vòng 30 ngày, bạn vẫn có thể đăng nhập để yêu cầu bản sao dữ liệu của mình cho đến khi dữ liệu bị xóa hoàn toàn, nhưng chúng tôi sẽ giữ lại một số dữ liệu cơ bản để ngăn bạn thoát khỏi việc vô hiệu hóa.
reason: 'Lý do:'
statuses: 'Tút lưu ý:'
subject:
diff --git a/config/sidekiq.yml b/config/sidekiq.yml
index 26be263265..2a38714684 100644
--- a/config/sidekiq.yml
+++ b/config/sidekiq.yml
@@ -21,6 +21,10 @@
every: '6h'
class: Scheduler::Trends::ReviewNotificationsScheduler
queue: scheduler
+ indexing_scheduler:
+ every: '5m'
+ class: Scheduler::IndexingScheduler
+ queue: scheduler
media_cleanup_scheduler:
cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *'
class: Scheduler::MediaCleanupScheduler
diff --git a/lib/chewy/strategy/custom_sidekiq.rb b/lib/chewy/strategy/custom_sidekiq.rb
deleted file mode 100644
index 794ae4ed44..0000000000
--- a/lib/chewy/strategy/custom_sidekiq.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# frozen_string_literal: true
-
-module Chewy
- class Strategy
- class CustomSidekiq < Sidekiq
- def update(_type, _objects, _options = {})
- super if Chewy.enabled?
- end
- end
- end
-end
diff --git a/lib/chewy/strategy/mastodon.rb b/lib/chewy/strategy/mastodon.rb
new file mode 100644
index 0000000000..ee8b921865
--- /dev/null
+++ b/lib/chewy/strategy/mastodon.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+module Chewy
+ class Strategy
+ class Mastodon < Base
+ def initialize
+ super
+
+ @stash = Hash.new { |hash, key| hash[key] = [] }
+ end
+
+ def update(type, objects, _options = {})
+ @stash[type].concat(type.root.id ? Array.wrap(objects) : type.adapter.identify(objects)) if Chewy.enabled?
+ end
+
+ def leave
+ RedisConfiguration.with do |redis|
+ redis.pipelined do |pipeline|
+ @stash.each do |type, ids|
+ pipeline.sadd("chewy:queue:#{type.name}", ids)
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/mastodon/search_cli.rb b/lib/mastodon/search_cli.rb
index 74f980ba11..b579ebc143 100644
--- a/lib/mastodon/search_cli.rb
+++ b/lib/mastodon/search_cli.rb
@@ -16,19 +16,21 @@ module Mastodon
StatusesIndex,
].freeze
- option :concurrency, type: :numeric, default: 2, aliases: [:c], desc: 'Workload will be split between this number of threads'
- option :batch_size, type: :numeric, default: 1_000, aliases: [:b], desc: 'Number of records in each batch'
+ option :concurrency, type: :numeric, default: 5, aliases: [:c], desc: 'Workload will be split between this number of threads'
+ option :batch_size, type: :numeric, default: 100, aliases: [:b], desc: 'Number of records in each batch'
option :only, type: :array, enum: %w(accounts tags statuses), desc: 'Only process these indices'
+ option :import, type: :boolean, default: true, desc: 'Import data from the database to the index'
+ option :clean, type: :boolean, default: true, desc: 'Remove outdated documents from the index'
desc 'deploy', 'Create or upgrade Elasticsearch indices and populate them'
long_desc <<~LONG_DESC
If Elasticsearch is empty, this command will create the necessary indices
and then import data from the database into those indices.
This command will also upgrade indices if the underlying schema has been
- changed since the last run.
+ changed since the last run. Index upgrades erase index data.
Even if creating or upgrading indices is not necessary, data from the
- database will be imported into the indices.
+ database will be imported into the indices, unless overriden with --no-import.
LONG_DESC
def deploy
if options[:concurrency] < 1
@@ -49,7 +51,9 @@ module Mastodon
end
end
- progress = ProgressBar.create(total: nil, format: '%t%c/%u |%b%i| %e (%r docs/s)', autofinish: false)
+ pool = Concurrent::FixedThreadPool.new(options[:concurrency], max_queue: options[:concurrency] * 10)
+ importers = indices.index_with { |index| "Importer::#{index.name}Importer".constantize.new(batch_size: options[:batch_size], executor: pool) }
+ progress = ProgressBar.create(total: nil, format: '%t%c/%u |%b%i| %e (%r docs/s)', autofinish: false)
# First, ensure all indices are created and have the correct
# structure, so that live data can already be written
@@ -59,99 +63,46 @@ module Mastodon
index.specification.lock!
end
+ progress.title = 'Estimating workload '
+ progress.total = indices.sum { |index| importers[index].estimate! }
+
reset_connection_pools!
- pool = Concurrent::FixedThreadPool.new(options[:concurrency])
- added = Concurrent::AtomicFixnum.new(0)
- removed = Concurrent::AtomicFixnum.new(0)
+ added = 0
+ removed = 0
- progress.title = 'Estimating workload '
-
- # Estimate the amount of data that has to be imported first
- progress.total = indices.sum { |index| index.adapter.default_scope.count }
-
- # Now import all the actual data. Mind that unlike chewy:sync, we don't
- # fetch and compare all record IDs from the database and the index to
- # find out which to add and which to remove from the index. Because with
- # potentially millions of rows, the memory footprint of such a calculation
- # is uneconomical. So we only ever add.
indices.each do |index|
- progress.title = "Importing #{index} "
- batch_size = options[:batch_size]
- slice_size = (batch_size / options[:concurrency]).ceil
+ importer = importers[index]
+ importer.optimize_for_import!
- index.adapter.default_scope.reorder(nil).find_in_batches(batch_size: batch_size) do |batch|
- futures = []
-
- batch.each_slice(slice_size) do |records|
- futures << Concurrent::Future.execute(executor: pool) do
- begin
- if !progress.total.nil? && progress.progress + records.size > progress.total
- # The number of items has changed between start and now,
- # since there is no good way to predict the final count from
- # here, just change the progress bar to an indeterminate one
-
- progress.total = nil
- end
-
- grouped_records = nil
- bulk_body = nil
- index_count = 0
- delete_count = 0
-
- ActiveRecord::Base.connection_pool.with_connection do
- grouped_records = records.to_a.group_by do |record|
- index.adapter.send(:delete_from_index?, record) ? :delete : :to_index
- end
-
- bulk_body = Chewy::Index::Import::BulkBuilder.new(index, **grouped_records).bulk_body
- end
-
- index_count = grouped_records[:to_index].size if grouped_records.key?(:to_index)
- delete_count = grouped_records[:delete].size if grouped_records.key?(:delete)
-
- # The following is an optimization for statuses specifically, since
- # we want to de-index statuses that cannot be searched by anybody,
- # but can't use Chewy's delete_if logic because it doesn't use
- # crutches and our searchable_by logic depends on them
- if index == StatusesIndex
- bulk_body.map! do |entry|
- if entry[:to_index] && entry.dig(:to_index, :data, 'searchable_by').blank?
- index_count -= 1
- delete_count += 1
-
- { delete: entry[:to_index].except(:data) }
- else
- entry
- end
- end
- end
-
- Chewy::Index::Import::BulkRequest.new(index).perform(bulk_body)
-
- progress.progress += records.size
-
- added.increment(index_count)
- removed.increment(delete_count)
-
- sleep 1
- rescue => e
- progress.log pastel.red("Error importing #{index}: #{e}")
- ensure
- RedisConfiguration.pool.checkin if Thread.current[:redis]
- Thread.current[:redis] = nil
- end
- end
- end
-
- futures.map(&:value)
+ importer.on_progress do |(indexed, deleted)|
+ progress.total = nil if progress.progress + indexed + deleted > progress.total
+ progress.progress += indexed + deleted
+ added += indexed
+ removed += deleted
end
+
+ importer.on_failure do |reason|
+ progress.log(pastel.red("Error while importing #{index}: #{reason}"))
+ end
+
+ if options[:import]
+ progress.title = "Importing #{index} "
+ importer.import!
+ end
+
+ if options[:clean]
+ progress.title = "Cleaning #{index} "
+ importer.clean_up!
+ end
+ ensure
+ importer.optimize_for_search!
end
- progress.title = ''
- progress.stop
+ progress.title = 'Done! '
+ progress.finish
- say("Indexed #{added.value} records, de-indexed #{removed.value}", :green, true)
+ say("Indexed #{added} records, de-indexed #{removed}", :green, true)
end
end
end
diff --git a/package.json b/package.json
index cc44a92472..cadd223aa6 100644
--- a/package.json
+++ b/package.json
@@ -22,20 +22,14 @@
"type": "git",
"url": "https://github.com/mastodon/mastodon.git"
},
- "browserslist": [
- "last 2 versions",
- "not IE 11",
- "iOS >= 9",
- "not dead"
- ],
"private": true,
"dependencies": {
- "@babel/core": "^7.17.10",
- "@babel/plugin-proposal-decorators": "^7.17.9",
+ "@babel/core": "^7.17.12",
+ "@babel/plugin-proposal-decorators": "^7.17.12",
"@babel/plugin-transform-react-inline-elements": "^7.16.7",
- "@babel/plugin-transform-runtime": "^7.17.10",
- "@babel/preset-env": "^7.17.10",
- "@babel/preset-react": "^7.16.7",
+ "@babel/plugin-transform-runtime": "^7.17.12",
+ "@babel/preset-env": "^7.17.12",
+ "@babel/preset-react": "^7.17.12",
"@babel/runtime": "^7.17.9",
"@gamestdio/websocket": "^0.3.2",
"@github/webauthn-json": "^0.5.7",
@@ -59,7 +53,7 @@
"css-loader": "^5.2.7",
"cssnano": "^4.1.11",
"detect-passive-events": "^2.0.3",
- "dotenv": "^16.0.0",
+ "dotenv": "^16.0.1",
"emoji-mart": "npm:emoji-mart-lazyload",
"es6-symbol": "^3.1.3",
"escape-html": "^1.0.3",
@@ -69,7 +63,7 @@
"file-loader": "^6.2.0",
"font-awesome": "^4.7.0",
"fuzzysort": "^1.9.0",
- "glob": "^8.0.1",
+ "glob": "^8.0.3",
"history": "^4.10.1",
"http-link-header": "^1.0.4",
"immutable": "^4.0.0",
@@ -162,7 +156,7 @@
"react-test-renderer": "^16.14.0",
"sass-lint": "^1.13.1",
"webpack-dev-server": "^3.11.3",
- "yargs": "^17.4.1"
+ "yargs": "^17.5.1"
},
"resolutions": {
"kind-of": "^6.0.3"
diff --git a/spec/lib/advanced_text_formatter_spec.rb b/spec/lib/advanced_text_formatter_spec.rb
index ea1a9570d0..3255fc9271 100644
--- a/spec/lib/advanced_text_formatter_spec.rb
+++ b/spec/lib/advanced_text_formatter_spec.rb
@@ -40,6 +40,10 @@ RSpec.describe AdvancedTextFormatter do
it 'formats code using and ' do
is_expected.to include 'int main'
end
+
+ it 'does not strip leading spaces' do
+ is_expected.to include '> return 0'
+ end
end
context 'given some quote' do
diff --git a/spec/services/activitypub/fetch_remote_status_service_spec.rb b/spec/services/activitypub/fetch_remote_status_service_spec.rb
index 943cb161d7..7359ca0b43 100644
--- a/spec/services/activitypub/fetch_remote_status_service_spec.rb
+++ b/spec/services/activitypub/fetch_remote_status_service_spec.rb
@@ -3,16 +3,15 @@ require 'rails_helper'
RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
include ActionView::Helpers::TextHelper
- let!(:sender) { Fabricate(:account).tap { |account| account.update(uri: ActivityPub::TagManager.instance.uri_for(account)) } }
+ let!(:sender) { Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar') }
let!(:recipient) { Fabricate(:account) }
- let!(:valid_domain) { Rails.configuration.x.local_domain }
let(:existing_status) { nil }
let(:note) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
- id: "https://#{valid_domain}/@foo/1234",
+ id: "https://foo.bar/@foo/1234",
type: 'Note',
content: 'Lorem ipsum',
attributedTo: ActivityPub::TagManager.instance.uri_for(sender),
@@ -22,7 +21,8 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
subject { described_class.new }
before do
- stub_request(:head, 'https://example.com/watch?v=12345').to_return(status: 404, body: '')
+ stub_request(:get, 'https://foo.bar/watch?v=12345').to_return(status: 404, body: '')
+ stub_request(:get, object[:id]).to_return(body: Oj.dump(object))
end
describe '#call' do
@@ -46,7 +46,7 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
let(:object) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
- id: "https://#{valid_domain}/@foo/1234",
+ id: "https://foo.bar/@foo/1234",
type: 'Video',
name: 'Nyan Cat 10 hours remix',
attributedTo: ActivityPub::TagManager.instance.uri_for(sender),
@@ -54,13 +54,13 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
{
type: 'Link',
mimeType: 'application/x-bittorrent',
- href: "https://#{valid_domain}/12345.torrent",
+ href: "https://foo.bar/12345.torrent",
},
{
type: 'Link',
mimeType: 'text/html',
- href: "https://#{valid_domain}/watch?v=12345",
+ href: "https://foo.bar/watch?v=12345",
},
],
}
@@ -70,8 +70,8 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
status = sender.statuses.first
expect(status).to_not be_nil
- expect(status.url).to eq "https://#{valid_domain}/watch?v=12345"
- expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remixhttps://#{valid_domain}/watch?v=12345"
+ expect(status.url).to eq "https://foo.bar/watch?v=12345"
+ expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remixhttps://foo.bar/watch?v=12345"
end
end
@@ -79,7 +79,7 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
let(:object) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
- id: "https://#{valid_domain}/@foo/1234",
+ id: "https://foo.bar/@foo/1234",
type: 'Audio',
name: 'Nyan Cat 10 hours remix',
attributedTo: ActivityPub::TagManager.instance.uri_for(sender),
@@ -87,13 +87,13 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
{
type: 'Link',
mimeType: 'application/x-bittorrent',
- href: "https://#{valid_domain}/12345.torrent",
+ href: "https://foo.bar/12345.torrent",
},
{
type: 'Link',
mimeType: 'text/html',
- href: "https://#{valid_domain}/watch?v=12345",
+ href: "https://foo.bar/watch?v=12345",
},
],
}
@@ -103,8 +103,8 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
status = sender.statuses.first
expect(status).to_not be_nil
- expect(status.url).to eq "https://#{valid_domain}/watch?v=12345"
- expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remixhttps://#{valid_domain}/watch?v=12345"
+ expect(status.url).to eq "https://foo.bar/watch?v=12345"
+ expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remixhttps://foo.bar/watch?v=12345"
end
end
@@ -112,7 +112,7 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
let(:object) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
- id: "https://#{valid_domain}/@foo/1234",
+ id: "https://foo.bar/@foo/1234",
type: 'Event',
name: "Let's change the world",
attributedTo: ActivityPub::TagManager.instance.uri_for(sender)
@@ -123,8 +123,8 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
status = sender.statuses.first
expect(status).to_not be_nil
- expect(status.url).to eq "https://#{valid_domain}/@foo/1234"
- expect(strip_tags(status.text)).to eq "Let's change the worldhttps://#{valid_domain}/@foo/1234"
+ expect(status.url).to eq "https://foo.bar/@foo/1234"
+ expect(strip_tags(status.text)).to eq "Let's change the worldhttps://foo.bar/@foo/1234"
end
end
@@ -154,7 +154,7 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
let(:object) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
- id: "https://#{valid_domain}/@foo/1234/create",
+ id: "https://foo.bar/@foo/1234/create",
type: 'Create',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: note,
@@ -174,7 +174,7 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
let(:object) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
- id: "https://#{valid_domain}/@foo/1234/create",
+ id: "https://foo.bar/@foo/1234/create",
type: 'Create',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: {
@@ -208,7 +208,7 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
let(:object) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
- id: "https://#{valid_domain}/@foo/1234/create",
+ id: "https://foo.bar/@foo/1234/create",
type: 'Create',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: note.merge(updated: '2021-09-08T22:39:25Z'),
diff --git a/spec/services/fetch_remote_status_service_spec.rb b/spec/services/fetch_remote_status_service_spec.rb
index 0e63cc9eba..fe5f1aed19 100644
--- a/spec/services/fetch_remote_status_service_spec.rb
+++ b/spec/services/fetch_remote_status_service_spec.rb
@@ -1,14 +1,13 @@
require 'rails_helper'
RSpec.describe FetchRemoteStatusService, type: :service do
- let(:account) { Fabricate(:account) }
+ let(:account) { Fabricate(:account, domain: 'example.org', uri: 'https://example.org/foo') }
let(:prefetched_body) { nil }
- let(:valid_domain) { Rails.configuration.x.local_domain }
let(:note) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
- id: "https://#{valid_domain}/@foo/1234",
+ id: "https://example.org/@foo/1234",
type: 'Note',
content: 'Lorem ipsum',
attributedTo: ActivityPub::TagManager.instance.uri_for(account),
@@ -20,7 +19,6 @@ RSpec.describe FetchRemoteStatusService, type: :service do
let(:prefetched_body) { Oj.dump(note) }
before do
- account.update(uri: ActivityPub::TagManager.instance.uri_for(account))
subject
end
diff --git a/spec/services/resolve_url_service_spec.rb b/spec/services/resolve_url_service_spec.rb
index 1b639dea98..b3e3defbff 100644
--- a/spec/services/resolve_url_service_spec.rb
+++ b/spec/services/resolve_url_service_spec.rb
@@ -126,5 +126,24 @@ describe ResolveURLService, type: :service do
end
end
end
+
+ context 'searching for a link that redirects to a local public status' do
+ let(:account) { Fabricate(:account) }
+ let(:poster) { Fabricate(:account) }
+ let!(:status) { Fabricate(:status, account: poster, visibility: :public) }
+ let(:url) { 'https://link.to/foobar' }
+ let(:status_url) { ActivityPub::TagManager.instance.url_for(status) }
+ let(:uri) { ActivityPub::TagManager.instance.uri_for(status) }
+
+ before do
+ stub_request(:get, url).to_return(status: 302, headers: { 'Location' => status_url })
+ body = ActiveModelSerializers::SerializableResource.new(status, serializer: ActivityPub::NoteSerializer, adapter: ActivityPub::Adapter).to_json
+ stub_request(:get, status_url).to_return(body: body, headers: { 'Content-Type' => 'application/activity+json' })
+ end
+
+ it 'returns status by url' do
+ expect(subject.call(url, on_behalf_of: account)).to eq(status)
+ end
+ end
end
end
diff --git a/yarn.lock b/yarn.lock
index 8293dbc1f6..01fae082d3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -23,39 +23,39 @@
dependencies:
"@babel/highlight" "^7.16.7"
-"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.10":
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10":
version "7.17.10"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab"
integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==
-"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.17.10", "@babel/core@^7.7.2":
- version "7.17.10"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.10.tgz#74ef0fbf56b7dfc3f198fc2d927f4f03e12f4b05"
- integrity sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==
+"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.17.12", "@babel/core@^7.7.2":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.12.tgz#b4eb2d7ebc3449b062381644c93050db545b70ee"
+ integrity sha512-44ODe6O1IVz9s2oJE3rZ4trNNKTX9O7KpQpfAP4t8QII/zwrVRHL7i2pxhqtcY7tqMLrrKfMlBKnm1QlrRFs5w==
dependencies:
"@ampproject/remapping" "^2.1.0"
"@babel/code-frame" "^7.16.7"
- "@babel/generator" "^7.17.10"
+ "@babel/generator" "^7.17.12"
"@babel/helper-compilation-targets" "^7.17.10"
- "@babel/helper-module-transforms" "^7.17.7"
+ "@babel/helper-module-transforms" "^7.17.12"
"@babel/helpers" "^7.17.9"
- "@babel/parser" "^7.17.10"
+ "@babel/parser" "^7.17.12"
"@babel/template" "^7.16.7"
- "@babel/traverse" "^7.17.10"
- "@babel/types" "^7.17.10"
+ "@babel/traverse" "^7.17.12"
+ "@babel/types" "^7.17.12"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.1"
semver "^6.3.0"
-"@babel/generator@^7.17.10", "@babel/generator@^7.7.2":
- version "7.17.10"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.10.tgz#c281fa35b0c349bbe9d02916f4ae08fc85ed7189"
- integrity sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==
+"@babel/generator@^7.17.12", "@babel/generator@^7.7.2":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.12.tgz#5970e6160e9be0428e02f4aba62d8551ec366cc8"
+ integrity sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw==
dependencies:
- "@babel/types" "^7.17.10"
- "@jridgewell/gen-mapping" "^0.1.0"
+ "@babel/types" "^7.17.12"
+ "@jridgewell/gen-mapping" "^0.3.0"
jsesc "^2.5.1"
"@babel/helper-annotate-as-pure@^7.16.7":
@@ -91,10 +91,10 @@
browserslist "^4.20.2"
semver "^6.3.0"
-"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6", "@babel/helper-create-class-features-plugin@^7.17.9":
- version "7.17.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz#71835d7fb9f38bd9f1378e40a4c0902fdc2ea49d"
- integrity sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==
+"@babel/helper-create-class-features-plugin@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.12.tgz#d4f8393fc4838cbff6b7c199af5229aee16d07cf"
+ integrity sha512-sZoOeUTkFJMyhqCei2+Z+wtH/BehW8NVKQt7IRUQlRiOARuXymJYfN/FCcI8CvVbR0XVyDM6eLFOlR7YtiXnew==
dependencies:
"@babel/helper-annotate-as-pure" "^7.16.7"
"@babel/helper-environment-visitor" "^7.16.7"
@@ -112,10 +112,10 @@
"@babel/helper-annotate-as-pure" "^7.16.7"
regexpu-core "^4.7.1"
-"@babel/helper-create-regexp-features-plugin@^7.17.0":
- version "7.17.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1"
- integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==
+"@babel/helper-create-regexp-features-plugin@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz#bb37ca467f9694bbe55b884ae7a5cc1e0084e4fd"
+ integrity sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==
dependencies:
"@babel/helper-annotate-as-pure" "^7.16.7"
regexpu-core "^5.0.1"
@@ -214,10 +214,10 @@
dependencies:
"@babel/types" "^7.16.7"
-"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7":
- version "7.17.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd"
- integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==
+"@babel/helper-module-transforms@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.12.tgz#bec00139520cb3feb078ef7a4578562480efb77e"
+ integrity sha512-t5s2BeSWIghhFRPh9XMn6EIGmvn8Lmw5RVASJzkIx1mSemubQQBNIZiQD7WzaFmaHIrjAec4x8z9Yx8SjJ1/LA==
dependencies:
"@babel/helper-environment-visitor" "^7.16.7"
"@babel/helper-module-imports" "^7.16.7"
@@ -225,8 +225,8 @@
"@babel/helper-split-export-declaration" "^7.16.7"
"@babel/helper-validator-identifier" "^7.16.7"
"@babel/template" "^7.16.7"
- "@babel/traverse" "^7.17.3"
- "@babel/types" "^7.17.0"
+ "@babel/traverse" "^7.17.12"
+ "@babel/types" "^7.17.12"
"@babel/helper-optimise-call-expression@^7.16.7":
version "7.16.7"
@@ -235,10 +235,10 @@
dependencies:
"@babel/types" "^7.16.7"
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5"
- integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96"
+ integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==
"@babel/helper-remap-async-to-generator@^7.16.8":
version "7.16.8"
@@ -333,63 +333,63 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.10", "@babel/parser@^7.7.0":
- version "7.17.10"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78"
- integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.12", "@babel/parser@^7.7.0":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.12.tgz#36c2ed06944e3691ba82735fc4cf62d12d491a23"
+ integrity sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA==
-"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050"
- integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e"
+ integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
-"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9"
- integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz#0d498ec8f0374b1e2eb54b9cb2c4c78714c77753"
+ integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
- "@babel/plugin-proposal-optional-chaining" "^7.16.7"
+ "@babel/plugin-proposal-optional-chaining" "^7.17.12"
-"@babel/plugin-proposal-async-generator-functions@^7.16.8":
- version "7.16.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8"
- integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==
+"@babel/plugin-proposal-async-generator-functions@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz#094a417e31ce7e692d84bab06c8e2a607cbeef03"
+ integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/helper-remap-async-to-generator" "^7.16.8"
"@babel/plugin-syntax-async-generators" "^7.8.4"
-"@babel/plugin-proposal-class-properties@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0"
- integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==
+"@babel/plugin-proposal-class-properties@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz#84f65c0cc247d46f40a6da99aadd6438315d80a4"
+ integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-create-class-features-plugin" "^7.17.12"
+ "@babel/helper-plugin-utils" "^7.17.12"
-"@babel/plugin-proposal-class-static-block@^7.17.6":
- version "7.17.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c"
- integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==
+"@babel/plugin-proposal-class-static-block@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.12.tgz#947f09dd496322c9543ec3b318bf52b4d9833334"
+ integrity sha512-8ILyDG6eL14F8iub97dVc8q35Md0PJYAnA5Kz9NACFOkt6ffCcr0FISyUPKHsvuAy36fkpIitxZ9bVYPFMGQHA==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.17.6"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-create-class-features-plugin" "^7.17.12"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-syntax-class-static-block" "^7.14.5"
-"@babel/plugin-proposal-decorators@^7.17.9":
- version "7.17.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.9.tgz#67a1653be9c77ce5b6c318aa90c8287b87831619"
- integrity sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA==
+"@babel/plugin-proposal-decorators@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.12.tgz#26a6a605f271a6703abf97f8fafd1368834c131c"
+ integrity sha512-gL0qSSeIk/VRfTDgtQg/EtejENssN/r3p5gJsPie1UacwiHibprpr19Z0pcK3XKuqQvjGVxsQ37Tl1MGfXzonA==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.17.9"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-create-class-features-plugin" "^7.17.12"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/helper-replace-supers" "^7.16.7"
"@babel/helper-split-export-declaration" "^7.16.7"
- "@babel/plugin-syntax-decorators" "^7.17.0"
+ "@babel/plugin-syntax-decorators" "^7.17.12"
charcodes "^0.2.0"
"@babel/plugin-proposal-dynamic-import@^7.16.7":
@@ -400,36 +400,36 @@
"@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
-"@babel/plugin-proposal-export-namespace-from@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163"
- integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==
+"@babel/plugin-proposal-export-namespace-from@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz#b22864ccd662db9606edb2287ea5fd1709f05378"
+ integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
-"@babel/plugin-proposal-json-strings@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8"
- integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==
+"@babel/plugin-proposal-json-strings@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz#f4642951792437233216d8c1af370bb0fbff4664"
+ integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-syntax-json-strings" "^7.8.3"
-"@babel/plugin-proposal-logical-assignment-operators@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea"
- integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==
+"@babel/plugin-proposal-logical-assignment-operators@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz#c64a1bcb2b0a6d0ed2ff674fd120f90ee4b88a23"
+ integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
-"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99"
- integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz#1e93079bbc2cbc756f6db6a1925157c4a92b94be"
+ integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
"@babel/plugin-proposal-numeric-separator@^7.16.7":
@@ -440,16 +440,16 @@
"@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
-"@babel/plugin-proposal-object-rest-spread@^7.17.3":
- version "7.17.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390"
- integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==
+"@babel/plugin-proposal-object-rest-spread@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.12.tgz#f94a91715a7f2f8cfb3c06af820c776440bc0148"
+ integrity sha512-6l9cO3YXXRh4yPCPRA776ZyJ3RobG4ZKJZhp7NDRbKIOeV3dBPG8FXCF7ZtiO2RTCIOkQOph1xDDcc01iWVNjQ==
dependencies:
- "@babel/compat-data" "^7.17.0"
- "@babel/helper-compilation-targets" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/compat-data" "^7.17.10"
+ "@babel/helper-compilation-targets" "^7.17.10"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
- "@babel/plugin-transform-parameters" "^7.16.7"
+ "@babel/plugin-transform-parameters" "^7.17.12"
"@babel/plugin-proposal-optional-catch-binding@^7.16.7":
version "7.16.7"
@@ -459,40 +459,40 @@
"@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
-"@babel/plugin-proposal-optional-chaining@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a"
- integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==
+"@babel/plugin-proposal-optional-chaining@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz#f96949e9bacace3a9066323a5cf90cfb9de67174"
+ integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
-"@babel/plugin-proposal-private-methods@^7.16.11":
- version "7.16.11"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50"
- integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==
+"@babel/plugin-proposal-private-methods@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz#c2ca3a80beb7539289938da005ad525a038a819c"
+ integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.16.10"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-create-class-features-plugin" "^7.17.12"
+ "@babel/helper-plugin-utils" "^7.17.12"
-"@babel/plugin-proposal-private-property-in-object@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce"
- integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==
+"@babel/plugin-proposal-private-property-in-object@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d"
+ integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==
dependencies:
"@babel/helper-annotate-as-pure" "^7.16.7"
- "@babel/helper-create-class-features-plugin" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-create-class-features-plugin" "^7.17.12"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
-"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2"
- integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==
+"@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz#3dbd7a67bd7f94c8238b394da112d86aaf32ad4d"
+ integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-create-regexp-features-plugin" "^7.17.12"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
@@ -522,12 +522,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-decorators@^7.17.0":
- version "7.17.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz#a2be3b2c9fe7d78bd4994e790896bc411e2f166d"
- integrity sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==
+"@babel/plugin-syntax-decorators@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz#02e8f678602f0af8222235271efea945cfdb018a"
+ integrity sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-syntax-dynamic-import@^7.8.3":
version "7.8.3"
@@ -557,13 +557,20 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.16.7":
+"@babel/plugin-syntax-jsx@^7.12.13":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665"
integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==
dependencies:
"@babel/helper-plugin-utils" "^7.16.7"
+"@babel/plugin-syntax-jsx@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47"
+ integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.17.12"
+
"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
@@ -627,20 +634,20 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-arrow-functions@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154"
- integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==
+"@babel/plugin-transform-arrow-functions@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz#dddd783b473b1b1537ef46423e3944ff24898c45"
+ integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
-"@babel/plugin-transform-async-to-generator@^7.16.8":
- version "7.16.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808"
- integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==
+"@babel/plugin-transform-async-to-generator@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz#dbe5511e6b01eee1496c944e35cdfe3f58050832"
+ integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==
dependencies:
"@babel/helper-module-imports" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/helper-remap-async-to-generator" "^7.16.8"
"@babel/plugin-transform-block-scoped-functions@^7.16.7":
@@ -650,40 +657,40 @@
dependencies:
"@babel/helper-plugin-utils" "^7.16.7"
-"@babel/plugin-transform-block-scoping@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87"
- integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==
+"@babel/plugin-transform-block-scoping@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.17.12.tgz#68fc3c4b3bb7dfd809d97b7ed19a584052a2725c"
+ integrity sha512-jw8XW/B1i7Lqwqj2CbrViPcZijSxfguBWZP2aN59NHgxUyO/OcO1mfdCxH13QhN5LbWhPkX+f+brKGhZTiqtZQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
-"@babel/plugin-transform-classes@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00"
- integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==
+"@babel/plugin-transform-classes@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.17.12.tgz#da889e89a4d38375eeb24985218edeab93af4f29"
+ integrity sha512-cvO7lc7pZat6BsvH6l/EGaI8zpl8paICaoGk+7x7guvtfak/TbIf66nYmJOH13EuG0H+Xx3M+9LQDtSvZFKXKw==
dependencies:
"@babel/helper-annotate-as-pure" "^7.16.7"
"@babel/helper-environment-visitor" "^7.16.7"
- "@babel/helper-function-name" "^7.16.7"
+ "@babel/helper-function-name" "^7.17.9"
"@babel/helper-optimise-call-expression" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/helper-replace-supers" "^7.16.7"
"@babel/helper-split-export-declaration" "^7.16.7"
globals "^11.1.0"
-"@babel/plugin-transform-computed-properties@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470"
- integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==
+"@babel/plugin-transform-computed-properties@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz#bca616a83679698f3258e892ed422546e531387f"
+ integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
-"@babel/plugin-transform-destructuring@^7.17.7":
- version "7.17.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1"
- integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==
+"@babel/plugin-transform-destructuring@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.12.tgz#0861d61e75e2401aca30f2570d46dfc85caacf35"
+ integrity sha512-P8pt0YiKtX5UMUL5Xzsc9Oyij+pJE6JuC+F1k0/brq/OOGs5jDa1If3OY0LRWGvJsJhI+8tsiecL3nJLc0WTlg==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4":
version "7.16.7"
@@ -693,12 +700,12 @@
"@babel/helper-create-regexp-features-plugin" "^7.16.7"
"@babel/helper-plugin-utils" "^7.16.7"
-"@babel/plugin-transform-duplicate-keys@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9"
- integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==
+"@babel/plugin-transform-duplicate-keys@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz#a09aa709a3310013f8e48e0e23bc7ace0f21477c"
+ integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-transform-exponentiation-operator@^7.16.7":
version "7.16.7"
@@ -708,12 +715,12 @@
"@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7"
"@babel/helper-plugin-utils" "^7.16.7"
-"@babel/plugin-transform-for-of@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c"
- integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==
+"@babel/plugin-transform-for-of@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.17.12.tgz#5397c22554ec737a27918e7e7e0e7b679b05f5ec"
+ integrity sha512-76lTwYaCxw8ldT7tNmye4LLwSoKDbRCBzu6n/DcK/P3FOR29+38CIIaVIZfwol9By8W/QHORYEnYSLuvcQKrsg==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-transform-function-name@^7.16.7":
version "7.16.7"
@@ -724,12 +731,12 @@
"@babel/helper-function-name" "^7.16.7"
"@babel/helper-plugin-utils" "^7.16.7"
-"@babel/plugin-transform-literals@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1"
- integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==
+"@babel/plugin-transform-literals@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz#97131fbc6bbb261487105b4b3edbf9ebf9c830ae"
+ integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-transform-member-expression-literals@^7.16.7":
version "7.16.7"
@@ -738,57 +745,58 @@
dependencies:
"@babel/helper-plugin-utils" "^7.16.7"
-"@babel/plugin-transform-modules-amd@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186"
- integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==
+"@babel/plugin-transform-modules-amd@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.17.12.tgz#08ec1f10f854c15bb3b44952e60f1fc126d7d481"
+ integrity sha512-p5rt9tB5Ndcc2Za7CeNxVf7YAjRcUMR6yi8o8tKjb9KhRkEvXwa+C0hj6DA5bVDkKRxB0NYhMUGbVKoFu4+zEA==
dependencies:
- "@babel/helper-module-transforms" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-module-transforms" "^7.17.12"
+ "@babel/helper-plugin-utils" "^7.17.12"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-commonjs@^7.17.9":
- version "7.17.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz#274be1a2087beec0254d4abd4d86e52442e1e5b6"
- integrity sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==
+"@babel/plugin-transform-modules-commonjs@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.12.tgz#37691c7404320d007288edd5a2d8600bcef61c34"
+ integrity sha512-tVPs6MImAJz+DiX8Y1xXEMdTk5Lwxu9jiPjlS+nv5M2A59R7+/d1+9A8C/sbuY0b3QjIxqClkj6KAplEtRvzaA==
dependencies:
- "@babel/helper-module-transforms" "^7.17.7"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-module-transforms" "^7.17.12"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/helper-simple-access" "^7.17.7"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-systemjs@^7.17.8":
- version "7.17.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859"
- integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==
+"@babel/plugin-transform-modules-systemjs@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.12.tgz#e631b151b99d25401cd9679476cc35e6e5bbc7d4"
+ integrity sha512-NVhDb0q00hqZcuLduUf/kMzbOQHiocmPbIxIvk23HLiEqaTKC/l4eRxeC7lO63M72BmACoiKOcb9AkOAJRerpw==
dependencies:
"@babel/helper-hoist-variables" "^7.16.7"
- "@babel/helper-module-transforms" "^7.17.7"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-module-transforms" "^7.17.12"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/helper-validator-identifier" "^7.16.7"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-umd@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618"
- integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==
+"@babel/plugin-transform-modules-umd@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.17.12.tgz#b37be3ecf198c1fea10e6268461729ced05644e1"
+ integrity sha512-BnsPkrUHsjzZGpnrmJeDFkOMMljWFHPjDc9xDcz71/C+ybF3lfC3V4m3dwXPLZrE5b3bgd4V+3/Pj+3620d7IA==
dependencies:
- "@babel/helper-module-transforms" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-module-transforms" "^7.17.12"
+ "@babel/helper-plugin-utils" "^7.17.12"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.17.10":
- version "7.17.10"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.10.tgz#715dbcfafdb54ce8bccd3d12e8917296a4ba66a4"
- integrity sha512-v54O6yLaJySCs6mGzaVOUw9T967GnH38T6CQSAtnzdNPwu84l2qAjssKzo/WSO8Yi7NF+7ekm5cVbF/5qiIgNA==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz#9c4a5a5966e0434d515f2675c227fd8cc8606931"
+ integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.17.0"
+ "@babel/helper-create-regexp-features-plugin" "^7.17.12"
+ "@babel/helper-plugin-utils" "^7.17.12"
-"@babel/plugin-transform-new-target@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244"
- integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==
+"@babel/plugin-transform-new-target@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.17.12.tgz#10842cd605a620944e81ea6060e9e65c265742e3"
+ integrity sha512-CaOtzk2fDYisbjAD4Sd1MTKGVIpRtx9bWLyj24Y/k6p4s4gQ3CqDGJauFJxt8M/LEx003d0i3klVqnN73qvK3w==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-transform-object-super@^7.16.7":
version "7.16.7"
@@ -798,12 +806,12 @@
"@babel/helper-plugin-utils" "^7.16.7"
"@babel/helper-replace-supers" "^7.16.7"
-"@babel/plugin-transform-parameters@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f"
- integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==
+"@babel/plugin-transform-parameters@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz#eb467cd9586ff5ff115a9880d6fdbd4a846b7766"
+ integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-transform-property-literals@^7.16.7":
version "7.16.7"
@@ -834,16 +842,16 @@
dependencies:
"@babel/plugin-transform-react-jsx" "^7.16.7"
-"@babel/plugin-transform-react-jsx@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz#86a6a220552afd0e4e1f0388a68a372be7add0d4"
- integrity sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==
+"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz#2aa20022709cd6a3f40b45d60603d5f269586dba"
+ integrity sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==
dependencies:
"@babel/helper-annotate-as-pure" "^7.16.7"
"@babel/helper-module-imports" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
- "@babel/plugin-syntax-jsx" "^7.16.7"
- "@babel/types" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
+ "@babel/plugin-syntax-jsx" "^7.17.12"
+ "@babel/types" "^7.17.12"
"@babel/plugin-transform-react-pure-annotations@^7.16.7":
version "7.16.7"
@@ -860,20 +868,20 @@
dependencies:
regenerator-transform "^0.15.0"
-"@babel/plugin-transform-reserved-words@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586"
- integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==
+"@babel/plugin-transform-reserved-words@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz#7dbd349f3cdffba751e817cf40ca1386732f652f"
+ integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
-"@babel/plugin-transform-runtime@^7.17.10":
- version "7.17.10"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.10.tgz#b89d821c55d61b5e3d3c3d1d636d8d5a81040ae1"
- integrity sha512-6jrMilUAJhktTr56kACL8LnWC5hx3Lf27BS0R0DSyW/OoJfb/iTHeE96V3b1dgKG3FSFdd/0culnYWMkjcKCig==
+"@babel/plugin-transform-runtime@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.12.tgz#5dc79735c4038c6f4fc0490f68f2798ce608cadd"
+ integrity sha512-xsl5MeGjWnmV6Ui9PfILM2+YRpa3GqLOrczPpXV3N2KCgQGU+sU8OfzuMbjkIdfvZEZIm+3y0V7w58sk0SGzlw==
dependencies:
"@babel/helper-module-imports" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
babel-plugin-polyfill-corejs2 "^0.3.0"
babel-plugin-polyfill-corejs3 "^0.5.0"
babel-plugin-polyfill-regenerator "^0.3.0"
@@ -886,12 +894,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.16.7"
-"@babel/plugin-transform-spread@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44"
- integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==
+"@babel/plugin-transform-spread@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz#c112cad3064299f03ea32afed1d659223935d1f5"
+ integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
"@babel/plugin-transform-sticky-regex@^7.16.7":
@@ -901,19 +909,19 @@
dependencies:
"@babel/helper-plugin-utils" "^7.16.7"
-"@babel/plugin-transform-template-literals@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab"
- integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==
+"@babel/plugin-transform-template-literals@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.17.12.tgz#4aec0a18f39dd86c442e1d077746df003e362c6e"
+ integrity sha512-kAKJ7DX1dSRa2s7WN1xUAuaQmkTpN+uig4wCKWivVXIObqGbVTUlSavHyfI2iZvz89GFAMGm9p2DBJ4Y1Tp0hw==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
-"@babel/plugin-transform-typeof-symbol@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e"
- integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==
+"@babel/plugin-transform-typeof-symbol@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz#0f12f57ac35e98b35b4ed34829948d42bd0e6889"
+ integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-transform-unicode-escapes@^7.16.7":
version "7.16.7"
@@ -930,32 +938,32 @@
"@babel/helper-create-regexp-features-plugin" "^7.16.7"
"@babel/helper-plugin-utils" "^7.16.7"
-"@babel/preset-env@^7.17.10":
- version "7.17.10"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.17.10.tgz#a81b093669e3eb6541bb81a23173c5963c5de69c"
- integrity sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g==
+"@babel/preset-env@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.17.12.tgz#b81ae0bb762b683d68b07b6d2d4020ccbef8d67a"
+ integrity sha512-Kke30Rj3Lmcx97bVs71LO0s8M6FmJ7tUAQI9fNId62rf0cYG1UAWwdNO9/sE0/pLEahAw1MqMorymoD12bj5Fg==
dependencies:
"@babel/compat-data" "^7.17.10"
"@babel/helper-compilation-targets" "^7.17.10"
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/helper-validator-option" "^7.16.7"
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7"
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7"
- "@babel/plugin-proposal-async-generator-functions" "^7.16.8"
- "@babel/plugin-proposal-class-properties" "^7.16.7"
- "@babel/plugin-proposal-class-static-block" "^7.17.6"
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12"
+ "@babel/plugin-proposal-async-generator-functions" "^7.17.12"
+ "@babel/plugin-proposal-class-properties" "^7.17.12"
+ "@babel/plugin-proposal-class-static-block" "^7.17.12"
"@babel/plugin-proposal-dynamic-import" "^7.16.7"
- "@babel/plugin-proposal-export-namespace-from" "^7.16.7"
- "@babel/plugin-proposal-json-strings" "^7.16.7"
- "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7"
- "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7"
+ "@babel/plugin-proposal-export-namespace-from" "^7.17.12"
+ "@babel/plugin-proposal-json-strings" "^7.17.12"
+ "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12"
"@babel/plugin-proposal-numeric-separator" "^7.16.7"
- "@babel/plugin-proposal-object-rest-spread" "^7.17.3"
+ "@babel/plugin-proposal-object-rest-spread" "^7.17.12"
"@babel/plugin-proposal-optional-catch-binding" "^7.16.7"
- "@babel/plugin-proposal-optional-chaining" "^7.16.7"
- "@babel/plugin-proposal-private-methods" "^7.16.11"
- "@babel/plugin-proposal-private-property-in-object" "^7.16.7"
- "@babel/plugin-proposal-unicode-property-regex" "^7.16.7"
+ "@babel/plugin-proposal-optional-chaining" "^7.17.12"
+ "@babel/plugin-proposal-private-methods" "^7.17.12"
+ "@babel/plugin-proposal-private-property-in-object" "^7.17.12"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.17.12"
"@babel/plugin-syntax-async-generators" "^7.8.4"
"@babel/plugin-syntax-class-properties" "^7.12.13"
"@babel/plugin-syntax-class-static-block" "^7.14.5"
@@ -970,40 +978,40 @@
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
"@babel/plugin-syntax-top-level-await" "^7.14.5"
- "@babel/plugin-transform-arrow-functions" "^7.16.7"
- "@babel/plugin-transform-async-to-generator" "^7.16.8"
+ "@babel/plugin-transform-arrow-functions" "^7.17.12"
+ "@babel/plugin-transform-async-to-generator" "^7.17.12"
"@babel/plugin-transform-block-scoped-functions" "^7.16.7"
- "@babel/plugin-transform-block-scoping" "^7.16.7"
- "@babel/plugin-transform-classes" "^7.16.7"
- "@babel/plugin-transform-computed-properties" "^7.16.7"
- "@babel/plugin-transform-destructuring" "^7.17.7"
+ "@babel/plugin-transform-block-scoping" "^7.17.12"
+ "@babel/plugin-transform-classes" "^7.17.12"
+ "@babel/plugin-transform-computed-properties" "^7.17.12"
+ "@babel/plugin-transform-destructuring" "^7.17.12"
"@babel/plugin-transform-dotall-regex" "^7.16.7"
- "@babel/plugin-transform-duplicate-keys" "^7.16.7"
+ "@babel/plugin-transform-duplicate-keys" "^7.17.12"
"@babel/plugin-transform-exponentiation-operator" "^7.16.7"
- "@babel/plugin-transform-for-of" "^7.16.7"
+ "@babel/plugin-transform-for-of" "^7.17.12"
"@babel/plugin-transform-function-name" "^7.16.7"
- "@babel/plugin-transform-literals" "^7.16.7"
+ "@babel/plugin-transform-literals" "^7.17.12"
"@babel/plugin-transform-member-expression-literals" "^7.16.7"
- "@babel/plugin-transform-modules-amd" "^7.16.7"
- "@babel/plugin-transform-modules-commonjs" "^7.17.9"
- "@babel/plugin-transform-modules-systemjs" "^7.17.8"
- "@babel/plugin-transform-modules-umd" "^7.16.7"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.10"
- "@babel/plugin-transform-new-target" "^7.16.7"
+ "@babel/plugin-transform-modules-amd" "^7.17.12"
+ "@babel/plugin-transform-modules-commonjs" "^7.17.12"
+ "@babel/plugin-transform-modules-systemjs" "^7.17.12"
+ "@babel/plugin-transform-modules-umd" "^7.17.12"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12"
+ "@babel/plugin-transform-new-target" "^7.17.12"
"@babel/plugin-transform-object-super" "^7.16.7"
- "@babel/plugin-transform-parameters" "^7.16.7"
+ "@babel/plugin-transform-parameters" "^7.17.12"
"@babel/plugin-transform-property-literals" "^7.16.7"
"@babel/plugin-transform-regenerator" "^7.17.9"
- "@babel/plugin-transform-reserved-words" "^7.16.7"
+ "@babel/plugin-transform-reserved-words" "^7.17.12"
"@babel/plugin-transform-shorthand-properties" "^7.16.7"
- "@babel/plugin-transform-spread" "^7.16.7"
+ "@babel/plugin-transform-spread" "^7.17.12"
"@babel/plugin-transform-sticky-regex" "^7.16.7"
- "@babel/plugin-transform-template-literals" "^7.16.7"
- "@babel/plugin-transform-typeof-symbol" "^7.16.7"
+ "@babel/plugin-transform-template-literals" "^7.17.12"
+ "@babel/plugin-transform-typeof-symbol" "^7.17.12"
"@babel/plugin-transform-unicode-escapes" "^7.16.7"
"@babel/plugin-transform-unicode-regex" "^7.16.7"
"@babel/preset-modules" "^0.1.5"
- "@babel/types" "^7.17.10"
+ "@babel/types" "^7.17.12"
babel-plugin-polyfill-corejs2 "^0.3.0"
babel-plugin-polyfill-corejs3 "^0.5.0"
babel-plugin-polyfill-regenerator "^0.3.0"
@@ -1021,15 +1029,15 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
-"@babel/preset-react@^7.16.7":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852"
- integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==
+"@babel/preset-react@^7.17.12":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.17.12.tgz#62adbd2d1870c0de3893095757ed5b00b492ab3d"
+ integrity sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.17.12"
"@babel/helper-validator-option" "^7.16.7"
"@babel/plugin-transform-react-display-name" "^7.16.7"
- "@babel/plugin-transform-react-jsx" "^7.16.7"
+ "@babel/plugin-transform-react-jsx" "^7.17.12"
"@babel/plugin-transform-react-jsx-development" "^7.16.7"
"@babel/plugin-transform-react-pure-annotations" "^7.16.7"
@@ -1064,26 +1072,26 @@
"@babel/parser" "^7.16.7"
"@babel/types" "^7.16.7"
-"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.10", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2":
- version "7.17.10"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.10.tgz#1ee1a5ac39f4eac844e6cf855b35520e5eb6f8b5"
- integrity sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==
+"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.12", "@babel/traverse@^7.17.9", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.12.tgz#011874d2abbca0ccf1adbe38f6f7a4ff1747599c"
+ integrity sha512-zULPs+TbCvOkIFd4FrG53xrpxvCBwLIgo6tO0tJorY7YV2IWFxUfS/lXDJbGgfyYt9ery/Gxj2niwttNnB0gIw==
dependencies:
"@babel/code-frame" "^7.16.7"
- "@babel/generator" "^7.17.10"
+ "@babel/generator" "^7.17.12"
"@babel/helper-environment-visitor" "^7.16.7"
"@babel/helper-function-name" "^7.17.9"
"@babel/helper-hoist-variables" "^7.16.7"
"@babel/helper-split-export-declaration" "^7.16.7"
- "@babel/parser" "^7.17.10"
- "@babel/types" "^7.17.10"
+ "@babel/parser" "^7.17.12"
+ "@babel/types" "^7.17.12"
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.10", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
- version "7.17.10"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.10.tgz#d35d7b4467e439fcf06d195f8100e0fea7fc82c4"
- integrity sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==
+"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
+ version "7.17.12"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.12.tgz#1210690a516489c0200f355d87619157fbbd69a0"
+ integrity sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==
dependencies:
"@babel/helper-validator-identifier" "^7.16.7"
to-fast-properties "^2.0.0"
@@ -1461,13 +1469,14 @@
"@types/yargs" "^17.0.8"
chalk "^4.0.0"
-"@jridgewell/gen-mapping@^0.1.0":
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
- integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
+"@jridgewell/gen-mapping@^0.3.0":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9"
+ integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==
dependencies:
"@jridgewell/set-array" "^1.0.0"
"@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/resolve-uri@^3.0.3":
version "3.0.4"
@@ -1500,6 +1509,14 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
+"@jridgewell/trace-mapping@^0.3.9":
+ version "0.3.13"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea"
+ integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.0.3"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+
"@node-redis/bloom@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@node-redis/bloom/-/bloom-1.0.1.tgz#144474a0b7dc4a4b91badea2cfa9538ce0a1854e"
@@ -3467,14 +3484,7 @@ content-type@~1.0.4:
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
-convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
- integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
- dependencies:
- safe-buffer "~5.1.1"
-
-convert-source-map@^1.5.0:
+convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
@@ -3900,7 +3910,7 @@ debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
dependencies:
ms "2.0.0"
-debug@4:
+debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -3914,13 +3924,6 @@ debug@^3.1.1, debug@^3.2.6, debug@^3.2.7:
dependencies:
ms "^2.1.1"
-debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
- integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
- dependencies:
- ms "2.1.2"
-
decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
@@ -4205,10 +4208,10 @@ dot-prop@^5.2.0:
dependencies:
is-obj "^2.0.0"
-dotenv@^16.0.0:
- version "16.0.0"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411"
- integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==
+dotenv@^16.0.1:
+ version "16.0.1"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d"
+ integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==
duplexer@^0.1.2:
version "0.1.2"
@@ -5379,17 +5382,16 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.1.tgz#00308f5c035aa0b2a447cd37ead267ddff1577d3"
- integrity sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==
+glob@^8.0.3:
+ version "8.0.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e"
+ integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^5.0.1"
once "^1.3.0"
- path-is-absolute "^1.0.0"
glob@~7.1.1:
version "7.1.7"
@@ -11829,10 +11831,10 @@ yargs@^13.3.2:
y18n "^4.0.0"
yargs-parser "^13.1.2"
-yargs@^17.3.1, yargs@^17.4.1:
- version "17.4.1"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.4.1.tgz#ebe23284207bb75cee7c408c33e722bfb27b5284"
- integrity sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==
+yargs@^17.3.1, yargs@^17.5.1:
+ version "17.5.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e"
+ integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==
dependencies:
cliui "^7.0.2"
escalade "^3.1.1"