Merge commit 'a15139bc02d279b9ef85e95990f41e3e88838d20' into glitch-soc/merge-upstream

main-rebase-security-fix
Claire 2024-05-01 19:42:34 +02:00
commit eeefb7cdbc
25 changed files with 451 additions and 283 deletions

View File

@ -53,7 +53,7 @@ jobs:
# Create or update the pull request # Create or update the pull request
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v6.0.3 uses: peter-evans/create-pull-request@v6.0.4
with: with:
commit-message: 'New Crowdin translations' commit-message: 'New Crowdin translations'
title: 'New Crowdin Translations (automated)' title: 'New Crowdin Translations (automated)'

View File

@ -9,6 +9,7 @@ inherit_mode:
require: require:
- rubocop-rails - rubocop-rails
- rubocop-rspec - rubocop-rspec
- rubocop-rspec_rails
- rubocop-performance - rubocop-performance
- rubocop-capybara - rubocop-capybara
- ./lib/linter/rubocop_middle_dot - ./lib/linter/rubocop_middle_dot

View File

@ -54,15 +54,6 @@ Rails/OutputSafety:
Exclude: Exclude:
- 'config/initializers/simple_form.rb' - 'config/initializers/simple_form.rb'
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/UniqueValidationWithoutIndex:
Exclude:
- 'app/models/account_alias.rb'
- 'app/models/custom_filter_status.rb'
- 'app/models/identity.rb'
- 'app/models/webauthn_credential.rb'
# This cop supports unsafe autocorrection (--autocorrect-all). # This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedMethods, AllowedPatterns. # Configuration parameters: AllowedMethods, AllowedPatterns.
# AllowedMethods: ==, equal?, eql? # AllowedMethods: ==, equal?, eql?
@ -197,13 +188,6 @@ Style/OptionalBooleanParameter:
- 'app/workers/unfollow_follow_worker.rb' - 'app/workers/unfollow_follow_worker.rb'
- 'lib/mastodon/redis_config.rb' - 'lib/mastodon/redis_config.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: PreferredDelimiters.
Style/PercentLiteralDelimiters:
Exclude:
- 'config/deploy.rb'
- 'config/initializers/doorkeeper.rb'
# This cop supports unsafe autocorrection (--autocorrect-all). # This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle. # Configuration parameters: EnforcedStyle.
# SupportedStyles: short, verbose # SupportedStyles: short, verbose
@ -248,33 +232,6 @@ Style/StringConcatenation:
Exclude: Exclude:
- 'config/initializers/paperclip.rb' - 'config/initializers/paperclip.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
# SupportedStyles: single_quotes, double_quotes
Style/StringLiterals:
Exclude:
- 'config/environments/production.rb'
- 'config/initializers/backtrace_silencers.rb'
- 'config/initializers/http_client_proxy.rb'
- 'config/initializers/rack_attack.rb'
- 'config/initializers/webauthn.rb'
- 'config/routes.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyleForMultiline.
# SupportedStylesForMultiline: comma, consistent_comma, no_comma
Style/TrailingCommaInArguments:
Exclude:
- 'config/initializers/paperclip.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyleForMultiline.
# SupportedStylesForMultiline: comma, consistent_comma, no_comma
Style/TrailingCommaInHashLiteral:
Exclude:
- 'config/environments/production.rb'
- 'config/environments/test.rb'
# This cop supports safe autocorrection (--autocorrect). # This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: WordRegex. # Configuration parameters: WordRegex.
# SupportedStyles: percent, brackets # SupportedStyles: percent, brackets

View File

@ -12,7 +12,7 @@ gem 'thor', '~> 1.2'
# For why irb is in the Gemfile, see: https://ruby.social/@st0012/111444685161478182 # For why irb is in the Gemfile, see: https://ruby.social/@st0012/111444685161478182
gem 'irb', '~> 1.8' gem 'irb', '~> 1.8'
gem 'dotenv-rails', '~> 2.8' gem 'dotenv'
gem 'haml-rails', '~>2.0' gem 'haml-rails', '~>2.0'
gem 'pg', '~> 1.5' gem 'pg', '~> 1.5'
gem 'pghero' gem 'pghero'

View File

@ -102,8 +102,8 @@ GEM
attr_required (1.0.2) attr_required (1.0.2)
awrence (1.2.1) awrence (1.2.1)
aws-eventstream (1.3.0) aws-eventstream (1.3.0)
aws-partitions (1.914.0) aws-partitions (1.916.0)
aws-sdk-core (3.192.0) aws-sdk-core (3.192.1)
aws-eventstream (~> 1, >= 1.3.0) aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0) aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8) aws-sigv4 (~> 1.8)
@ -186,7 +186,7 @@ GEM
bigdecimal bigdecimal
rexml rexml
crass (1.0.6) crass (1.0.6)
css_parser (1.16.0) css_parser (1.17.1)
addressable addressable
csv (3.3.0) csv (3.3.0)
database_cleaner-active_record (2.1.0) database_cleaner-active_record (2.1.0)
@ -220,10 +220,7 @@ GEM
domain_name (0.6.20240107) domain_name (0.6.20240107)
doorkeeper (5.6.9) doorkeeper (5.6.9)
railties (>= 5) railties (>= 5)
dotenv (2.8.1) dotenv (3.1.0)
dotenv-rails (2.8.1)
dotenv (= 2.8.1)
railties (>= 3.2)
drb (2.2.1) drb (2.2.1)
ed25519 (1.3.0) ed25519 (1.3.0)
elasticsearch (7.13.3) elasticsearch (7.13.3)
@ -241,7 +238,7 @@ GEM
mail (~> 2.7) mail (~> 2.7)
encryptor (3.0.0) encryptor (3.0.0)
erubi (1.12.0) erubi (1.12.0)
et-orbi (1.2.10) et-orbi (1.2.11)
tzinfo tzinfo
excon (0.110.0) excon (0.110.0)
fabrication (2.31.0) fabrication (2.31.0)
@ -275,8 +272,8 @@ GEM
fast_blank (1.0.1) fast_blank (1.0.1)
fastimage (2.3.1) fastimage (2.3.1)
ffi (1.16.3) ffi (1.16.3)
ffi-compiler (1.0.1) ffi-compiler (1.3.2)
ffi (>= 1.0.0) ffi (>= 1.15.5)
rake rake
fog-core (2.4.0) fog-core (2.4.0)
builder builder
@ -317,7 +314,7 @@ GEM
hashie (5.0.0) hashie (5.0.0)
hcaptcha (7.1.0) hcaptcha (7.1.0)
json json
highline (2.1.0) highline (3.0.1)
hiredis (0.6.3) hiredis (0.6.3)
hkdf (0.3.0) hkdf (0.3.0)
htmlentities (4.3.4) htmlentities (4.3.4)
@ -435,11 +432,11 @@ GEM
mime-types-data (~> 3.2015) mime-types-data (~> 3.2015)
mime-types-data (3.2024.0305) mime-types-data (3.2024.0305)
mini_mime (1.1.5) mini_mime (1.1.5)
mini_portile2 (2.8.5) mini_portile2 (2.8.6)
minitest (5.22.3) minitest (5.22.3)
msgpack (1.7.2) msgpack (1.7.2)
multi_json (1.15.0) multi_json (1.15.0)
multipart-post (2.3.0) multipart-post (2.4.0)
mutex_m (0.2.0) mutex_m (0.2.0)
net-http (0.4.1) net-http (0.4.1)
uri uri
@ -453,7 +450,7 @@ GEM
net-protocol net-protocol
net-protocol (0.2.2) net-protocol (0.2.2)
timeout timeout
net-smtp (0.4.0.1) net-smtp (0.5.0)
net-protocol net-protocol
nio4r (2.7.1) nio4r (2.7.1)
nokogiri (1.16.4) nokogiri (1.16.4)
@ -546,7 +543,7 @@ GEM
rack-protection (3.2.0) rack-protection (3.2.0)
base64 (>= 0.1.0) base64 (>= 0.1.0)
rack (~> 2.2, >= 2.2.4) rack (~> 2.2, >= 2.2.4)
rack-proxy (0.7.6) rack-proxy (0.7.7)
rack rack
rack-session (1.0.2) rack-session (1.0.2)
rack (< 3) rack (< 3)
@ -592,7 +589,7 @@ GEM
thor (~> 1.0, >= 1.2.2) thor (~> 1.0, >= 1.2.2)
zeitwerk (~> 2.6) zeitwerk (~> 2.6)
rainbow (3.1.1) rainbow (3.1.1)
rake (13.1.0) rake (13.2.1)
rdf (3.3.1) rdf (3.3.1)
bcp47_spec (~> 0.2) bcp47_spec (~> 0.2)
link_header (~> 0.0, >= 0.0.8) link_header (~> 0.0, >= 0.0.8)
@ -607,9 +604,9 @@ GEM
redlock (1.3.2) redlock (1.3.2)
redis (>= 3.0.0, < 6.0) redis (>= 3.0.0, < 6.0)
regexp_parser (2.9.0) regexp_parser (2.9.0)
reline (0.5.1) reline (0.5.2)
io-console (~> 0.5) io-console (~> 0.5)
request_store (1.5.1) request_store (1.6.0)
rack (>= 1.4) rack (>= 1.4)
responders (3.1.1) responders (3.1.1)
actionpack (>= 5.2) actionpack (>= 5.2)
@ -676,11 +673,11 @@ GEM
rubocop-capybara (~> 2.17) rubocop-capybara (~> 2.17)
rubocop-factory_bot (~> 2.22) rubocop-factory_bot (~> 2.22)
rubocop-rspec_rails (~> 2.28) rubocop-rspec_rails (~> 2.28)
rubocop-rspec_rails (2.28.2) rubocop-rspec_rails (2.28.3)
rubocop (~> 1.40) rubocop (~> 1.40)
ruby-prof (1.7.0) ruby-prof (1.7.0)
ruby-progressbar (1.13.0) ruby-progressbar (1.13.0)
ruby-saml (1.15.0) ruby-saml (1.16.0)
nokogiri (>= 1.13.10) nokogiri (>= 1.13.10)
rexml rexml
ruby2_keywords (0.0.5) ruby2_keywords (0.0.5)
@ -747,7 +744,7 @@ GEM
unicode-display_width (>= 1.1.1, < 3) unicode-display_width (>= 1.1.1, < 3)
terrapin (1.0.1) terrapin (1.0.1)
climate_control climate_control
test-prof (1.3.2) test-prof (1.3.3)
thor (1.3.1) thor (1.3.1)
tilt (2.3.0) tilt (2.3.0)
timeout (0.4.1) timeout (0.4.1)
@ -776,7 +773,7 @@ GEM
unf_ext unf_ext
unf_ext (0.0.9.1) unf_ext (0.0.9.1)
unicode-display_width (2.5.0) unicode-display_width (2.5.0)
uri (0.12.2) uri (0.13.0)
validate_email (0.1.6) validate_email (0.1.6)
activemodel (>= 3.0) activemodel (>= 3.0)
mail (>= 2.2.5) mail (>= 2.2.5)
@ -848,7 +845,7 @@ DEPENDENCIES
devise_pam_authenticatable2 (~> 9.2) devise_pam_authenticatable2 (~> 9.2)
discard (~> 1.2) discard (~> 1.2)
doorkeeper (~> 5.6) doorkeeper (~> 5.6)
dotenv-rails (~> 2.8) dotenv
ed25519 (~> 1.3) ed25519 (~> 1.3)
email_spec email_spec
fabrication (~> 2.30) fabrication (~> 2.30)

View File

@ -52,7 +52,7 @@ require_relative '../lib/active_record/batches'
require_relative '../lib/simple_navigation/item_extensions' require_relative '../lib/simple_navigation/item_extensions'
require_relative '../lib/http_extensions' require_relative '../lib/http_extensions'
Dotenv::Railtie.load Dotenv::Rails.load
Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true' Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true'

View File

@ -1,35 +0,0 @@
# frozen_string_literal: true
lock '3.17.2'
set :repo_url, ENV.fetch('REPO', 'https://github.com/mastodon/mastodon.git')
set :branch, ENV.fetch('BRANCH', 'main')
set :application, 'mastodon'
set :rbenv_type, :user
set :rbenv_ruby, File.read('.ruby-version').strip
set :migration_role, :app
append :linked_files, '.env.production', 'public/robots.txt'
append :linked_dirs, 'vendor/bundle', 'node_modules', 'public/system'
SYSTEMD_SERVICES = %i[sidekiq streaming web].freeze
SERVICE_ACTIONS = %i[reload restart status].freeze
namespace :systemd do
SYSTEMD_SERVICES.each do |service|
SERVICE_ACTIONS.each do |action|
desc "Perform a #{action} on #{service} service"
task :"#{service}:#{action}" do
on roles(:app) do
# runs e.g. "sudo restart mastodon-sidekiq.service"
sudo :systemctl, action, "#{fetch(:application)}-#{service}.service"
end
end
end
end
end
after 'deploy:publishing', 'systemd:web:reload'
after 'deploy:publishing', 'systemd:sidekiq:restart'
after 'deploy:publishing', 'systemd:streaming:restart'

View File

@ -1,6 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
require "active_support/core_ext/integer/time" require 'active_support/core_ext/integer/time'
Rails.application.configure do Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb. # Settings specified here will take precedence over those in config/application.rb.
@ -44,8 +44,8 @@ Rails.application.configure do
config.force_ssl = true config.force_ssl = true
config.ssl_options = { config.ssl_options = {
redirect: { redirect: {
exclude: ->(request) { request.path.start_with?('/health') || request.headers["Host"].end_with?('.onion') || request.headers["Host"].end_with?('.i2p') } exclude: ->(request) { request.path.start_with?('/health') || request.headers['Host'].end_with?('.onion') || request.headers['Host'].end_with?('.i2p') },
} },
} }
# Info include generic and useful information about system operation, but avoids logging too much # Info include generic and useful information about system operation, but avoids logging too much

View File

@ -88,7 +88,7 @@ if ENV['PAM_ENABLED'] == 'true'
usernames: Set['pam_user1', 'pam_user2'], usernames: Set['pam_user1', 'pam_user2'],
servicenames: Set['pam_test', 'pam_test_controlled'], servicenames: Set['pam_test', 'pam_test_controlled'],
password: '123456', password: '123456',
env: { email: 'pam@example.com' } env: { email: 'pam@example.com' },
} }
end end

View File

@ -7,4 +7,4 @@
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code
# by setting BACKTRACE=1 before calling your invocation, like "BACKTRACE=1 ./bin/rails runner 'MyClass.perform'". # by setting BACKTRACE=1 before calling your invocation, like "BACKTRACE=1 ./bin/rails runner 'MyClass.perform'".
Rails.backtrace_cleaner.remove_silencers! if ENV["BACKTRACE"] Rails.backtrace_cleaner.remove_silencers! if ENV['BACKTRACE']

View File

@ -150,7 +150,7 @@ Doorkeeper.configure do
# #
# You can use this option in order to forbid URI's with 'javascript' scheme # You can use this option in order to forbid URI's with 'javascript' scheme
# for example. # for example.
forbid_redirect_uri { |uri| %w[data vbscript javascript].include?(uri.scheme.to_s.downcase) } forbid_redirect_uri { |uri| %w(data vbscript javascript).include?(uri.scheme.to_s.downcase) }
# Specify what grant flows are enabled in array of Strings. The valid # Specify what grant flows are enabled in array of Strings. The valid
# strings and the flows they enable are: # strings and the flows they enable are:

View File

@ -7,7 +7,7 @@ Rails.application.configure do
proxy = URI.parse(ENV['http_proxy']) proxy = URI.parse(ENV['http_proxy'])
raise "Unsupported proxy type: #{proxy.scheme}" unless %w(http https).include? proxy.scheme raise "Unsupported proxy type: #{proxy.scheme}" unless %w(http https).include? proxy.scheme
raise "No proxy host" unless proxy.host raise 'No proxy host' unless proxy.host
host = proxy.host host = proxy.host
host = host[1...-1] if host[0] == '[' # for IPv6 address host = host[1...-1] if host[0] == '[' # for IPv6 address
@ -24,7 +24,7 @@ Rails.application.configure do
proxy = URI.parse(ENV['http_hidden_proxy']) proxy = URI.parse(ENV['http_hidden_proxy'])
raise "Unsupported proxy type: #{proxy.scheme}" unless %w(http https).include? proxy.scheme raise "Unsupported proxy type: #{proxy.scheme}" unless %w(http https).include? proxy.scheme
raise "No proxy host" unless proxy.host raise 'No proxy host' unless proxy.host
host = proxy.host host = proxy.host
host = host[1...-1] if host[0] == '[' # for IPv6 address host = host[1...-1] if host[0] == '[' # for IPv6 address

View File

@ -73,7 +73,7 @@ if ENV['S3_ENABLED'] == 'true'
if ENV.has_key?('S3_ENDPOINT') if ENV.has_key?('S3_ENDPOINT')
Paperclip::Attachment.default_options[:s3_options].merge!( Paperclip::Attachment.default_options[:s3_options].merge!(
endpoint: ENV['S3_ENDPOINT'], endpoint: ENV['S3_ENDPOINT'],
force_path_style: ENV['S3_OVERRIDE_PATH_STYLE'] != 'true', force_path_style: ENV['S3_OVERRIDE_PATH_STYLE'] != 'true'
) )
Paperclip::Attachment.default_options[:url] = ':s3_path_url' Paperclip::Attachment.default_options[:url] = ':s3_path_url'
@ -159,7 +159,7 @@ else
Paperclip::Attachment.default_options.merge!( Paperclip::Attachment.default_options.merge!(
storage: :filesystem, storage: :filesystem,
path: File.join(ENV.fetch('PAPERCLIP_ROOT_PATH', File.join(':rails_root', 'public', 'system')), ':prefix_path:class', ':attachment', ':id_partition', ':style', ':filename'), path: File.join(ENV.fetch('PAPERCLIP_ROOT_PATH', File.join(':rails_root', 'public', 'system')), ':prefix_path:class', ':attachment', ':id_partition', ':style', ':filename'),
url: ENV.fetch('PAPERCLIP_ROOT_URL', '/system') + '/:prefix_url:class/:attachment/:id_partition/:style/:filename', url: ENV.fetch('PAPERCLIP_ROOT_URL', '/system') + '/:prefix_url:class/:attachment/:id_partition/:style/:filename'
) )
end end

View File

@ -14,7 +14,7 @@ class Rack::Attack
end end
def remote_ip def remote_ip
@remote_ip ||= (@env["action_dispatch.remote_ip"] || ip).to_s @remote_ip ||= (@env['action_dispatch.remote_ip'] || ip).to_s
end end
def throttleable_remote_ip def throttleable_remote_ip

View File

@ -6,7 +6,7 @@ WebAuthn.configure do |config|
config.origin = "#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}" config.origin = "#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}"
# Relying Party name for display purposes # Relying Party name for display purposes
config.rp_name = "Mastodon" config.rp_name = 'Mastodon'
# Optionally configure a client timeout hint, in milliseconds. # Optionally configure a client timeout hint, in milliseconds.
# This hint specifies how long the browser should wait for an # This hint specifies how long the browser should wait for an

View File

@ -140,7 +140,7 @@ Rails.application.routes.draw do
resource :inbox, only: [:create], module: :activitypub resource :inbox, only: [:create], module: :activitypub
get '/:encoded_at(*path)', to: redirect("/@%{path}"), constraints: { encoded_at: /%40/ } get '/:encoded_at(*path)', to: redirect('/@%{path}'), constraints: { encoded_at: /%40/ }
constraints(username: %r{[^@/.]+}) do constraints(username: %r{[^@/.]+}) do
with_options to: 'accounts#show' do with_options to: 'accounts#show' do

View File

@ -0,0 +1,49 @@
# frozen_string_literal: true
class AddIndexToWebauthnCredentialsUserIdNickname < ActiveRecord::Migration[7.0]
disable_ddl_transaction!
def up
add_index_to_table
rescue ActiveRecord::RecordNotUnique
remove_duplicates_and_reindex
end
def down
remove_index_from_table
end
private
def remove_duplicates_and_reindex
deduplicate_records
reindex_records
rescue ActiveRecord::RecordNotUnique
retry
end
def reindex_records
remove_index_from_table
add_index_to_table
end
def add_index_to_table
add_index :webauthn_credentials, [:user_id, :nickname], unique: true, algorithm: :concurrently
end
def remove_index_from_table
remove_index :webauthn_credentials, [:user_id, :nickname]
end
def deduplicate_records
safety_assured do
execute <<~SQL.squish
DELETE FROM webauthn_credentials
WHERE id NOT IN (
SELECT DISTINCT ON(user_id, nickname) id FROM webauthn_credentials
ORDER BY user_id, nickname, id ASC
)
SQL
end
end
end

View File

@ -0,0 +1,49 @@
# frozen_string_literal: true
class AddIndexToAccountAliasUriAccountId < ActiveRecord::Migration[7.0]
disable_ddl_transaction!
def up
add_index_to_table
rescue ActiveRecord::RecordNotUnique
remove_duplicates_and_reindex
end
def down
remove_index_from_table
end
private
def remove_duplicates_and_reindex
deduplicate_records
reindex_records
rescue ActiveRecord::RecordNotUnique
retry
end
def reindex_records
remove_index_from_table
add_index_to_table
end
def add_index_to_table
add_index :account_aliases, [:account_id, :uri], unique: true, algorithm: :concurrently
end
def remove_index_from_table
remove_index :account_aliases, [:account_id, :uri]
end
def deduplicate_records
safety_assured do
execute <<~SQL.squish
DELETE FROM account_aliases
WHERE id NOT IN (
SELECT DISTINCT ON(account_id, uri) id FROM account_aliases
ORDER BY account_id, uri, id ASC
)
SQL
end
end
end

View File

@ -0,0 +1,49 @@
# frozen_string_literal: true
class AddIndexToCustomFilterStatusesStatusCustomFilter < ActiveRecord::Migration[7.0]
disable_ddl_transaction!
def up
add_index_to_table
rescue ActiveRecord::RecordNotUnique
remove_duplicates_and_reindex
end
def down
remove_index_from_table
end
private
def remove_duplicates_and_reindex
deduplicate_records
reindex_records
rescue ActiveRecord::RecordNotUnique
retry
end
def reindex_records
remove_index_from_table
add_index_to_table
end
def add_index_to_table
add_index :custom_filter_statuses, [:status_id, :custom_filter_id], unique: true, algorithm: :concurrently
end
def remove_index_from_table
remove_index :custom_filter_statuses, [:status_id, :custom_filter_id]
end
def deduplicate_records
safety_assured do
execute <<~SQL.squish
DELETE FROM custom_filter_statuses
WHERE id NOT IN (
SELECT DISTINCT ON(status_id, custom_filter_id) id FROM custom_filter_statuses
ORDER BY status_id, custom_filter_id, id ASC
)
SQL
end
end
end

View File

@ -0,0 +1,49 @@
# frozen_string_literal: true
class AddIndexToIdentitiesUidProvider < ActiveRecord::Migration[7.0]
disable_ddl_transaction!
def up
add_index_to_table
rescue ActiveRecord::RecordNotUnique
remove_duplicates_and_reindex
end
def down
remove_index_from_table
end
private
def remove_duplicates_and_reindex
deduplicate_records
reindex_records
rescue ActiveRecord::RecordNotUnique
retry
end
def reindex_records
remove_index_from_table
add_index_to_table
end
def add_index_to_table
add_index :identities, [:uid, :provider], unique: true, algorithm: :concurrently
end
def remove_index_from_table
remove_index :identities, [:uid, :provider]
end
def deduplicate_records
safety_assured do
execute <<~SQL.squish
DELETE FROM identities
WHERE id NOT IN (
SELECT DISTINCT ON(uid, provider) id FROM identities
ORDER BY uid, provider, id ASC
)
SQL
end
end
end

View File

@ -20,6 +20,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do
t.string "uri", default: "", null: false t.string "uri", default: "", null: false
t.datetime "created_at", precision: nil, null: false t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false
t.index ["account_id", "uri"], name: "index_account_aliases_on_account_id_and_uri", unique: true
t.index ["account_id"], name: "index_account_aliases_on_account_id" t.index ["account_id"], name: "index_account_aliases_on_account_id"
end end
@ -395,6 +396,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.index ["custom_filter_id"], name: "index_custom_filter_statuses_on_custom_filter_id" t.index ["custom_filter_id"], name: "index_custom_filter_statuses_on_custom_filter_id"
t.index ["status_id", "custom_filter_id"], name: "index_custom_filter_statuses_on_status_id_and_custom_filter_id", unique: true
t.index ["status_id"], name: "index_custom_filter_statuses_on_status_id" t.index ["status_id"], name: "index_custom_filter_statuses_on_status_id"
end end
@ -545,6 +547,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do
t.datetime "created_at", precision: nil, null: false t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false
t.bigint "user_id" t.bigint "user_id"
t.index ["uid", "provider"], name: "index_identities_on_uid_and_provider", unique: true
t.index ["user_id"], name: "index_identities_on_user_id" t.index ["user_id"], name: "index_identities_on_user_id"
end end
@ -1238,6 +1241,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do
t.datetime "created_at", precision: nil, null: false t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false
t.index ["external_id"], name: "index_webauthn_credentials_on_external_id", unique: true t.index ["external_id"], name: "index_webauthn_credentials_on_external_id", unique: true
t.index ["user_id", "nickname"], name: "index_webauthn_credentials_on_user_id_and_nickname", unique: true
t.index ["user_id"], name: "index_webauthn_credentials_on_user_id" t.index ["user_id"], name: "index_webauthn_credentials_on_user_id"
end end

View File

@ -8,6 +8,7 @@ namespace :tests do
'2' => 2017_10_10_025614, '2' => 2017_10_10_025614,
'2_4' => 2018_05_14_140000, '2_4' => 2018_05_14_140000,
'2_4_3' => 2018_07_07_154237, '2_4_3' => 2018_07_07_154237,
'3_3_0' => 2020_12_18_054746,
}.each do |release, version| }.each do |release, version|
ActiveRecord::Tasks::DatabaseTasks ActiveRecord::Tasks::DatabaseTasks
.migration_connection .migration_connection
@ -111,9 +112,41 @@ namespace :tests do
exit(1) exit(1)
end end
unless Identity.where(provider: 'foo', uid: 0).count == 1
puts 'Identities not deduplicated as expected'
exit(1)
end
unless WebauthnCredential.where(user_id: 1, nickname: 'foo').count == 1
puts 'Webauthn credentials not deduplicated as expected'
exit(1)
end
unless AccountAlias.where(account_id: 1, uri: 'https://example.com/users/foobar').count == 1
puts 'Account aliases not deduplicated as expected'
exit(1)
end
puts 'No errors found. Database state is consistent with a successful migration process.' puts 'No errors found. Database state is consistent with a successful migration process.'
end end
desc 'Populate the database with test data for 3.3.0'
task populate_v3_3_0: :environment do # rubocop:disable Naming/VariableNumber
ActiveRecord::Base.connection.execute(<<~SQL.squish)
INSERT INTO "webauthn_credentials"
(user_id, nickname, external_id, public_key, created_at, updated_at)
VALUES
(1, 'foo', 1, 'foo', now(), now()),
(1, 'foo', 2, 'bar', now(), now());
INSERT INTO "account_aliases"
(account_id, uri, acct, created_at, updated_at)
VALUES
(1, 'https://example.com/users/foobar', 'foobar@example.com', now(), now()),
(1, 'https://example.com/users/foobar', 'foobar@example.com', now(), now());
SQL
end
desc 'Populate the database with test data for 2.4.3' desc 'Populate the database with test data for 2.4.3'
task populate_v2_4_3: :environment do # rubocop:disable Naming/VariableNumber task populate_v2_4_3: :environment do # rubocop:disable Naming/VariableNumber
user_key = OpenSSL::PKey::RSA.new(2048) user_key = OpenSSL::PKey::RSA.new(2048)
@ -189,6 +222,12 @@ namespace :tests do
VALUES VALUES
(5, 'User', 4, 'default_language', E'--- kmr\n', now(), now()), (5, 'User', 4, 'default_language', E'--- kmr\n', now(), now()),
(6, 'User', 1, 'interactions', E'--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nmust_be_follower: false\nmust_be_following: true\nmust_be_following_dm: false\n', now(), now()); (6, 'User', 1, 'interactions', E'--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nmust_be_follower: false\nmust_be_following: true\nmust_be_following_dm: false\n', now(), now());
INSERT INTO "identities"
(provider, uid, user_id, created_at, updated_at)
VALUES
('foo', 0, 1, now(), now()),
('foo', 0, 1, now(), now());
SQL SQL
end end

View File

@ -29,7 +29,7 @@ RSpec.describe RemoveFeaturedTagService do
expect { featured_tag.reload } expect { featured_tag.reload }
.to raise_error(ActiveRecord::RecordNotFound) .to raise_error(ActiveRecord::RecordNotFound)
expect(ActivityPub::AccountRawDistributionWorker) expect(ActivityPub::AccountRawDistributionWorker)
.to_not have_enqueued_sidekiq_job .to_not have_enqueued_sidekiq_job(any_args)
end end
end end
end end

View File

@ -40,7 +40,7 @@ RSpec.describe UpdateStatusService do
end end
it 'saves edit history' do it 'saves edit history' do
expect(status.edits.pluck(:text)).to eq %w(Foo Bar) expect(status.edits.ordered.pluck(:text)).to eq %w(Foo Bar)
end end
end end
@ -58,7 +58,7 @@ RSpec.describe UpdateStatusService do
end end
it 'saves edit history' do it 'saves edit history' do
expect(status.edits.pluck(:text, :spoiler_text)).to eq [['Foo', ''], ['Foo', 'Bar']] expect(status.edits.ordered.pluck(:text, :spoiler_text)).to eq [['Foo', ''], ['Foo', 'Bar']]
end end
end end
@ -85,7 +85,7 @@ RSpec.describe UpdateStatusService do
end end
it 'saves edit history' do it 'saves edit history' do
expect(status.edits.pluck(:ordered_media_attachment_ids)).to eq [[detached_media_attachment.id], [attached_media_attachment.id]] expect(status.edits.ordered.pluck(:ordered_media_attachment_ids)).to eq [[detached_media_attachment.id], [attached_media_attachment.id]]
end end
end end
@ -107,7 +107,7 @@ RSpec.describe UpdateStatusService do
end end
it 'saves edit history' do it 'saves edit history' do
expect(status.edits.map { |edit| edit.ordered_media_attachments.map(&:description) }).to eq [['Old description'], ['New description']] expect(status.edits.ordered.map { |edit| edit.ordered_media_attachments.map(&:description) }).to eq [['Old description'], ['New description']]
end end
end end
@ -136,7 +136,7 @@ RSpec.describe UpdateStatusService do
end end
it 'saves edit history' do it 'saves edit history' do
expect(status.edits.pluck(:poll_options)).to eq [%w(Foo Bar), %w(Bar Baz Foo)] expect(status.edits.ordered.pluck(:poll_options)).to eq [%w(Foo Bar), %w(Bar Baz Foo)]
end end
it 'requeues expiration notification' do it 'requeues expiration notification' do

329
yarn.lock
View File

@ -1561,10 +1561,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/color-helpers@npm:^4.1.0": "@csstools/color-helpers@npm:^4.2.0":
version: 4.1.0 version: 4.2.0
resolution: "@csstools/color-helpers@npm:4.1.0" resolution: "@csstools/color-helpers@npm:4.2.0"
checksum: 10c0/0e41fd04dd28361717b161e7000c3a3b64b8b01119e93758297ea0b8a87c04121c3e3ef02e29c56fdd133227dd879163aa4b52e2370853d9fe64af6b6821668d checksum: 10c0/3f1feac43c2ef35f38b3b06fe74e0acc130283d7efb6874f6624e45e178c1a7b3c7e39816c7421cddbffc2666430906aa6f0d3dd7c7209db1369c0afd4a29b1b
languageName: node languageName: node
linkType: hard linkType: hard
@ -1578,16 +1578,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/css-color-parser@npm:^1.6.3": "@csstools/css-color-parser@npm:^2.0.0":
version: 1.6.3 version: 2.0.0
resolution: "@csstools/css-color-parser@npm:1.6.3" resolution: "@csstools/css-color-parser@npm:2.0.0"
dependencies: dependencies:
"@csstools/color-helpers": "npm:^4.1.0" "@csstools/color-helpers": "npm:^4.2.0"
"@csstools/css-calc": "npm:^1.2.0" "@csstools/css-calc": "npm:^1.2.0"
peerDependencies: peerDependencies:
"@csstools/css-parser-algorithms": ^2.6.1 "@csstools/css-parser-algorithms": ^2.6.1
"@csstools/css-tokenizer": ^2.2.4 "@csstools/css-tokenizer": ^2.2.4
checksum: 10c0/3b15d9974105fe6e5d5e839953ee06153bc308bd62feacdeb88b7da7486ef1625254d0df908c68654596e477ca6be0c312d0c02a62d6dc4bddee61821be17d27 checksum: 10c0/295f844a194dec4f51439e8760dbb4a142901b8b60cd9d676a62c15c0e8408eb7bcdcbb40be52cdd5f67d020e655a1c3267a28923cfc4f6bae2b74aa48fce426
languageName: node languageName: node
linkType: hard linkType: hard
@ -1629,33 +1629,33 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/postcss-color-function@npm:^3.0.13": "@csstools/postcss-color-function@npm:^3.0.14":
version: 3.0.13 version: 3.0.14
resolution: "@csstools/postcss-color-function@npm:3.0.13" resolution: "@csstools/postcss-color-function@npm:3.0.14"
dependencies: dependencies:
"@csstools/css-color-parser": "npm:^1.6.3" "@csstools/css-color-parser": "npm:^2.0.0"
"@csstools/css-parser-algorithms": "npm:^2.6.1" "@csstools/css-parser-algorithms": "npm:^2.6.1"
"@csstools/css-tokenizer": "npm:^2.2.4" "@csstools/css-tokenizer": "npm:^2.2.4"
"@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
"@csstools/utilities": "npm:^1.0.0" "@csstools/utilities": "npm:^1.0.0"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/9d0fa25cd258653ad3227ccf1ee89dfee7099284c28b1d9ae7f7e8b15ed526e4e8cc7724f8e21cc073ed186891c3acb5b9c190a75e3c38d9c75e49197a824db6 checksum: 10c0/81592b0eb3ad7022313ecafd028908b167de42acc6765f708c9b10631f86123c2b803aca27378f021c2b3dab8cc47770c0364fe5a3c1e18ec006deaf72e17c38
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/postcss-color-mix-function@npm:^2.0.13": "@csstools/postcss-color-mix-function@npm:^2.0.14":
version: 2.0.13 version: 2.0.14
resolution: "@csstools/postcss-color-mix-function@npm:2.0.13" resolution: "@csstools/postcss-color-mix-function@npm:2.0.14"
dependencies: dependencies:
"@csstools/css-color-parser": "npm:^1.6.3" "@csstools/css-color-parser": "npm:^2.0.0"
"@csstools/css-parser-algorithms": "npm:^2.6.1" "@csstools/css-parser-algorithms": "npm:^2.6.1"
"@csstools/css-tokenizer": "npm:^2.2.4" "@csstools/css-tokenizer": "npm:^2.2.4"
"@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
"@csstools/utilities": "npm:^1.0.0" "@csstools/utilities": "npm:^1.0.0"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/6011ce0b328cd3ee1d5720dc6eb23da807ba5a218a4a3c65a4844a82c0ff37e69d27cbee14abf9b928a3068f429ab86f2dd2bebab4ab64cd8fc7e39e562d7073 checksum: 10c0/1dd3c63bbbbb9d3094699f169bbb9d26e86a49accb5f9abaa2441b54cb8a6f4cd332409666684a275eca867e3ef0ea3f6eafdf9fb87f2cbfa17c6296fb1ed4d7
languageName: node languageName: node
linkType: hard linkType: hard
@ -1684,46 +1684,46 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/postcss-gamut-mapping@npm:^1.0.6": "@csstools/postcss-gamut-mapping@npm:^1.0.7":
version: 1.0.6 version: 1.0.7
resolution: "@csstools/postcss-gamut-mapping@npm:1.0.6" resolution: "@csstools/postcss-gamut-mapping@npm:1.0.7"
dependencies: dependencies:
"@csstools/css-color-parser": "npm:^1.6.3" "@csstools/css-color-parser": "npm:^2.0.0"
"@csstools/css-parser-algorithms": "npm:^2.6.1" "@csstools/css-parser-algorithms": "npm:^2.6.1"
"@csstools/css-tokenizer": "npm:^2.2.4" "@csstools/css-tokenizer": "npm:^2.2.4"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/a258a2ceac9d9be4374ec5b504895bd1de1196fe7d8c1377863a25c6cb50ee1fb1c65387c5440bae3c5d59e6ebf4e0c1990595c5cd09291224b31a1d23bdc250 checksum: 10c0/7b349db44fcd697d57172ab63b7a02a56c0b49bce17e48cb72aa0fa246bd2be83fe693c507fd400a9ed83597a711d18ece9319ee3af8000c8fd3a2761e228a11
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/postcss-gradients-interpolation-method@npm:^4.0.14": "@csstools/postcss-gradients-interpolation-method@npm:^4.0.15":
version: 4.0.14 version: 4.0.15
resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.14" resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.15"
dependencies: dependencies:
"@csstools/css-color-parser": "npm:^1.6.3" "@csstools/css-color-parser": "npm:^2.0.0"
"@csstools/css-parser-algorithms": "npm:^2.6.1" "@csstools/css-parser-algorithms": "npm:^2.6.1"
"@csstools/css-tokenizer": "npm:^2.2.4" "@csstools/css-tokenizer": "npm:^2.2.4"
"@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
"@csstools/utilities": "npm:^1.0.0" "@csstools/utilities": "npm:^1.0.0"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/88147b2d7067b9bc6c90340c0be8450ca1175a7e927ff7b682c26d377237bec12f1cbe0dd930dd72dec661603348d1e71ca2a56f0a3b6fa2ca7d3f1b962f001d checksum: 10c0/dc0bbf6a4787d5ad3f9fe268dfa9776ecdc25b6cc0a49486bf53238341a339647f1e475240ead3cec1f4af9a237f6518ace015103e90ce8afe4d44539a566e04
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/postcss-hwb-function@npm:^3.0.12": "@csstools/postcss-hwb-function@npm:^3.0.13":
version: 3.0.12 version: 3.0.13
resolution: "@csstools/postcss-hwb-function@npm:3.0.12" resolution: "@csstools/postcss-hwb-function@npm:3.0.13"
dependencies: dependencies:
"@csstools/css-color-parser": "npm:^1.6.3" "@csstools/css-color-parser": "npm:^2.0.0"
"@csstools/css-parser-algorithms": "npm:^2.6.1" "@csstools/css-parser-algorithms": "npm:^2.6.1"
"@csstools/css-tokenizer": "npm:^2.2.4" "@csstools/css-tokenizer": "npm:^2.2.4"
"@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
"@csstools/utilities": "npm:^1.0.0" "@csstools/utilities": "npm:^1.0.0"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/20e0b2a4547fe619f38fe56c33974750d4a8b64a67a4169740ee0e67a9dec9f3a243f2370408901aacc35690aa36135028fafbbc866ff934b66cc4c9e4e89cac checksum: 10c0/684c3d408ceb027e7276c4f25c9a17ef9bd52f0948268cf58b5184097e9b71f5364a41b42bab44691938c6fadffcba0c8e66f809a339a8b282f4a432d32d00ef
languageName: node languageName: node
linkType: hard linkType: hard
@ -1875,18 +1875,18 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/postcss-oklab-function@npm:^3.0.13": "@csstools/postcss-oklab-function@npm:^3.0.14":
version: 3.0.13 version: 3.0.14
resolution: "@csstools/postcss-oklab-function@npm:3.0.13" resolution: "@csstools/postcss-oklab-function@npm:3.0.14"
dependencies: dependencies:
"@csstools/css-color-parser": "npm:^1.6.3" "@csstools/css-color-parser": "npm:^2.0.0"
"@csstools/css-parser-algorithms": "npm:^2.6.1" "@csstools/css-parser-algorithms": "npm:^2.6.1"
"@csstools/css-tokenizer": "npm:^2.2.4" "@csstools/css-tokenizer": "npm:^2.2.4"
"@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
"@csstools/utilities": "npm:^1.0.0" "@csstools/utilities": "npm:^1.0.0"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/26915f65ccc8b631a08542c4b088f9e5155f95a6c1f3a6bd2a33207f96d33438b930de60f493a5bbfee1b9f2abc8dfcab3ecbf20b5c7445d729fc434234fb046 checksum: 10c0/dfe0b12c2256dded995c64825fac9507be9c747d776cfa09eeefff6dee0efa5eed6a92a1ecba39069a751a7fc3cefa8891c34209a7a3c7ea33d356c95d01a02d
languageName: node languageName: node
linkType: hard linkType: hard
@ -1901,18 +1901,18 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/postcss-relative-color-syntax@npm:^2.0.13": "@csstools/postcss-relative-color-syntax@npm:^2.0.14":
version: 2.0.13 version: 2.0.14
resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.13" resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.14"
dependencies: dependencies:
"@csstools/css-color-parser": "npm:^1.6.3" "@csstools/css-color-parser": "npm:^2.0.0"
"@csstools/css-parser-algorithms": "npm:^2.6.1" "@csstools/css-parser-algorithms": "npm:^2.6.1"
"@csstools/css-tokenizer": "npm:^2.2.4" "@csstools/css-tokenizer": "npm:^2.2.4"
"@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
"@csstools/utilities": "npm:^1.0.0" "@csstools/utilities": "npm:^1.0.0"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/5c9fdec029e3d9a5c688d2e04995fec0cf6d91b48dbc5f450cf9c9dbb45e2819afbd63b3279676087a13f54914b0ec7d005e478b70b43e94fc8eeef9c5973390 checksum: 10c0/64cd5f8054e4403f4e25ed11a5b9d157098af639dbc30ac25b94660b3af489c0bacc49fc439cba1ccceefa4caa5831a913e3d1d889a9796cc6fbf3902c7c31c1
languageName: node languageName: node
linkType: hard linkType: hard
@ -1940,15 +1940,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/postcss-text-decoration-shorthand@npm:^3.0.5": "@csstools/postcss-text-decoration-shorthand@npm:^3.0.6":
version: 3.0.5 version: 3.0.6
resolution: "@csstools/postcss-text-decoration-shorthand@npm:3.0.5" resolution: "@csstools/postcss-text-decoration-shorthand@npm:3.0.6"
dependencies: dependencies:
"@csstools/color-helpers": "npm:^4.1.0" "@csstools/color-helpers": "npm:^4.2.0"
postcss-value-parser: "npm:^4.2.0" postcss-value-parser: "npm:^4.2.0"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/e7e08c643c7084e60c0b22982e00ce21c579af3810ebbebac6838801b2ac622026ce96fd0cbca785613b1559f2337833cfc0f525685f8543ee39078a32fd7f89 checksum: 10c0/5abdc4fad1c3f15e9d47c7af3995dec9cdf4e6f87c5857eb2e149764779b8389f4f4b21d11e6f2509c57c554a0dc5c11f68f212acd04bbc47defa15911ac3eb9
languageName: node languageName: node
linkType: hard linkType: hard
@ -2154,7 +2154,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": "@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1":
version: 4.10.0 version: 4.10.0
resolution: "@eslint-community/regexpp@npm:4.10.0" resolution: "@eslint-community/regexpp@npm:4.10.0"
checksum: 10c0/c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4 checksum: 10c0/c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4
@ -3622,10 +3622,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8": "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8":
version: 7.0.14 version: 7.0.15
resolution: "@types/json-schema@npm:7.0.14" resolution: "@types/json-schema@npm:7.0.15"
checksum: 10c0/da68689ccd44cb93ca4c9a4af3b25c6091ecf45fb370d1ed0d0ac5b780e235bf0b9bdc1f7e28f19e6713b22567c3db11fefcbcc6d48ac6b356d035a8f9f4ea30 checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db
languageName: node languageName: node
linkType: hard linkType: hard
@ -3865,12 +3865,12 @@ __metadata:
linkType: hard linkType: hard
"@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": "@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7":
version: 18.2.78 version: 18.2.79
resolution: "@types/react@npm:18.2.78" resolution: "@types/react@npm:18.2.79"
dependencies: dependencies:
"@types/prop-types": "npm:*" "@types/prop-types": "npm:*"
csstype: "npm:^3.0.2" csstype: "npm:^3.0.2"
checksum: 10c0/5eb8e1dd98c29aeddf40b90f466d1a9ce83b113d42a096633d632b834e7ae9821f24ba7999928de9d98cca37764532a7ea35355a8103a377d8baa750f1841b5c checksum: 10c0/c8a8a005d8830a48cc1ef93c3510c4935a2a03e5557dbecaa8f1038450cbfcb18eb206fa7fba7077d54b8da21faeb25577e897a333392770a7797f625b62c78a
languageName: node languageName: node
linkType: hard linkType: hard
@ -3900,10 +3900,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/semver@npm:^7.5.0": "@types/semver@npm:^7.5.0, @types/semver@npm:^7.5.8":
version: 7.5.4 version: 7.5.8
resolution: "@types/semver@npm:7.5.4" resolution: "@types/semver@npm:7.5.8"
checksum: 10c0/dee66a71d9f089c118be74b5937d4fef42864d68d9472a3f4f5399b9e3ad74d56a8e155020c846667b9ecf9de78fdb9ea55a53fff5067af28e06779b282b6c40 checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa
languageName: node languageName: node
linkType: hard linkType: hard
@ -4044,45 +4044,45 @@ __metadata:
linkType: hard linkType: hard
"@typescript-eslint/eslint-plugin@npm:^7.0.0": "@typescript-eslint/eslint-plugin@npm:^7.0.0":
version: 7.5.0 version: 7.7.0
resolution: "@typescript-eslint/eslint-plugin@npm:7.5.0" resolution: "@typescript-eslint/eslint-plugin@npm:7.7.0"
dependencies: dependencies:
"@eslint-community/regexpp": "npm:^4.5.1" "@eslint-community/regexpp": "npm:^4.10.0"
"@typescript-eslint/scope-manager": "npm:7.5.0" "@typescript-eslint/scope-manager": "npm:7.7.0"
"@typescript-eslint/type-utils": "npm:7.5.0" "@typescript-eslint/type-utils": "npm:7.7.0"
"@typescript-eslint/utils": "npm:7.5.0" "@typescript-eslint/utils": "npm:7.7.0"
"@typescript-eslint/visitor-keys": "npm:7.5.0" "@typescript-eslint/visitor-keys": "npm:7.7.0"
debug: "npm:^4.3.4" debug: "npm:^4.3.4"
graphemer: "npm:^1.4.0" graphemer: "npm:^1.4.0"
ignore: "npm:^5.2.4" ignore: "npm:^5.3.1"
natural-compare: "npm:^1.4.0" natural-compare: "npm:^1.4.0"
semver: "npm:^7.5.4" semver: "npm:^7.6.0"
ts-api-utils: "npm:^1.0.1" ts-api-utils: "npm:^1.3.0"
peerDependencies: peerDependencies:
"@typescript-eslint/parser": ^7.0.0 "@typescript-eslint/parser": ^7.0.0
eslint: ^8.56.0 eslint: ^8.56.0
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
checksum: 10c0/932a7b5a09c0138ef5a0bf00f8e6039fa209d4047092ffc187de048543c21f7ce24dc14f25f4c87b6f3bbb62335fc952e259e271fde88baf793217bde6460cfa checksum: 10c0/d1f4c40523d284bce4b8272750c68aae5c0289ddb1c9267dd3477e0bfb8c8855bfb0c6e86dfec9911ca8302ef729d5f4e47d686a566f363b0f89bf7dc7670b5c
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/parser@npm:^7.0.0": "@typescript-eslint/parser@npm:^7.0.0":
version: 7.5.0 version: 7.7.0
resolution: "@typescript-eslint/parser@npm:7.5.0" resolution: "@typescript-eslint/parser@npm:7.7.0"
dependencies: dependencies:
"@typescript-eslint/scope-manager": "npm:7.5.0" "@typescript-eslint/scope-manager": "npm:7.7.0"
"@typescript-eslint/types": "npm:7.5.0" "@typescript-eslint/types": "npm:7.7.0"
"@typescript-eslint/typescript-estree": "npm:7.5.0" "@typescript-eslint/typescript-estree": "npm:7.7.0"
"@typescript-eslint/visitor-keys": "npm:7.5.0" "@typescript-eslint/visitor-keys": "npm:7.7.0"
debug: "npm:^4.3.4" debug: "npm:^4.3.4"
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
checksum: 10c0/65521202ff024e79594272fbb7e4731ecf9d2fdd2f58fc81450bfd2bca94ce9c17b0eadd7338c01701f5cf16d38b6c025ed3fc322380b1e4b5424b7484098cda checksum: 10c0/d756c2292737499a93913647af7493aded5dc720a5f4ab6f8e96d6cc81f19cf6a1769a1df0f516f8facd276d34f8464f1711e57b0216082e32eb6b75da81b12e
languageName: node languageName: node
linkType: hard linkType: hard
@ -4096,30 +4096,30 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/scope-manager@npm:7.5.0": "@typescript-eslint/scope-manager@npm:7.7.0":
version: 7.5.0 version: 7.7.0
resolution: "@typescript-eslint/scope-manager@npm:7.5.0" resolution: "@typescript-eslint/scope-manager@npm:7.7.0"
dependencies: dependencies:
"@typescript-eslint/types": "npm:7.5.0" "@typescript-eslint/types": "npm:7.7.0"
"@typescript-eslint/visitor-keys": "npm:7.5.0" "@typescript-eslint/visitor-keys": "npm:7.7.0"
checksum: 10c0/a017b151a6b39ef591f8e2e65598e005e1b4b2d5494e4b91bddb5856b3a4d57dd8a58d2bc7a140e627eb574f93a2c8fe55f1307aa264c928ffd31d9e190bc5dd checksum: 10c0/014a3631c12bfbd5e33146a48e4b9eb5cc1c5c95bb458de33f8847eed33c04d7b9e66283971e48297673c4b92c3239d67e6dc3717efbe5836e0269a538c13d2e
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/type-utils@npm:7.5.0": "@typescript-eslint/type-utils@npm:7.7.0":
version: 7.5.0 version: 7.7.0
resolution: "@typescript-eslint/type-utils@npm:7.5.0" resolution: "@typescript-eslint/type-utils@npm:7.7.0"
dependencies: dependencies:
"@typescript-eslint/typescript-estree": "npm:7.5.0" "@typescript-eslint/typescript-estree": "npm:7.7.0"
"@typescript-eslint/utils": "npm:7.5.0" "@typescript-eslint/utils": "npm:7.7.0"
debug: "npm:^4.3.4" debug: "npm:^4.3.4"
ts-api-utils: "npm:^1.0.1" ts-api-utils: "npm:^1.3.0"
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
checksum: 10c0/12915d4d1872638f5281e222a0d191676c478f250699c84864862e95a59e708222acefbf7ffdafc0872a007261219a3a2b1e667ff45eeafea7c4bcc5b955262c checksum: 10c0/064c28d4087a97fd175e07e02c0a9cf4526f61cc6a17b4199fba626932979210037643a30f868bda8174fad567a8ac6aed34120631d1ecfd502e0ea1e830f9e9
languageName: node languageName: node
linkType: hard linkType: hard
@ -4130,10 +4130,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/types@npm:7.5.0": "@typescript-eslint/types@npm:7.7.0":
version: 7.5.0 version: 7.7.0
resolution: "@typescript-eslint/types@npm:7.5.0" resolution: "@typescript-eslint/types@npm:7.7.0"
checksum: 10c0/f3394f71f422dbd89f63b230f20e9769c12e47a287ff30ca03a80714e57ea21279b6f12a8ab14bafb00b59926f20a88894b2d1e72679f7ff298bae112679d4b3 checksum: 10c0/eb50793650c9a911c73586150807912e7b7a0ae12eeb26c7a322ac8ebb8edef15960cc9a4b7049dbb89b82500079963145f67d15583f5de270fe8290974db533
languageName: node languageName: node
linkType: hard linkType: hard
@ -4156,39 +4156,39 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/typescript-estree@npm:7.5.0": "@typescript-eslint/typescript-estree@npm:7.7.0":
version: 7.5.0 version: 7.7.0
resolution: "@typescript-eslint/typescript-estree@npm:7.5.0" resolution: "@typescript-eslint/typescript-estree@npm:7.7.0"
dependencies: dependencies:
"@typescript-eslint/types": "npm:7.5.0" "@typescript-eslint/types": "npm:7.7.0"
"@typescript-eslint/visitor-keys": "npm:7.5.0" "@typescript-eslint/visitor-keys": "npm:7.7.0"
debug: "npm:^4.3.4" debug: "npm:^4.3.4"
globby: "npm:^11.1.0" globby: "npm:^11.1.0"
is-glob: "npm:^4.0.3" is-glob: "npm:^4.0.3"
minimatch: "npm:9.0.3" minimatch: "npm:^9.0.4"
semver: "npm:^7.5.4" semver: "npm:^7.6.0"
ts-api-utils: "npm:^1.0.1" ts-api-utils: "npm:^1.3.0"
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
checksum: 10c0/ea3a270c725d6be273188b86110e0393052cd64d1c54a56eb5ea405e6d3fbbe84fb3b1ce1b8496a4078ac1eefd37aedcf12be91876764f6de31d5aa5131c7bcd checksum: 10c0/19da9bf0948c9800fde19c5a408a80a3a4cf357ff67d47b516df5d2a05701a4fdd2b9ab5b692866bd84bfc17cea9132d1575a1423e01763a4c2918b5d77d0b34
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/utils@npm:7.5.0": "@typescript-eslint/utils@npm:7.7.0":
version: 7.5.0 version: 7.7.0
resolution: "@typescript-eslint/utils@npm:7.5.0" resolution: "@typescript-eslint/utils@npm:7.7.0"
dependencies: dependencies:
"@eslint-community/eslint-utils": "npm:^4.4.0" "@eslint-community/eslint-utils": "npm:^4.4.0"
"@types/json-schema": "npm:^7.0.12" "@types/json-schema": "npm:^7.0.15"
"@types/semver": "npm:^7.5.0" "@types/semver": "npm:^7.5.8"
"@typescript-eslint/scope-manager": "npm:7.5.0" "@typescript-eslint/scope-manager": "npm:7.7.0"
"@typescript-eslint/types": "npm:7.5.0" "@typescript-eslint/types": "npm:7.7.0"
"@typescript-eslint/typescript-estree": "npm:7.5.0" "@typescript-eslint/typescript-estree": "npm:7.7.0"
semver: "npm:^7.5.4" semver: "npm:^7.6.0"
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
checksum: 10c0/c815ed6909769648953d6963c069038f7cac0c979051b25718feb30e0d3337b9647b75b8de00ac03fe960f0cc8dc4e8a81d4aac4719090a99785e0068712bd24 checksum: 10c0/c5f18ce198b420bdc201fd4278b4fa97bfe86178db565f3c4e1991bb452c9ea0b657e7980572555e2ec2fe218d07c42c794d217b9369903019cf784eea7e2164
languageName: node languageName: node
linkType: hard linkType: hard
@ -4219,13 +4219,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/visitor-keys@npm:7.5.0": "@typescript-eslint/visitor-keys@npm:7.7.0":
version: 7.5.0 version: 7.7.0
resolution: "@typescript-eslint/visitor-keys@npm:7.5.0" resolution: "@typescript-eslint/visitor-keys@npm:7.7.0"
dependencies: dependencies:
"@typescript-eslint/types": "npm:7.5.0" "@typescript-eslint/types": "npm:7.7.0"
eslint-visitor-keys: "npm:^3.4.1" eslint-visitor-keys: "npm:^3.4.3"
checksum: 10c0/eecf02b8dd54e83738a143aca87b902af4b357028a90fd34ed7a2f40a3ae2f6a188b9ba53903f23c80e868f1fffbb039e9ddb63525438d659707cc7bfb269317 checksum: 10c0/0f3b9720a962c04462a75d4872714c07320c8f672841881ada797ae960f9f6bd0e5f7494178917034f42635ef76f0f09fa3c8d4bd84f31ec58ee968fe75bada7
languageName: node languageName: node
linkType: hard linkType: hard
@ -9421,7 +9421,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"ignore@npm:^5.2.0, ignore@npm:^5.2.4, ignore@npm:^5.3.1": "ignore@npm:^5.2.0, ignore@npm:^5.3.1":
version: 5.3.1 version: 5.3.1
resolution: "ignore@npm:5.3.1" resolution: "ignore@npm:5.3.1"
checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd
@ -11785,7 +11785,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"minimatch@npm:9.0.3, minimatch@npm:^9.0.1": "minimatch@npm:9.0.3":
version: 9.0.3 version: 9.0.3
resolution: "minimatch@npm:9.0.3" resolution: "minimatch@npm:9.0.3"
dependencies: dependencies:
@ -11812,6 +11812,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"minimatch@npm:^9.0.1, minimatch@npm:^9.0.4":
version: 9.0.4
resolution: "minimatch@npm:9.0.4"
dependencies:
brace-expansion: "npm:^2.0.1"
checksum: 10c0/2c16f21f50e64922864e560ff97c587d15fd491f65d92a677a344e970fe62aafdbeafe648965fa96d33c061b4d0eabfe0213466203dd793367e7f28658cf6414
languageName: node
linkType: hard
"minimist@npm:^1.2.0, minimist@npm:^1.2.6": "minimist@npm:^1.2.0, minimist@npm:^1.2.6":
version: 1.2.8 version: 1.2.8
resolution: "minimist@npm:1.2.8" resolution: "minimist@npm:1.2.8"
@ -13093,18 +13102,18 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"postcss-color-functional-notation@npm:^6.0.8": "postcss-color-functional-notation@npm:^6.0.9":
version: 6.0.8 version: 6.0.9
resolution: "postcss-color-functional-notation@npm:6.0.8" resolution: "postcss-color-functional-notation@npm:6.0.9"
dependencies: dependencies:
"@csstools/css-color-parser": "npm:^1.6.3" "@csstools/css-color-parser": "npm:^2.0.0"
"@csstools/css-parser-algorithms": "npm:^2.6.1" "@csstools/css-parser-algorithms": "npm:^2.6.1"
"@csstools/css-tokenizer": "npm:^2.2.4" "@csstools/css-tokenizer": "npm:^2.2.4"
"@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
"@csstools/utilities": "npm:^1.0.0" "@csstools/utilities": "npm:^1.0.0"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/ae2ff7769970fb403ea71d5613e041d97bb647cfc54e4a428bcc75f98ff06c888b064384df12b18f609bfcc4395c31d6db4ad2b9c9385a829ba594d2692c31d1 checksum: 10c0/120f7bc23bf46dd1c008b3aa806fb02dd988ae180f9c0c10dca9f5ea3473bf20d7743aafae1441df5b4a3945a63ebb0dae1d4d55f7c8bcd34540529b627c4e3e
languageName: node languageName: node
linkType: hard linkType: hard
@ -13313,18 +13322,18 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"postcss-lab-function@npm:^6.0.13": "postcss-lab-function@npm:^6.0.14":
version: 6.0.13 version: 6.0.14
resolution: "postcss-lab-function@npm:6.0.13" resolution: "postcss-lab-function@npm:6.0.14"
dependencies: dependencies:
"@csstools/css-color-parser": "npm:^1.6.3" "@csstools/css-color-parser": "npm:^2.0.0"
"@csstools/css-parser-algorithms": "npm:^2.6.1" "@csstools/css-parser-algorithms": "npm:^2.6.1"
"@csstools/css-tokenizer": "npm:^2.2.4" "@csstools/css-tokenizer": "npm:^2.2.4"
"@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
"@csstools/utilities": "npm:^1.0.0" "@csstools/utilities": "npm:^1.0.0"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/3ffb82d0012e49df49b44f38a131f4b13ba3edeeca5ecc0062c1c1b6bd8961c06f05b1dd8ec620c50c2c406fc61a505d79488745185d69ed325603600f0a1bc8 checksum: 10c0/0b5d998ddb98ec6243448f1eca216f6e23872431885b152843feef1e844fc5b6b3ebe16ea8940f3d6abea732aa0c51b2ec0e57437e4326e5b2cb2bcb949e6d9f
languageName: node languageName: node
linkType: hard linkType: hard
@ -13480,16 +13489,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"postcss-nesting@npm:^12.1.1": "postcss-nesting@npm:^12.1.2":
version: 12.1.1 version: 12.1.2
resolution: "postcss-nesting@npm:12.1.1" resolution: "postcss-nesting@npm:12.1.2"
dependencies: dependencies:
"@csstools/selector-resolve-nested": "npm:^1.1.0" "@csstools/selector-resolve-nested": "npm:^1.1.0"
"@csstools/selector-specificity": "npm:^3.0.3" "@csstools/selector-specificity": "npm:^3.0.3"
postcss-selector-parser: "npm:^6.0.13" postcss-selector-parser: "npm:^6.0.13"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/8fac718e69ee2ac93179cc59810a8184581c04715fe34621ec5d504fc680cad4a11219ed0c918cbe15c468994c9aba88e729f35eef698c5d44cadd824425c47d checksum: 10c0/39d1d100f61863f904393b17169be83cdf82bd50d530efb3e3ae0c7b0f838b254e10e5d12e25119cf31dce9e351a2b770a03f9b2029ff33bef0ec924c0d2f642
languageName: node languageName: node
linkType: hard linkType: hard
@ -13644,17 +13653,17 @@ __metadata:
linkType: hard linkType: hard
"postcss-preset-env@npm:^9.5.2": "postcss-preset-env@npm:^9.5.2":
version: 9.5.6 version: 9.5.8
resolution: "postcss-preset-env@npm:9.5.6" resolution: "postcss-preset-env@npm:9.5.8"
dependencies: dependencies:
"@csstools/postcss-cascade-layers": "npm:^4.0.4" "@csstools/postcss-cascade-layers": "npm:^4.0.4"
"@csstools/postcss-color-function": "npm:^3.0.13" "@csstools/postcss-color-function": "npm:^3.0.14"
"@csstools/postcss-color-mix-function": "npm:^2.0.13" "@csstools/postcss-color-mix-function": "npm:^2.0.14"
"@csstools/postcss-exponential-functions": "npm:^1.0.5" "@csstools/postcss-exponential-functions": "npm:^1.0.5"
"@csstools/postcss-font-format-keywords": "npm:^3.0.2" "@csstools/postcss-font-format-keywords": "npm:^3.0.2"
"@csstools/postcss-gamut-mapping": "npm:^1.0.6" "@csstools/postcss-gamut-mapping": "npm:^1.0.7"
"@csstools/postcss-gradients-interpolation-method": "npm:^4.0.14" "@csstools/postcss-gradients-interpolation-method": "npm:^4.0.15"
"@csstools/postcss-hwb-function": "npm:^3.0.12" "@csstools/postcss-hwb-function": "npm:^3.0.13"
"@csstools/postcss-ic-unit": "npm:^3.0.6" "@csstools/postcss-ic-unit": "npm:^3.0.6"
"@csstools/postcss-initial": "npm:^1.0.1" "@csstools/postcss-initial": "npm:^1.0.1"
"@csstools/postcss-is-pseudo-class": "npm:^4.0.6" "@csstools/postcss-is-pseudo-class": "npm:^4.0.6"
@ -13668,12 +13677,12 @@ __metadata:
"@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^2.0.7" "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^2.0.7"
"@csstools/postcss-nested-calc": "npm:^3.0.2" "@csstools/postcss-nested-calc": "npm:^3.0.2"
"@csstools/postcss-normalize-display-values": "npm:^3.0.2" "@csstools/postcss-normalize-display-values": "npm:^3.0.2"
"@csstools/postcss-oklab-function": "npm:^3.0.13" "@csstools/postcss-oklab-function": "npm:^3.0.14"
"@csstools/postcss-progressive-custom-properties": "npm:^3.2.0" "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
"@csstools/postcss-relative-color-syntax": "npm:^2.0.13" "@csstools/postcss-relative-color-syntax": "npm:^2.0.14"
"@csstools/postcss-scope-pseudo-class": "npm:^3.0.1" "@csstools/postcss-scope-pseudo-class": "npm:^3.0.1"
"@csstools/postcss-stepped-value-functions": "npm:^3.0.6" "@csstools/postcss-stepped-value-functions": "npm:^3.0.6"
"@csstools/postcss-text-decoration-shorthand": "npm:^3.0.5" "@csstools/postcss-text-decoration-shorthand": "npm:^3.0.6"
"@csstools/postcss-trigonometric-functions": "npm:^3.0.6" "@csstools/postcss-trigonometric-functions": "npm:^3.0.6"
"@csstools/postcss-unset-value": "npm:^3.0.1" "@csstools/postcss-unset-value": "npm:^3.0.1"
autoprefixer: "npm:^10.4.19" autoprefixer: "npm:^10.4.19"
@ -13684,7 +13693,7 @@ __metadata:
cssdb: "npm:^8.0.0" cssdb: "npm:^8.0.0"
postcss-attribute-case-insensitive: "npm:^6.0.3" postcss-attribute-case-insensitive: "npm:^6.0.3"
postcss-clamp: "npm:^4.1.0" postcss-clamp: "npm:^4.1.0"
postcss-color-functional-notation: "npm:^6.0.8" postcss-color-functional-notation: "npm:^6.0.9"
postcss-color-hex-alpha: "npm:^9.0.4" postcss-color-hex-alpha: "npm:^9.0.4"
postcss-color-rebeccapurple: "npm:^9.0.3" postcss-color-rebeccapurple: "npm:^9.0.3"
postcss-custom-media: "npm:^10.0.4" postcss-custom-media: "npm:^10.0.4"
@ -13697,30 +13706,30 @@ __metadata:
postcss-font-variant: "npm:^5.0.0" postcss-font-variant: "npm:^5.0.0"
postcss-gap-properties: "npm:^5.0.1" postcss-gap-properties: "npm:^5.0.1"
postcss-image-set-function: "npm:^6.0.3" postcss-image-set-function: "npm:^6.0.3"
postcss-lab-function: "npm:^6.0.13" postcss-lab-function: "npm:^6.0.14"
postcss-logical: "npm:^7.0.1" postcss-logical: "npm:^7.0.1"
postcss-nesting: "npm:^12.1.1" postcss-nesting: "npm:^12.1.2"
postcss-opacity-percentage: "npm:^2.0.0" postcss-opacity-percentage: "npm:^2.0.0"
postcss-overflow-shorthand: "npm:^5.0.1" postcss-overflow-shorthand: "npm:^5.0.1"
postcss-page-break: "npm:^3.0.4" postcss-page-break: "npm:^3.0.4"
postcss-place: "npm:^9.0.1" postcss-place: "npm:^9.0.1"
postcss-pseudo-class-any-link: "npm:^9.0.1" postcss-pseudo-class-any-link: "npm:^9.0.2"
postcss-replace-overflow-wrap: "npm:^4.0.0" postcss-replace-overflow-wrap: "npm:^4.0.0"
postcss-selector-not: "npm:^7.0.2" postcss-selector-not: "npm:^7.0.2"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/21738ecac400cca9a96841959308538516ed00ca80d4c53beb20e080c7d963120fa77b7435b02e1beefc20043abce666419b81eccf6dacdc4298f540778c111d checksum: 10c0/5f77272eb7a938e5bedc3a0877f3fb0cdc6f20c8829730ccafbbd999db78ba4e6ac60f485aa7c292f70e011cf3edfadb7d2cc5459cbf9851abc25139eeb061b7
languageName: node languageName: node
linkType: hard linkType: hard
"postcss-pseudo-class-any-link@npm:^9.0.1": "postcss-pseudo-class-any-link@npm:^9.0.2":
version: 9.0.1 version: 9.0.2
resolution: "postcss-pseudo-class-any-link@npm:9.0.1" resolution: "postcss-pseudo-class-any-link@npm:9.0.2"
dependencies: dependencies:
postcss-selector-parser: "npm:^6.0.13" postcss-selector-parser: "npm:^6.0.13"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/2d33f486af442a0ee095b7b8875701ed3f54ea3f80d2c4d1c1b35d105088b569c847e1c71fde2adf6cefb4920e8fb7d057ff1ad56e62c65892c7b68e26213b98 checksum: 10c0/cc2cb455a793b1f5dc0ac290e02296eafb317d9ce987dc9f2102027e22f265299666dbd1e78f1d7836fce549dead73f41e24251c08a2dd0cf482f3cc43cf7909
languageName: node languageName: node
linkType: hard linkType: hard
@ -16885,12 +16894,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"ts-api-utils@npm:^1.0.1": "ts-api-utils@npm:^1.0.1, ts-api-utils@npm:^1.3.0":
version: 1.0.3 version: 1.3.0
resolution: "ts-api-utils@npm:1.0.3" resolution: "ts-api-utils@npm:1.3.0"
peerDependencies: peerDependencies:
typescript: ">=4.2.0" typescript: ">=4.2.0"
checksum: 10c0/9408338819c3aca2a709f0bc54e3f874227901506cacb1163612a6c8a43df224174feb965a5eafdae16f66fc68fd7bfee8d3275d0fa73fbb8699e03ed26520c9 checksum: 10c0/f54a0ba9ed56ce66baea90a3fa087a484002e807f28a8ccb2d070c75e76bde64bd0f6dce98b3802834156306050871b67eec325cb4e918015a360a3f0868c77c
languageName: node languageName: node
linkType: hard linkType: hard