diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index 7f3e333436..98b557a7c2 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -57,7 +57,6 @@ RSpec/AnyInstance:
- 'spec/controllers/activitypub/inboxes_controller_spec.rb'
- 'spec/controllers/admin/accounts_controller_spec.rb'
- 'spec/controllers/admin/resets_controller_spec.rb'
- - 'spec/controllers/admin/settings/branding_controller_spec.rb'
- 'spec/controllers/auth/sessions_controller_spec.rb'
- 'spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb'
- 'spec/controllers/settings/two_factor_authentication/recovery_codes_controller_spec.rb'
diff --git a/Gemfile b/Gemfile
index 2c355b4160..f9b4c2960b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -88,7 +88,7 @@ gem 'simple-navigation', '~> 4.4'
gem 'simple_form', '~> 5.2'
gem 'sprockets-rails', '~> 3.4', require: 'sprockets/railtie'
gem 'stoplight', '~> 3.0.1'
-gem 'strong_migrations', '1.3.0'
+gem 'strong_migrations', '1.6.4'
gem 'tty-prompt', '~> 0.23', require: false
gem 'twitter-text', '~> 3.1.0'
gem 'tzinfo-data', '~> 1.2023'
@@ -195,7 +195,7 @@ gem 'xorcist', '~> 1.1'
gem 'cocoon', '~> 1.2'
-gem 'net-http', '~> 0.3.2'
+gem 'net-http', '~> 0.4.0'
gem 'rubyzip', '~> 2.3'
gem 'hcaptcha', '~> 7.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index 9c5da5d065..3ef82a352a 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -130,8 +130,8 @@ GEM
attr_required (1.0.1)
awrence (1.2.1)
aws-eventstream (1.2.0)
- aws-partitions (1.809.0)
- aws-sdk-core (3.181.0)
+ aws-partitions (1.828.0)
+ aws-sdk-core (3.183.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.5)
@@ -139,7 +139,7 @@ GEM
aws-sdk-kms (1.71.0)
aws-sdk-core (~> 3, >= 3.177.0)
aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.133.0)
+ aws-sdk-s3 (1.136.0)
aws-sdk-core (~> 3, >= 3.181.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.6)
@@ -389,10 +389,10 @@ GEM
multi_json (~> 1.15)
rack (>= 2.2, < 4)
rdf (~> 3.3)
- json-ld-preloaded (3.2.2)
- json-ld (~> 3.2)
- rdf (~> 3.2)
- json-schema (4.0.0)
+ json-ld-preloaded (3.3.0)
+ json-ld (~> 3.3)
+ rdf (~> 3.3)
+ json-schema (4.1.1)
addressable (>= 2.8)
jsonapi-renderer (0.2.2)
jwt (2.7.1)
@@ -454,13 +454,13 @@ GEM
mime-types-data (~> 3.2015)
mime-types-data (3.2023.0808)
mini_mime (1.1.5)
- mini_portile2 (2.8.4)
+ mini_portile2 (2.8.5)
minitest (5.20.0)
msgpack (1.7.2)
multi_json (1.15.0)
multipart-post (2.3.0)
mutex_m (0.1.2)
- net-http (0.3.2)
+ net-http (0.4.0)
uri
net-http-persistent (4.0.2)
connection_pool (~> 2.2)
@@ -689,13 +689,13 @@ GEM
fugit (~> 1.1, >= 1.1.6)
safety_net_attestation (0.4.0)
jwt (~> 2.0)
- sanitize (6.0.2)
+ sanitize (6.1.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
scenic (1.7.0)
activerecord (>= 4.0.0)
railties (>= 4.0.0)
- selenium-webdriver (4.13.1)
+ selenium-webdriver (4.15.0)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
@@ -710,7 +710,7 @@ GEM
rufus-scheduler (~> 3.2)
sidekiq (>= 6, < 8)
tilt (>= 1.4.0)
- sidekiq-unique-jobs (7.1.29)
+ sidekiq-unique-jobs (7.1.30)
brpoplpush-redis_script (> 0.1.1, <= 2.0.0)
concurrent-ruby (~> 1.0, >= 1.0.5)
redis (< 5.0)
@@ -718,7 +718,7 @@ GEM
thor (>= 0.20, < 3.0)
simple-navigation (4.4.0)
activesupport (>= 2.3.2)
- simple_form (5.2.0)
+ simple_form (5.3.0)
actionpack (>= 5.2)
activemodel (>= 5.2)
simplecov (0.22.0)
@@ -740,7 +740,7 @@ GEM
stoplight (3.0.2)
redlock (~> 1.0)
stringio (3.0.8)
- strong_migrations (1.3.0)
+ strong_migrations (1.6.4)
activerecord (>= 5.2)
swd (1.3.0)
activesupport (>= 3)
@@ -753,7 +753,7 @@ GEM
terrapin (0.6.0)
climate_control (>= 0.0.3, < 1.0)
test-prof (1.2.3)
- thor (1.2.2)
+ thor (1.3.0)
tilt (2.3.0)
timeout (0.4.0)
tpm-key_attestation (0.12.0)
@@ -883,7 +883,7 @@ DEPENDENCIES
md-paperclip-azure (~> 2.2)
memory_profiler
mime-types (~> 3.5.0)
- net-http (~> 0.3.2)
+ net-http (~> 0.4.0)
net-ldap (~> 0.18)
nokogiri (~> 1.15)
nsa!
@@ -941,7 +941,7 @@ DEPENDENCIES
sprockets-rails (~> 3.4)
stackprof
stoplight (~> 3.0.1)
- strong_migrations (= 1.3.0)
+ strong_migrations (= 1.6.4)
test-prof
thor (~> 1.2)
tty-prompt (~> 0.23)
diff --git a/app/helpers/admin/account_moderation_notes_helper.rb b/app/helpers/admin/account_moderation_notes_helper.rb
index 2f08538ca6..3b9d580499 100644
--- a/app/helpers/admin/account_moderation_notes_helper.rb
+++ b/app/helpers/admin/account_moderation_notes_helper.rb
@@ -6,7 +6,7 @@ module Admin::AccountModerationNotesHelper
link_to path || admin_account_path(account.id), class: name_tag_classes(account), title: account.acct do
safe_join([
- image_tag(account.avatar.url, width: 15, height: 15, alt: display_name(account), class: 'avatar'),
+ image_tag(account.avatar.url, width: 15, height: 15, alt: '', class: 'avatar'),
content_tag(:span, account.acct, class: 'username'),
], ' ')
end
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index fce36bf43e..3c72b22c66 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -25,7 +25,7 @@ module SettingsHelper
return if account.nil?
link_to ActivityPub::TagManager.instance.url_for(account), class: 'name-tag', title: account.acct do
- safe_join([image_tag(account.avatar.url, width: 15, height: 15, alt: display_name(account), class: 'avatar'), content_tag(:span, account.acct, class: 'username')], ' ')
+ safe_join([image_tag(account.avatar.url, width: 15, height: 15, alt: '', class: 'avatar'), content_tag(:span, account.acct, class: 'username')], ' ')
end
end
end
diff --git a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap
index 7fbdedeb23..2f0a2de324 100644
--- a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap
+++ b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap
@@ -13,7 +13,7 @@ exports[` Autoplay renders a animated avatar 1`] = `
}
>
@@ -32,7 +32,7 @@ exports[` Still renders a still avatar 1`] = `
}
>
diff --git a/app/javascript/mastodon/components/avatar.tsx b/app/javascript/mastodon/components/avatar.tsx
index 77bd423409..8f866a3c65 100644
--- a/app/javascript/mastodon/components/avatar.tsx
+++ b/app/javascript/mastodon/components/avatar.tsx
@@ -42,7 +42,7 @@ export const Avatar: React.FC = ({
onMouseLeave={handleMouseLeave}
style={style}
>
- {src && }
+ {src && }
);
};
diff --git a/app/javascript/mastodon/features/__tests__/toggle-play.jsx b/app/javascript/mastodon/features/__tests__/toggle-play.jsx
new file mode 100644
index 0000000000..9c999db867
--- /dev/null
+++ b/app/javascript/mastodon/features/__tests__/toggle-play.jsx
@@ -0,0 +1,80 @@
+import PropTypes from 'prop-types';
+import React, { Component } from 'react';
+
+import { render, fireEvent } from '@testing-library/react';
+
+class Media extends Component {
+
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ paused: props.paused || false,
+ };
+ }
+
+ handleMediaClick = () => {
+ const { onClick } = this.props;
+
+ this.setState(prevState => ({
+ paused: !prevState.paused,
+ }));
+
+ if (typeof onClick === 'function') {
+ onClick();
+ }
+
+ const { title } = this.props;
+ const mediaElements = document.querySelectorAll(`div[title="${title}"]`);
+
+ setTimeout(() => {
+ mediaElements.forEach(element => {
+ if (element !== this && !element.classList.contains('paused')) {
+ element.click();
+ }
+ });
+ }, 0);
+ };
+
+ render() {
+ const { title } = this.props;
+ const { paused } = this.state;
+
+ return (
+
+ );
+ }
+
+}
+
+Media.propTypes = {
+ title: PropTypes.string.isRequired,
+ onClick: PropTypes.func,
+ paused: PropTypes.bool,
+};
+
+describe('Media attachments test', () => {
+ let currentMedia = null;
+ const togglePlayMock = jest.fn();
+
+ it('plays a new media file and pauses others that were playing', () => {
+ const container = render(
+
+
+
+
,
+ );
+
+ fireEvent.click(container.getByTitle('firstMedia'));
+ expect(togglePlayMock).toHaveBeenCalledTimes(1);
+ currentMedia = container.getByTitle('firstMedia');
+ expect(currentMedia.textContent).toMatch(/Playing/);
+
+ fireEvent.click(container.getByTitle('secondMedia'));
+ expect(togglePlayMock).toHaveBeenCalledTimes(2);
+ currentMedia = container.getByTitle('secondMedia');
+ expect(currentMedia.textContent).toMatch(/Playing/);
+ });
+});
diff --git a/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx b/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx
index df5427c307..84a303c37a 100644
--- a/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx
+++ b/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx
@@ -178,7 +178,7 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
modalType: 'IMAGE',
modalProps: {
src: account.get('avatar'),
- alt: account.get('acct'),
+ alt: '',
},
}));
},
diff --git a/app/javascript/mastodon/features/audio/index.jsx b/app/javascript/mastodon/features/audio/index.jsx
index 7a7d0910fa..fac43416c9 100644
--- a/app/javascript/mastodon/features/audio/index.jsx
+++ b/app/javascript/mastodon/features/audio/index.jsx
@@ -20,6 +20,7 @@ import { formatTime, getPointerPosition, fileNameFromURL } from 'mastodon/featur
import { Blurhash } from '../../components/blurhash';
import { displayMedia, useBlurhash } from '../../initial_state';
+import { currentMedia, setCurrentMedia } from '../../reducers/media_attachments';
import Visualizer from './visualizer';
@@ -165,15 +166,32 @@ class Audio extends PureComponent {
}
togglePlay = () => {
- if (!this.audioContext) {
- this._initAudioContext();
+ const audios = document.querySelectorAll('audio');
+
+ audios.forEach((audio) => {
+ const button = audio.previousElementSibling;
+ button.addEventListener('click', () => {
+ if(audio.paused) {
+ audios.forEach((e) => {
+ if (e !== audio) {
+ e.pause();
+ }
+ });
+ audio.play();
+ this.setState({ paused: false });
+ } else {
+ audio.pause();
+ this.setState({ paused: true });
+ }
+ });
+ });
+
+ if (currentMedia !== null) {
+ currentMedia.pause();
}
- if (this.state.paused) {
- this.setState({ paused: false }, () => this.audio.play());
- } else {
- this.setState({ paused: true }, () => this.audio.pause());
- }
+ this.audio.play();
+ setCurrentMedia(this.audio);
};
handleResize = debounce(() => {
@@ -195,6 +213,7 @@ class Audio extends PureComponent {
};
handlePause = () => {
+ this.audio.pause();
this.setState({ paused: true });
if (this.audioContext) {
diff --git a/app/javascript/mastodon/features/video/index.jsx b/app/javascript/mastodon/features/video/index.jsx
index 05b1316fd0..f88e9042ef 100644
--- a/app/javascript/mastodon/features/video/index.jsx
+++ b/app/javascript/mastodon/features/video/index.jsx
@@ -19,8 +19,10 @@ import { throttle } from 'lodash';
import { Blurhash } from 'mastodon/components/blurhash';
import { Icon } from 'mastodon/components/icon';
+import { playerSettings } from 'mastodon/settings';
import { displayMedia, useBlurhash } from '../../initial_state';
+import { currentMedia, setCurrentMedia } from '../../reducers/media_attachments';
import { isFullscreen, requestFullscreen, exitFullscreen } from '../ui/util/fullscreen';
const messages = defineMessages({
@@ -180,6 +182,7 @@ class Video extends PureComponent {
};
handlePause = () => {
+ this.video.pause();
this.setState({ paused: true });
};
@@ -226,8 +229,8 @@ class Video extends PureComponent {
if(!isNaN(x)) {
this.setState((state) => ({ volume: x, muted: state.muted && x === 0 }), () => {
- this.video.volume = x;
- this.video.muted = this.state.muted;
+ this._syncVideoToVolumeState(x);
+ this._saveVolumeState(x);
});
}
}, 15);
@@ -343,11 +346,32 @@ class Video extends PureComponent {
};
togglePlay = () => {
- if (this.state.paused) {
- this.setState({ paused: false }, () => this.video.play());
- } else {
- this.setState({ paused: true }, () => this.video.pause());
+ const videos = document.querySelectorAll('video');
+
+ videos.forEach((video) => {
+ const button = video.nextElementSibling;
+ button.addEventListener('click', () => {
+ if (video.paused) {
+ videos.forEach((e) => {
+ if (e !== video) {
+ e.pause();
+ }
+ });
+ video.play();
+ this.setState({ paused: false });
+ } else {
+ video.pause();
+ this.setState({ paused: true });
+ }
+ });
+ });
+
+ if (currentMedia !== null) {
+ currentMedia.pause();
}
+
+ this.video.play();
+ setCurrentMedia(this.video);
};
toggleFullscreen = () => {
@@ -365,6 +389,8 @@ class Video extends PureComponent {
document.addEventListener('MSFullscreenChange', this.handleFullscreenChange, true);
window.addEventListener('scroll', this.handleScroll);
+
+ this._syncVideoFromLocalStorage();
}
componentWillUnmount () {
@@ -437,8 +463,24 @@ class Video extends PureComponent {
const muted = !(this.video.muted || this.state.volume === 0);
this.setState((state) => ({ muted, volume: Math.max(state.volume || 0.5, 0.05) }), () => {
- this.video.volume = this.state.volume;
- this.video.muted = this.state.muted;
+ this._syncVideoToVolumeState();
+ this._saveVolumeState();
+ });
+ };
+
+ _syncVideoToVolumeState = (volume = null, muted = null) => {
+ this.video.volume = volume ?? this.state.volume;
+ this.video.muted = muted ?? this.state.muted;
+ };
+
+ _saveVolumeState = (volume = null, muted = null) => {
+ playerSettings.set('volume', volume ?? this.state.volume);
+ playerSettings.set('muted', muted ?? this.state.muted);
+ };
+
+ _syncVideoFromLocalStorage = () => {
+ this.setState({ volume: playerSettings.get('volume') ?? 0.5, muted: playerSettings.get('muted') ?? false }, () => {
+ this._syncVideoToVolumeState();
});
};
@@ -480,6 +522,7 @@ class Video extends PureComponent {
handleVolumeChange = () => {
this.setState({ volume: this.video.volume, muted: this.video.muted });
+ this._saveVolumeState(this.video.volume, this.video.muted);
};
handleOpenVideo = () => {
diff --git a/app/javascript/mastodon/reducers/media_attachments.js b/app/javascript/mastodon/reducers/media_attachments.js
index cbb4933bc7..f145e1dcaa 100644
--- a/app/javascript/mastodon/reducers/media_attachments.js
+++ b/app/javascript/mastodon/reducers/media_attachments.js
@@ -2,6 +2,13 @@ import { Map as ImmutableMap } from 'immutable';
import { STORE_HYDRATE } from '../actions/store';
+export let currentMedia = null;
+
+export function setCurrentMedia(value) {
+ currentMedia = value;
+}
+
+
const initialState = ImmutableMap({
accept_content_types: [],
});
diff --git a/app/javascript/mastodon/settings.js b/app/javascript/mastodon/settings.js
index aefb8e0e95..f31aee0afc 100644
--- a/app/javascript/mastodon/settings.js
+++ b/app/javascript/mastodon/settings.js
@@ -46,4 +46,5 @@ export default class Settings {
export const pushNotificationsSetting = new Settings('mastodon_push_notification_data');
export const tagHistory = new Settings('mastodon_tag_history');
export const bannerSettings = new Settings('mastodon_banner_settings');
-export const searchHistory = new Settings('mastodon_search_history');
\ No newline at end of file
+export const searchHistory = new Settings('mastodon_search_history');
+export const playerSettings = new Settings('mastodon_player');
diff --git a/app/views/filters/statuses/_status_filter.html.haml b/app/views/filters/statuses/_status_filter.html.haml
index ba1170cf92..9999dcda81 100644
--- a/app/views/filters/statuses/_status_filter.html.haml
+++ b/app/views/filters/statuses/_status_filter.html.haml
@@ -20,7 +20,7 @@
.detailed-status__meta
= link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'name-tag', target: '_blank', rel: 'noopener noreferrer' do
- = image_tag(status.account.avatar.url, width: 15, height: 15, alt: display_name(status.account), class: 'avatar')
+ = image_tag(status.account.avatar.url, width: 15, height: 15, alt: '', class: 'avatar')
.username= status.account.acct
ยท
= link_to ActivityPub::TagManager.instance.url_for(status), class: 'detailed-status__datetime', target: stream_link_target, rel: 'noopener noreferrer' do
diff --git a/config/application.rb b/config/application.rb
index 44a3326a2d..387827784a 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -86,115 +86,6 @@ module Mastodon
# config.time_zone = "Central Time (US & Canada)"
# config.eager_load_paths << Rails.root.join("extras")
- # All translations from config/locales/*.rb,yml are auto loaded.
- # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
- config.i18n.available_locales = [
- :af,
- :an,
- :ar,
- :ast,
- :be,
- :bg,
- :bn,
- :br,
- :bs,
- :ca,
- :ckb,
- :co,
- :cs,
- :cy,
- :da,
- :de,
- :el,
- :en,
- :'en-GB',
- :eo,
- :es,
- :'es-AR',
- :'es-MX',
- :et,
- :eu,
- :fa,
- :fi,
- :fo,
- :fr,
- :'fr-QC',
- :fy,
- :ga,
- :gd,
- :gl,
- :he,
- :hi,
- :hr,
- :hu,
- :hy,
- :id,
- :ig,
- :io,
- :is,
- :it,
- :ja,
- :ka,
- :kab,
- :kk,
- :kn,
- :ko,
- :ku,
- :kw,
- :la,
- :lt,
- :lv,
- :mk,
- :ml,
- :mr,
- :ms,
- :my,
- :nl,
- :nn,
- :no,
- :oc,
- :pa,
- :pl,
- :'pt-BR',
- :'pt-PT',
- :ro,
- :ru,
- :sa,
- :sc,
- :sco,
- :si,
- :sk,
- :sl,
- :sq,
- :sr,
- :'sr-Latn',
- :sv,
- :szl,
- :ta,
- :te,
- :th,
- :tr,
- :tt,
- :ug,
- :uk,
- :ur,
- :vi,
- :zgh,
- :'zh-CN',
- :'zh-HK',
- :'zh-TW',
- ]
-
- config.i18n.default_locale = begin
- custom_default_locale = ENV['DEFAULT_LOCALE']&.to_sym
-
- if config.i18n.available_locales.include?(custom_default_locale)
- custom_default_locale
- else
- :en
- end
- end
-
# config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
# config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]
diff --git a/config/initializers/i18n.rb b/config/initializers/i18n.rb
new file mode 100644
index 0000000000..39b7a3cc40
--- /dev/null
+++ b/config/initializers/i18n.rb
@@ -0,0 +1,110 @@
+# frozen_string_literal: true
+
+Rails.application.configure do
+ config.i18n.available_locales = [
+ :af,
+ :an,
+ :ar,
+ :ast,
+ :be,
+ :bg,
+ :bn,
+ :br,
+ :bs,
+ :ca,
+ :ckb,
+ :co,
+ :cs,
+ :cy,
+ :da,
+ :de,
+ :el,
+ :en,
+ :'en-GB',
+ :eo,
+ :es,
+ :'es-AR',
+ :'es-MX',
+ :et,
+ :eu,
+ :fa,
+ :fi,
+ :fo,
+ :fr,
+ :'fr-QC',
+ :fy,
+ :ga,
+ :gd,
+ :gl,
+ :he,
+ :hi,
+ :hr,
+ :hu,
+ :hy,
+ :id,
+ :ig,
+ :io,
+ :is,
+ :it,
+ :ja,
+ :ka,
+ :kab,
+ :kk,
+ :kn,
+ :ko,
+ :ku,
+ :kw,
+ :la,
+ :lt,
+ :lv,
+ :mk,
+ :ml,
+ :mr,
+ :ms,
+ :my,
+ :nl,
+ :nn,
+ :no,
+ :oc,
+ :pa,
+ :pl,
+ :'pt-BR',
+ :'pt-PT',
+ :ro,
+ :ru,
+ :sa,
+ :sc,
+ :sco,
+ :si,
+ :sk,
+ :sl,
+ :sq,
+ :sr,
+ :'sr-Latn',
+ :sv,
+ :szl,
+ :ta,
+ :te,
+ :th,
+ :tr,
+ :tt,
+ :ug,
+ :uk,
+ :ur,
+ :vi,
+ :zgh,
+ :'zh-CN',
+ :'zh-HK',
+ :'zh-TW',
+ ]
+
+ config.i18n.default_locale = begin
+ custom_default_locale = ENV['DEFAULT_LOCALE']&.to_sym
+
+ if Rails.configuration.i18n.available_locales.include?(custom_default_locale)
+ custom_default_locale
+ else
+ :en
+ end
+ end
+end
diff --git a/config/routes.rb b/config/routes.rb
index d42650441f..8f53e93891 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -3,6 +3,18 @@
require 'sidekiq_unique_jobs/web'
require 'sidekiq-scheduler/web'
+class RedirectWithVary < ActionDispatch::Routing::PathRedirect
+ def build_response(req)
+ super.tap do |response|
+ response.headers['Vary'] = 'Origin, Accept'
+ end
+ end
+end
+
+def redirect_with_vary(path)
+ RedirectWithVary.new(301, path)
+end
+
Rails.application.routes.draw do
# Paths of routes on the web app that to not require to be indexed or
# have alternative format representations requiring separate controllers
@@ -91,10 +103,13 @@ Rails.application.routes.draw do
confirmations: 'auth/confirmations',
}
- get '/users/:username', to: redirect('/@%{username}'), constraints: lambda { |req| req.format.nil? || req.format.html? }
- get '/users/:username/following', to: redirect('/@%{username}/following'), constraints: lambda { |req| req.format.nil? || req.format.html? }
- get '/users/:username/followers', to: redirect('/@%{username}/followers'), constraints: lambda { |req| req.format.nil? || req.format.html? }
- get '/users/:username/statuses/:id', to: redirect('/@%{username}/%{id}'), constraints: lambda { |req| req.format.nil? || req.format.html? }
+ # rubocop:disable Style/FormatStringToken - those do not go through the usual formatting functions and are not safe to correct
+ get '/users/:username', to: redirect_with_vary('/@%{username}'), constraints: lambda { |req| req.format.nil? || req.format.html? }
+ get '/users/:username/following', to: redirect_with_vary('/@%{username}/following'), constraints: lambda { |req| req.format.nil? || req.format.html? }
+ get '/users/:username/followers', to: redirect_with_vary('/@%{username}/followers'), constraints: lambda { |req| req.format.nil? || req.format.html? }
+ get '/users/:username/statuses/:id', to: redirect_with_vary('/@%{username}/%{id}'), constraints: lambda { |req| req.format.nil? || req.format.html? }
+ # rubocop:enable Style/FormatStringToken
+
get '/authorize_follow', to: redirect { |_, request| "/authorize_interaction?#{request.params.to_query}" }
resources :accounts, path: 'users', only: [:show], param: :username do
diff --git a/lib/mastodon/cli/maintenance.rb b/lib/mastodon/cli/maintenance.rb
index 9cc9a3507a..a95b7a30cd 100644
--- a/lib/mastodon/cli/maintenance.rb
+++ b/lib/mastodon/cli/maintenance.rb
@@ -136,24 +136,24 @@ module Mastodon::CLI
Mastodon has to be stopped to run this task, which will take a long time and may be destructive.
LONG_DESC
def fix_duplicates
- if ActiveRecord::Migrator.current_version < MIN_SUPPORTED_VERSION
- say 'Your version of the database schema is too old and is not supported by this script.', :red
- say 'Please update to at least Mastodon 3.0.0 before running this script.', :red
- exit(1)
- elsif ActiveRecord::Migrator.current_version > MAX_SUPPORTED_VERSION
- say 'Your version of the database schema is more recent than this script, this may cause unexpected errors.', :yellow
- exit(1) unless yes?('Continue anyway? (Yes/No)')
- end
+ verify_system_ready!
- if Sidekiq::ProcessSet.new.any?
- say 'It seems Sidekiq is running. All Mastodon processes need to be stopped when using this script.', :red
- exit(1)
- end
+ process_deduplications
- say 'This task will take a long time to run and is potentially destructive.', :yellow
- say 'Please make sure to stop Mastodon and have a backup.', :yellow
- exit(1) unless yes?('Continue? (Yes/No)')
+ deduplication_cleanup_tasks
+ say 'Finished!'
+ end
+
+ private
+
+ def verify_system_ready!
+ verify_schema_version!
+ verify_sidekiq_not_active!
+ verify_backup_warning!
+ end
+
+ def process_deduplications
deduplicate_users!
deduplicate_account_domain_blocks!
deduplicate_account_identity_proofs!
@@ -173,14 +173,44 @@ module Mastodon::CLI
deduplicate_webauthn_credentials!
deduplicate_webhooks!
deduplicate_software_updates!
-
- Scenic.database.refresh_materialized_view('instances', concurrently: true, cascade: false) if ActiveRecord::Migrator.current_version >= 2020_12_06_004238
- Rails.cache.clear
-
- say 'Finished!'
end
- private
+ def deduplication_cleanup_tasks
+ refresh_instances_view if schema_has_instances_view?
+ Rails.cache.clear
+ end
+
+ def refresh_instances_view
+ Scenic.database.refresh_materialized_view('instances', concurrently: true, cascade: false)
+ end
+
+ def schema_has_instances_view?
+ ActiveRecord::Migrator.current_version >= 2020_12_06_004238
+ end
+
+ def verify_schema_version!
+ if ActiveRecord::Migrator.current_version < MIN_SUPPORTED_VERSION
+ say 'Your version of the database schema is too old and is not supported by this script.', :red
+ say 'Please update to at least Mastodon 3.0.0 before running this script.', :red
+ exit(1)
+ elsif ActiveRecord::Migrator.current_version > MAX_SUPPORTED_VERSION
+ say 'Your version of the database schema is more recent than this script, this may cause unexpected errors.', :yellow
+ exit(1) unless yes?('Continue anyway? (Yes/No)')
+ end
+ end
+
+ def verify_sidekiq_not_active!
+ if Sidekiq::ProcessSet.new.any?
+ say 'It seems Sidekiq is running. All Mastodon processes need to be stopped when using this script.', :red
+ exit(1)
+ end
+ end
+
+ def verify_backup_warning!
+ say 'This task will take a long time to run and is potentially destructive.', :yellow
+ say 'Please make sure to stop Mastodon and have a backup.', :yellow
+ exit(1) unless yes?('Continue? (Yes/No)')
+ end
def deduplicate_accounts!
remove_index_if_exists!(:accounts, 'index_accounts_on_username_and_domain_lower')
diff --git a/spec/controllers/admin/settings/branding_controller_spec.rb b/spec/controllers/admin/settings/branding_controller_spec.rb
index 4b0f1e21e0..435616022a 100644
--- a/spec/controllers/admin/settings/branding_controller_spec.rb
+++ b/spec/controllers/admin/settings/branding_controller_spec.rb
@@ -19,10 +19,6 @@ RSpec.describe Admin::Settings::BrandingController do
end
describe 'PUT #update' do
- before do
- allow_any_instance_of(Form::AdminSettings).to receive(:valid?).and_return(true)
- end
-
around do |example|
before = Setting.site_short_description
Setting.site_short_description = nil
diff --git a/spec/controllers/auth/confirmations_controller_spec.rb b/spec/controllers/auth/confirmations_controller_spec.rb
index 799d3857e4..58bc38f548 100644
--- a/spec/controllers/auth/confirmations_controller_spec.rb
+++ b/spec/controllers/auth/confirmations_controller_spec.rb
@@ -7,7 +7,7 @@ describe Auth::ConfirmationsController do
describe 'GET #new' do
it 'returns http success' do
- @request.env['devise.mapping'] = Devise.mappings[:user]
+ request.env['devise.mapping'] = Devise.mappings[:user]
get :new
expect(response).to have_http_status(200)
end
@@ -19,7 +19,7 @@ describe Auth::ConfirmationsController do
before do
allow(BootstrapTimelineWorker).to receive(:perform_async)
- @request.env['devise.mapping'] = Devise.mappings[:user]
+ request.env['devise.mapping'] = Devise.mappings[:user]
get :show, params: { confirmation_token: 'foobar' }
end
@@ -37,7 +37,7 @@ describe Auth::ConfirmationsController do
before do
allow(BootstrapTimelineWorker).to receive(:perform_async)
- @request.env['devise.mapping'] = Devise.mappings[:user]
+ request.env['devise.mapping'] = Devise.mappings[:user]
get :show, params: { confirmation_token: 'foobar' }
end
@@ -51,7 +51,7 @@ describe Auth::ConfirmationsController do
before do
allow(BootstrapTimelineWorker).to receive(:perform_async)
- @request.env['devise.mapping'] = Devise.mappings[:user]
+ request.env['devise.mapping'] = Devise.mappings[:user]
sign_in(user, scope: :user)
get :show, params: { confirmation_token: 'foobar' }
end
@@ -66,7 +66,7 @@ describe Auth::ConfirmationsController do
before do
allow(BootstrapTimelineWorker).to receive(:perform_async)
- @request.env['devise.mapping'] = Devise.mappings[:user]
+ request.env['devise.mapping'] = Devise.mappings[:user]
user.approved = false
user.save!
sign_in(user, scope: :user)
@@ -83,7 +83,7 @@ describe Auth::ConfirmationsController do
before do
allow(BootstrapTimelineWorker).to receive(:perform_async)
- @request.env['devise.mapping'] = Devise.mappings[:user]
+ request.env['devise.mapping'] = Devise.mappings[:user]
get :show, params: { confirmation_token: 'foobar' }
end
diff --git a/spec/controllers/auth/passwords_controller_spec.rb b/spec/controllers/auth/passwords_controller_spec.rb
index 38fbed27a7..ef5706ee78 100644
--- a/spec/controllers/auth/passwords_controller_spec.rb
+++ b/spec/controllers/auth/passwords_controller_spec.rb
@@ -7,7 +7,7 @@ describe Auth::PasswordsController do
describe 'GET #new' do
it 'returns http success' do
- @request.env['devise.mapping'] = Devise.mappings[:user]
+ request.env['devise.mapping'] = Devise.mappings[:user]
get :new
expect(response).to have_http_status(200)
end
diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb
index 3ff9b15007..049190e2ee 100644
--- a/spec/controllers/auth/sessions_controller_spec.rb
+++ b/spec/controllers/auth/sessions_controller_spec.rb
@@ -378,7 +378,7 @@ RSpec.describe Auth::SessionsController do
context 'when using a valid webauthn credential' do
before do
- @controller.session[:webauthn_challenge] = challenge
+ controller.session[:webauthn_challenge] = challenge
post :create, params: { user: { credential: fake_credential } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
end
diff --git a/spec/controllers/emojis_controller_spec.rb b/spec/controllers/emojis_controller_spec.rb
index 249dfd9d51..3fe19ee5ce 100644
--- a/spec/controllers/emojis_controller_spec.rb
+++ b/spec/controllers/emojis_controller_spec.rb
@@ -8,13 +8,11 @@ describe EmojisController do
let(:emoji) { Fabricate(:custom_emoji) }
describe 'GET #show' do
- subject(:body) { JSON.parse(response.body, symbolize_names: true) }
-
let(:response) { get :show, params: { id: emoji.id, format: :json } }
it 'returns the right response' do
expect(response).to have_http_status 200
- expect(body[:name]).to eq ':coolcat:'
+ expect(body_as_json[:name]).to eq ':coolcat:'
end
end
end
diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb
index 3ddc5691a9..50a8aba2d8 100644
--- a/spec/controllers/home_controller_spec.rb
+++ b/spec/controllers/home_controller_spec.rb
@@ -10,7 +10,7 @@ RSpec.describe HomeController do
context 'when not signed in' do
it 'returns http success' do
- @request.path = '/'
+ request.path = '/'
expect(subject).to have_http_status(:success)
end
end
diff --git a/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb b/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb
index fe4868956c..2ffad13c61 100644
--- a/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb
+++ b/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb
@@ -130,7 +130,7 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do
it 'stores the challenge on the session' do
get :options
- expect(@controller.session[:webauthn_challenge]).to be_present
+ expect(controller.session[:webauthn_challenge]).to be_present
end
it 'does not change webauthn_id' do
@@ -155,7 +155,7 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do
it 'stores the challenge on the session' do
get :options
- expect(@controller.session[:webauthn_challenge]).to be_present
+ expect(controller.session[:webauthn_challenge]).to be_present
end
it 'sets user webauthn_id' do
@@ -218,7 +218,7 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do
context 'when creation succeeds' do
it 'returns http success' do
- @controller.session[:webauthn_challenge] = challenge
+ controller.session[:webauthn_challenge] = challenge
post :create, params: { credential: new_webauthn_credential, nickname: nickname }
@@ -226,7 +226,7 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do
end
it 'adds a new credential to user credentials' do
- @controller.session[:webauthn_challenge] = challenge
+ controller.session[:webauthn_challenge] = challenge
expect do
post :create, params: { credential: new_webauthn_credential, nickname: nickname }
@@ -234,7 +234,7 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do
end
it 'does not change webauthn_id' do
- @controller.session[:webauthn_challenge] = challenge
+ controller.session[:webauthn_challenge] = challenge
expect do
post :create, params: { credential: new_webauthn_credential, nickname: nickname }
@@ -244,7 +244,7 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do
context 'when the nickname is already used' do
it 'fails' do
- @controller.session[:webauthn_challenge] = challenge
+ controller.session[:webauthn_challenge] = challenge
post :create, params: { credential: new_webauthn_credential, nickname: 'USB Key' }
@@ -264,7 +264,7 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do
end
it 'fails' do
- @controller.session[:webauthn_challenge] = challenge
+ controller.session[:webauthn_challenge] = challenge
post :create, params: { credential: new_webauthn_credential, nickname: nickname }
@@ -277,7 +277,7 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do
context 'when user have not enabled webauthn' do
context 'when creation succeeds' do
it 'creates a webauthn credential' do
- @controller.session[:webauthn_challenge] = challenge
+ controller.session[:webauthn_challenge] = challenge
expect do
post :create, params: { credential: new_webauthn_credential, nickname: nickname }
diff --git a/spec/lib/account_statuses_filter_spec.rb b/spec/lib/account_statuses_filter_spec.rb
index c821eb4bac..7774585124 100644
--- a/spec/lib/account_statuses_filter_spec.rb
+++ b/spec/lib/account_statuses_filter_spec.rb
@@ -3,8 +3,6 @@
require 'rails_helper'
RSpec.describe AccountStatusesFilter do
- subject { described_class.new(account, current_account, params) }
-
let(:account) { Fabricate(:account) }
let(:current_account) { nil }
let(:params) { {} }
@@ -38,6 +36,8 @@ RSpec.describe AccountStatusesFilter do
end
describe '#results' do
+ subject { described_class.new(account, current_account, params).results }
+
let(:tag) { Fabricate(:tag) }
before do
@@ -56,7 +56,7 @@ RSpec.describe AccountStatusesFilter do
let(:params) { { only_media: true } }
it 'returns only statuses with media' do
- expect(subject.results.all?(&:with_media?)).to be true
+ expect(subject.all?(&:with_media?)).to be true
end
end
@@ -64,7 +64,7 @@ RSpec.describe AccountStatusesFilter do
let(:params) { { tagged: tag.name } }
it 'returns only statuses with tag' do
- expect(subject.results.all? { |s| s.tags.include?(tag) }).to be true
+ expect(subject.all? { |s| s.tags.include?(tag) }).to be true
end
end
@@ -72,7 +72,7 @@ RSpec.describe AccountStatusesFilter do
let(:params) { { exclude_replies: true } }
it 'returns only statuses that are not replies' do
- expect(subject.results.none?(&:reply?)).to be true
+ expect(subject.none?(&:reply?)).to be true
end
end
@@ -80,7 +80,7 @@ RSpec.describe AccountStatusesFilter do
let(:params) { { exclude_reblogs: true } }
it 'returns only statuses that are not reblogs' do
- expect(subject.results.none?(&:reblog?)).to be true
+ expect(subject.none?(&:reblog?)).to be true
end
end
end
@@ -89,16 +89,12 @@ RSpec.describe AccountStatusesFilter do
let(:current_account) { nil }
let(:direct_status) { nil }
- it 'returns only public statuses' do
- expect(subject.results.pluck(:visibility).uniq).to match_array %w(unlisted public)
- end
+ it 'returns only public statuses, public replies, and public reblogs' do
+ expect(results_unique_visibilities).to match_array %w(unlisted public)
- it 'returns public replies' do
- expect(subject.results.pluck(:in_reply_to_id)).to_not be_empty
- end
+ expect(results_in_reply_to_ids).to_not be_empty
- it 'returns public reblogs' do
- expect(subject.results.pluck(:reblog_of_id)).to_not be_empty
+ expect(results_reblog_of_ids).to_not be_empty
end
it_behaves_like 'filter params'
@@ -112,23 +108,19 @@ RSpec.describe AccountStatusesFilter do
end
it 'returns nothing' do
- expect(subject.results.to_a).to be_empty
+ expect(subject.to_a).to be_empty
end
end
context 'when accessed by self' do
let(:current_account) { account }
- it 'returns everything' do
- expect(subject.results.pluck(:visibility).uniq).to match_array %w(direct private unlisted public)
- end
+ it 'returns all statuses, replies, and reblogs' do
+ expect(results_unique_visibilities).to match_array %w(direct private unlisted public)
- it 'returns replies' do
- expect(subject.results.pluck(:in_reply_to_id)).to_not be_empty
- end
+ expect(results_in_reply_to_ids).to_not be_empty
- it 'returns reblogs' do
- expect(subject.results.pluck(:reblog_of_id)).to_not be_empty
+ expect(results_reblog_of_ids).to_not be_empty
end
it_behaves_like 'filter params'
@@ -141,23 +133,19 @@ RSpec.describe AccountStatusesFilter do
current_account.follow!(account)
end
- it 'returns private statuses' do
- expect(subject.results.pluck(:visibility).uniq).to match_array %w(private unlisted public)
- end
+ it 'returns private statuses, replies, and reblogs' do
+ expect(results_unique_visibilities).to match_array %w(private unlisted public)
- it 'returns replies' do
- expect(subject.results.pluck(:in_reply_to_id)).to_not be_empty
- end
+ expect(results_in_reply_to_ids).to_not be_empty
- it 'returns reblogs' do
- expect(subject.results.pluck(:reblog_of_id)).to_not be_empty
+ expect(results_reblog_of_ids).to_not be_empty
end
context 'when there is a direct status mentioning the non-follower' do
let!(:direct_status) { status_with_mention!(:direct, current_account) }
it 'returns the direct status' do
- expect(subject.results.pluck(:id)).to include(direct_status.id)
+ expect(results_ids).to include(direct_status.id)
end
end
@@ -167,23 +155,19 @@ RSpec.describe AccountStatusesFilter do
context 'when accessed by a non-follower' do
let(:current_account) { Fabricate(:account) }
- it 'returns only public statuses' do
- expect(subject.results.pluck(:visibility).uniq).to match_array %w(unlisted public)
- end
+ it 'returns only public statuses, replies, and reblogs' do
+ expect(results_unique_visibilities).to match_array %w(unlisted public)
- it 'returns public replies' do
- expect(subject.results.pluck(:in_reply_to_id)).to_not be_empty
- end
+ expect(results_in_reply_to_ids).to_not be_empty
- it 'returns public reblogs' do
- expect(subject.results.pluck(:reblog_of_id)).to_not be_empty
+ expect(results_reblog_of_ids).to_not be_empty
end
context 'when there is a private status mentioning the non-follower' do
let!(:private_status) { status_with_mention!(:private, current_account) }
it 'returns the private status' do
- expect(subject.results.pluck(:id)).to include(private_status.id)
+ expect(results_ids).to include(private_status.id)
end
end
@@ -195,7 +179,7 @@ RSpec.describe AccountStatusesFilter do
end
it 'does not return reblog of blocked account' do
- expect(subject.results.pluck(:id)).to_not include(reblog.id)
+ expect(results_ids).to_not include(reblog.id)
end
end
@@ -209,7 +193,7 @@ RSpec.describe AccountStatusesFilter do
end
it 'does not return reblog of blocked domain' do
- expect(subject.results.pluck(:id)).to_not include(reblog.id)
+ expect(results_ids).to_not include(reblog.id)
end
end
@@ -223,7 +207,7 @@ RSpec.describe AccountStatusesFilter do
end
it 'returns the reblog from the non-blocked domain' do
- expect(subject.results.pluck(:id)).to include(reblog.id)
+ expect(results_ids).to include(reblog.id)
end
end
@@ -235,7 +219,7 @@ RSpec.describe AccountStatusesFilter do
end
it 'does not return reblog of muted account' do
- expect(subject.results.pluck(:id)).to_not include(reblog.id)
+ expect(results_ids).to_not include(reblog.id)
end
end
@@ -247,11 +231,29 @@ RSpec.describe AccountStatusesFilter do
end
it 'does not return reblog of blocked-by account' do
- expect(subject.results.pluck(:id)).to_not include(reblog.id)
+ expect(results_ids).to_not include(reblog.id)
end
end
it_behaves_like 'filter params'
end
+
+ private
+
+ def results_unique_visibilities
+ subject.pluck(:visibility).uniq
+ end
+
+ def results_in_reply_to_ids
+ subject.pluck(:in_reply_to_id)
+ end
+
+ def results_reblog_of_ids
+ subject.pluck(:reblog_of_id)
+ end
+
+ def results_ids
+ subject.pluck(:id)
+ end
end
end
diff --git a/spec/lib/mastodon/cli/maintenance_spec.rb b/spec/lib/mastodon/cli/maintenance_spec.rb
index 12cd9ca8a6..a6789ea5a4 100644
--- a/spec/lib/mastodon/cli/maintenance_spec.rb
+++ b/spec/lib/mastodon/cli/maintenance_spec.rb
@@ -4,9 +4,51 @@ require 'rails_helper'
require 'mastodon/cli/maintenance'
describe Mastodon::CLI::Maintenance do
+ let(:cli) { described_class.new }
+
describe '.exit_on_failure?' do
it 'returns true' do
expect(described_class.exit_on_failure?).to be true
end
end
+
+ describe '#fix_duplicates' do
+ context 'when the database version is too old' do
+ before do
+ allow(ActiveRecord::Migrator).to receive(:current_version).and_return(2000_01_01_000000) # Earlier than minimum
+ end
+
+ it 'Exits with error message' do
+ expect { cli.invoke :fix_duplicates }.to output(
+ a_string_including('is too old')
+ ).to_stdout.and raise_error(SystemExit)
+ end
+ end
+
+ context 'when the database version is too new and the user does not continue' do
+ before do
+ allow(ActiveRecord::Migrator).to receive(:current_version).and_return(2100_01_01_000000) # Later than maximum
+ allow(cli.shell).to receive(:yes?).with('Continue anyway? (Yes/No)').and_return(false).once
+ end
+
+ it 'Exits with error message' do
+ expect { cli.invoke :fix_duplicates }.to output(
+ a_string_including('more recent')
+ ).to_stdout.and raise_error(SystemExit)
+ end
+ end
+
+ context 'when Sidekiq is running' do
+ before do
+ allow(ActiveRecord::Migrator).to receive(:current_version).and_return(2022_01_01_000000) # Higher than minimum, lower than maximum
+ allow(Sidekiq::ProcessSet).to receive(:new).and_return [:process]
+ end
+
+ it 'Exits with error message' do
+ expect { cli.invoke :fix_duplicates }.to output(
+ a_string_including('Sidekiq is running')
+ ).to_stdout.and raise_error(SystemExit)
+ end
+ end
+ end
end
diff --git a/spec/requests/cache_spec.rb b/spec/requests/cache_spec.rb
index c391c8b3da..19232fce68 100644
--- a/spec/requests/cache_spec.rb
+++ b/spec/requests/cache_spec.rb
@@ -124,7 +124,7 @@ describe 'Caching behavior' do
expect(response.cookies).to be_empty
end
- it 'sets public cache control' do
+ it 'sets public cache control', :aggregate_failures do
# expect(response.cache_control[:max_age]&.to_i).to be_positive
expect(response.cache_control[:public]).to be_truthy
expect(response.cache_control[:private]).to be_falsy
@@ -141,11 +141,8 @@ describe 'Caching behavior' do
end
shared_examples 'non-cacheable error' do
- it 'does not return HTTP success' do
+ it 'does not return HTTP success and does not have cache headers', :aggregate_failures do
expect(response).to_not have_http_status(200)
- end
-
- it 'does not have cache headers' do
expect(response.cache_control[:public]).to be_falsy
end
end
@@ -171,17 +168,24 @@ describe 'Caching behavior' do
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Moderator')) }
before do
- # rubocop:disable Style/NumericLiterals
- status = Fabricate(:status, account: alice, id: 110224538612341312)
- Fabricate(:status, account: alice, id: 110224538643211312, visibility: :private)
+ status = Fabricate(:status, account: alice, id: '110224538612341312')
+ Fabricate(:status, account: alice, id: '110224538643211312', visibility: :private)
Fabricate(:invite, code: 'abcdef')
- Fabricate(:poll, status: status, account: alice, id: 12345)
- # rubocop:enable Style/NumericLiterals
+ Fabricate(:poll, status: status, account: alice, id: '12345')
user.account.follow!(alice)
end
context 'when anonymously accessed' do
+ describe '/users/alice' do
+ it 'redirects with proper cache header', :aggregate_failures do
+ get '/users/alice'
+
+ expect(response).to redirect_to('/@alice')
+ expect(response.headers['Vary']&.split(',')&.map { |x| x.strip.downcase }).to include('accept')
+ end
+ end
+
TestEndpoints::ALWAYS_CACHED.each do |endpoint|
describe endpoint do
before { get endpoint }
diff --git a/spec/serializers/activitypub/device_serializer_spec.rb b/spec/serializers/activitypub/device_serializer_spec.rb
index 2a3be82121..23f0b24c4e 100644
--- a/spec/serializers/activitypub/device_serializer_spec.rb
+++ b/spec/serializers/activitypub/device_serializer_spec.rb
@@ -3,13 +3,7 @@
require 'rails_helper'
describe ActivityPub::DeviceSerializer do
- let(:serialization) do
- JSON.parse(
- ActiveModelSerializers::SerializableResource.new(
- record, serializer: described_class
- ).to_json
- )
- end
+ let(:serialization) { serialized_record_json(record, described_class) }
let(:record) { Fabricate(:device) }
describe 'type' do
diff --git a/spec/serializers/activitypub/note_serializer_spec.rb b/spec/serializers/activitypub/note_serializer_spec.rb
index 311a4573d9..338d66b308 100644
--- a/spec/serializers/activitypub/note_serializer_spec.rb
+++ b/spec/serializers/activitypub/note_serializer_spec.rb
@@ -3,7 +3,7 @@
require 'rails_helper'
describe ActivityPub::NoteSerializer do
- subject { JSON.parse(@serialization.to_json) }
+ subject { serialized_record_json(parent, described_class, adapter: ActivityPub::Adapter) }
let!(:account) { Fabricate(:account) }
let!(:other) { Fabricate(:account) }
@@ -14,10 +14,6 @@ describe ActivityPub::NoteSerializer do
let!(:reply_by_account_third) { Fabricate(:status, account: account, thread: parent, visibility: :public) }
let!(:reply_by_account_visibility_direct) { Fabricate(:status, account: account, thread: parent, visibility: :direct) }
- before do
- @serialization = ActiveModelSerializers::SerializableResource.new(parent, serializer: described_class, adapter: ActivityPub::Adapter)
- end
-
it 'has the expected shape' do
expect(subject).to include({
'@context' => include('https://www.w3.org/ns/activitystreams'),
diff --git a/spec/serializers/activitypub/one_time_key_serializer_spec.rb b/spec/serializers/activitypub/one_time_key_serializer_spec.rb
index 6fe1f06185..89efe95c8c 100644
--- a/spec/serializers/activitypub/one_time_key_serializer_spec.rb
+++ b/spec/serializers/activitypub/one_time_key_serializer_spec.rb
@@ -3,13 +3,7 @@
require 'rails_helper'
describe ActivityPub::OneTimeKeySerializer do
- let(:serialization) do
- JSON.parse(
- ActiveModelSerializers::SerializableResource.new(
- record, serializer: described_class
- ).to_json
- )
- end
+ let(:serialization) { serialized_record_json(record, described_class) }
let(:record) { Fabricate(:one_time_key) }
describe 'type' do
diff --git a/spec/serializers/activitypub/undo_like_serializer_spec.rb b/spec/serializers/activitypub/undo_like_serializer_spec.rb
index 43cf7192e4..3d61e86751 100644
--- a/spec/serializers/activitypub/undo_like_serializer_spec.rb
+++ b/spec/serializers/activitypub/undo_like_serializer_spec.rb
@@ -3,13 +3,7 @@
require 'rails_helper'
describe ActivityPub::UndoLikeSerializer do
- let(:serialization) do
- JSON.parse(
- ActiveModelSerializers::SerializableResource.new(
- record, serializer: described_class
- ).to_json
- )
- end
+ let(:serialization) { serialized_record_json(record, described_class) }
let(:record) { Fabricate(:favourite) }
describe 'type' do
diff --git a/spec/serializers/activitypub/update_poll_serializer_spec.rb b/spec/serializers/activitypub/update_poll_serializer_spec.rb
index 9a13fdd576..8ff4fd2701 100644
--- a/spec/serializers/activitypub/update_poll_serializer_spec.rb
+++ b/spec/serializers/activitypub/update_poll_serializer_spec.rb
@@ -3,16 +3,12 @@
require 'rails_helper'
describe ActivityPub::UpdatePollSerializer do
- subject { JSON.parse(@serialization.to_json) }
+ subject { serialized_record_json(status, described_class, adapter: ActivityPub::Adapter) }
let(:account) { Fabricate(:account) }
let(:poll) { Fabricate(:poll, account: account) }
let!(:status) { Fabricate(:status, account: account, poll: poll) }
- before do
- @serialization = ActiveModelSerializers::SerializableResource.new(status, serializer: described_class, adapter: ActivityPub::Adapter)
- end
-
it 'has a Update type' do
expect(subject['type']).to eql('Update')
end
diff --git a/spec/serializers/activitypub/vote_serializer_spec.rb b/spec/serializers/activitypub/vote_serializer_spec.rb
index c329542d79..b7c0b8928b 100644
--- a/spec/serializers/activitypub/vote_serializer_spec.rb
+++ b/spec/serializers/activitypub/vote_serializer_spec.rb
@@ -3,13 +3,7 @@
require 'rails_helper'
describe ActivityPub::VoteSerializer do
- let(:serialization) do
- JSON.parse(
- ActiveModelSerializers::SerializableResource.new(
- record, serializer: described_class
- ).to_json
- )
- end
+ let(:serialization) { serialized_record_json(record, described_class) }
let(:record) { Fabricate(:poll_vote) }
describe 'type' do
diff --git a/spec/serializers/rest/account_serializer_spec.rb b/spec/serializers/rest/account_serializer_spec.rb
index e399e88f37..15939e484d 100644
--- a/spec/serializers/rest/account_serializer_spec.rb
+++ b/spec/serializers/rest/account_serializer_spec.rb
@@ -3,7 +3,7 @@
require 'rails_helper'
describe REST::AccountSerializer do
- subject { JSON.parse(ActiveModelSerializers::SerializableResource.new(account, serializer: described_class).to_json) }
+ subject { serialized_record_json(account, described_class) }
let(:role) { Fabricate(:user_role, name: 'Role', highlighted: true) }
let(:user) { Fabricate(:user, role: role) }
diff --git a/spec/serializers/rest/encrypted_message_serializer_spec.rb b/spec/serializers/rest/encrypted_message_serializer_spec.rb
index e0e70a3b84..01db1149af 100644
--- a/spec/serializers/rest/encrypted_message_serializer_spec.rb
+++ b/spec/serializers/rest/encrypted_message_serializer_spec.rb
@@ -3,13 +3,7 @@
require 'rails_helper'
describe REST::EncryptedMessageSerializer do
- let(:serialization) do
- JSON.parse(
- ActiveModelSerializers::SerializableResource.new(
- record, serializer: described_class
- ).to_json
- )
- end
+ let(:serialization) { serialized_record_json(record, described_class) }
let(:record) { Fabricate(:encrypted_message) }
describe 'account' do
diff --git a/spec/serializers/rest/instance_serializer_spec.rb b/spec/serializers/rest/instance_serializer_spec.rb
index 15a5de18dd..8ac32f2247 100644
--- a/spec/serializers/rest/instance_serializer_spec.rb
+++ b/spec/serializers/rest/instance_serializer_spec.rb
@@ -3,13 +3,7 @@
require 'rails_helper'
describe REST::InstanceSerializer do
- let(:serialization) do
- JSON.parse(
- ActiveModelSerializers::SerializableResource.new(
- record, serializer: described_class
- ).to_json
- )
- end
+ let(:serialization) { serialized_record_json(record, described_class) }
let(:record) { InstancePresenter.new }
describe 'usage' do
diff --git a/spec/serializers/rest/keys/claim_result_serializer_spec.rb b/spec/serializers/rest/keys/claim_result_serializer_spec.rb
index cf9416f032..7f7fb850cd 100644
--- a/spec/serializers/rest/keys/claim_result_serializer_spec.rb
+++ b/spec/serializers/rest/keys/claim_result_serializer_spec.rb
@@ -3,13 +3,7 @@
require 'rails_helper'
describe REST::Keys::ClaimResultSerializer do
- let(:serialization) do
- JSON.parse(
- ActiveModelSerializers::SerializableResource.new(
- record, serializer: described_class
- ).to_json
- )
- end
+ let(:serialization) { serialized_record_json(record, described_class) }
let(:record) { Keys::ClaimService::Result.new(Account.new(id: 123), 456) }
describe 'account' do
diff --git a/spec/serializers/rest/keys/device_serializer_spec.rb b/spec/serializers/rest/keys/device_serializer_spec.rb
index c15e197cb8..28177a3db5 100644
--- a/spec/serializers/rest/keys/device_serializer_spec.rb
+++ b/spec/serializers/rest/keys/device_serializer_spec.rb
@@ -3,13 +3,7 @@
require 'rails_helper'
describe REST::Keys::DeviceSerializer do
- let(:serialization) do
- JSON.parse(
- ActiveModelSerializers::SerializableResource.new(
- record, serializer: described_class
- ).to_json
- )
- end
+ let(:serialization) { serialized_record_json(record, described_class) }
let(:record) { Device.new(name: 'Device name') }
describe 'name' do
diff --git a/spec/serializers/rest/keys/query_result_serializer_spec.rb b/spec/serializers/rest/keys/query_result_serializer_spec.rb
index 983780ae98..ef67d70675 100644
--- a/spec/serializers/rest/keys/query_result_serializer_spec.rb
+++ b/spec/serializers/rest/keys/query_result_serializer_spec.rb
@@ -3,13 +3,7 @@
require 'rails_helper'
describe REST::Keys::QueryResultSerializer do
- let(:serialization) do
- JSON.parse(
- ActiveModelSerializers::SerializableResource.new(
- record, serializer: described_class
- ).to_json
- )
- end
+ let(:serialization) { serialized_record_json(record, described_class) }
let(:record) { Keys::QueryService::Result.new(Account.new(id: 123), []) }
describe 'account' do
diff --git a/spec/serializers/rest/suggestion_serializer_spec.rb b/spec/serializers/rest/suggestion_serializer_spec.rb
index b3c086208d..60420d8023 100644
--- a/spec/serializers/rest/suggestion_serializer_spec.rb
+++ b/spec/serializers/rest/suggestion_serializer_spec.rb
@@ -3,13 +3,7 @@
require 'rails_helper'
describe REST::SuggestionSerializer do
- let(:serialization) do
- JSON.parse(
- ActiveModelSerializers::SerializableResource.new(
- record, serializer: described_class
- ).to_json
- )
- end
+ let(:serialization) { serialized_record_json(record, described_class) }
let(:record) do
AccountSuggestions::Suggestion.new(
account: account,
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 4c4e31dd2a..7c97d85953 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -52,6 +52,17 @@ def json_str_to_hash(str)
JSON.parse(str, symbolize_names: true)
end
+def serialized_record_json(record, serializer, adapter: nil)
+ options = { serializer: serializer }
+ options[:adapter] = adapter if adapter.present?
+ JSON.parse(
+ ActiveModelSerializers::SerializableResource.new(
+ record,
+ options
+ ).to_json
+ )
+end
+
def expect_push_bulk_to_match(klass, matcher)
allow(Sidekiq::Client).to receive(:push_bulk)
yield
@@ -60,122 +71,3 @@ def expect_push_bulk_to_match(klass, matcher)
'args' => matcher,
}))
end
-
-class StreamingServerManager
- @running_thread = nil
-
- def initialize
- at_exit { stop }
- end
-
- def start(port: 4020)
- return if @running_thread
-
- queue = Queue.new
-
- @queue = queue
-
- @running_thread = Thread.new do
- Open3.popen2e(
- {
- 'REDIS_NAMESPACE' => ENV.fetch('REDIS_NAMESPACE'),
- 'DB_NAME' => "#{ENV.fetch('DB_NAME', 'mastodon')}_test#{ENV.fetch('TEST_ENV_NUMBER', '')}",
- 'RAILS_ENV' => ENV.fetch('RAILS_ENV', 'test'),
- 'NODE_ENV' => ENV.fetch('STREAMING_NODE_ENV', 'development'),
- 'PORT' => port.to_s,
- },
- 'node index.js', # must not call yarn here, otherwise it will fail because yarn does not send signals to its child process
- chdir: Rails.root.join('streaming')
- ) do |_stdin, stdout_err, process_thread|
- status = :starting
-
- # Spawn a thread to listen on streaming server output
- output_thread = Thread.new do
- stdout_err.each_line do |line|
- Rails.logger.info "Streaming server: #{line}"
-
- if status == :starting && line.match('Streaming API now listening on')
- status = :started
- @queue.enq 'started'
- end
- end
- end
-
- # And another thread to listen on commands from the main thread
- loop do
- msg = queue.pop
-
- case msg
- when 'stop'
- # we need to properly stop the reading thread
- output_thread.kill
-
- # Then stop the node process
- Process.kill('KILL', process_thread.pid)
-
- # And we stop ourselves
- @running_thread.kill
- end
- end
- end
- end
-
- # wait for 10 seconds for the streaming server to start
- Timeout.timeout(10) do
- loop do
- break if @queue.pop == 'started'
- end
- end
- end
-
- def stop
- return unless @running_thread
-
- @queue.enq 'stop'
-
- # Wait for the thread to end
- @running_thread.join
- end
-end
-
-class SearchDataManager
- def prepare_test_data
- 4.times do |i|
- username = "search_test_account_#{i}"
- account = Fabricate.create(:account, username: username, indexable: i.even?, discoverable: i.even?, note: "Lover of #{i}.")
- 2.times do |j|
- Fabricate.create(:status, account: account, text: "#{username}'s #{j} post", visibility: j.even? ? :public : :private)
- end
- end
-
- 3.times do |i|
- Fabricate.create(:tag, name: "search_test_tag_#{i}")
- end
- end
-
- def indexes
- [
- AccountsIndex,
- PublicStatusesIndex,
- StatusesIndex,
- TagsIndex,
- ]
- end
-
- def populate_indexes
- indexes.each do |index_class|
- index_class.purge!
- index_class.import!
- end
- end
-
- def remove_indexes
- indexes.each(&:delete!)
- end
-
- def cleanup_test_data
- Status.destroy_all
- Account.destroy_all
- Tag.destroy_all
- end
-end
diff --git a/spec/support/search_data_manager.rb b/spec/support/search_data_manager.rb
new file mode 100644
index 0000000000..24c95ae069
--- /dev/null
+++ b/spec/support/search_data_manager.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+class SearchDataManager
+ def prepare_test_data
+ 4.times do |i|
+ username = "search_test_account_#{i}"
+ account = Fabricate.create(:account, username: username, indexable: i.even?, discoverable: i.even?, note: "Lover of #{i}.")
+ 2.times do |j|
+ Fabricate.create(:status, account: account, text: "#{username}'s #{j} post", visibility: j.even? ? :public : :private)
+ end
+ end
+
+ 3.times do |i|
+ Fabricate.create(:tag, name: "search_test_tag_#{i}")
+ end
+ end
+
+ def indexes
+ [
+ AccountsIndex,
+ PublicStatusesIndex,
+ StatusesIndex,
+ TagsIndex,
+ ]
+ end
+
+ def populate_indexes
+ indexes.each do |index_class|
+ index_class.purge!
+ index_class.import!
+ end
+ end
+
+ def remove_indexes
+ indexes.each(&:delete!)
+ end
+
+ def cleanup_test_data
+ Status.destroy_all
+ Account.destroy_all
+ Tag.destroy_all
+ end
+end
diff --git a/spec/support/streaming_server_manager.rb b/spec/support/streaming_server_manager.rb
new file mode 100644
index 0000000000..93e1a6d17f
--- /dev/null
+++ b/spec/support/streaming_server_manager.rb
@@ -0,0 +1,78 @@
+# frozen_string_literal: true
+
+class StreamingServerManager
+ @running_thread = nil
+
+ def initialize
+ at_exit { stop }
+ end
+
+ def start(port: 4020)
+ return if @running_thread
+
+ queue = Queue.new
+
+ @queue = queue
+
+ @running_thread = Thread.new do
+ Open3.popen2e(
+ {
+ 'REDIS_NAMESPACE' => ENV.fetch('REDIS_NAMESPACE'),
+ 'DB_NAME' => "#{ENV.fetch('DB_NAME', 'mastodon')}_test#{ENV.fetch('TEST_ENV_NUMBER', '')}",
+ 'RAILS_ENV' => ENV.fetch('RAILS_ENV', 'test'),
+ 'NODE_ENV' => ENV.fetch('STREAMING_NODE_ENV', 'development'),
+ 'PORT' => port.to_s,
+ },
+ 'node index.js', # must not call yarn here, otherwise it will fail because yarn does not send signals to its child process
+ chdir: Rails.root.join('streaming')
+ ) do |_stdin, stdout_err, process_thread|
+ status = :starting
+
+ # Spawn a thread to listen on streaming server output
+ output_thread = Thread.new do
+ stdout_err.each_line do |line|
+ Rails.logger.info "Streaming server: #{line}"
+
+ if status == :starting && line.match('Streaming API now listening on')
+ status = :started
+ @queue.enq 'started'
+ end
+ end
+ end
+
+ # And another thread to listen on commands from the main thread
+ loop do
+ msg = queue.pop
+
+ case msg
+ when 'stop'
+ # we need to properly stop the reading thread
+ output_thread.kill
+
+ # Then stop the node process
+ Process.kill('KILL', process_thread.pid)
+
+ # And we stop ourselves
+ @running_thread.kill
+ end
+ end
+ end
+ end
+
+ # wait for 10 seconds for the streaming server to start
+ Timeout.timeout(10) do
+ loop do
+ break if @queue.pop == 'started'
+ end
+ end
+ end
+
+ def stop
+ return unless @running_thread
+
+ @queue.enq 'stop'
+
+ # Wait for the thread to end
+ @running_thread.join
+ end
+end
diff --git a/yarn.lock b/yarn.lock
index 2b50d3a07e..0e0bc898b2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -29,7 +29,7 @@
jsonpointer "^5.0.0"
leven "^3.1.0"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.22.5":
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.22.5":
version "7.22.13"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
@@ -37,13 +37,6 @@
"@babel/highlight" "^7.22.13"
chalk "^2.4.2"
-"@babel/code-frame@^7.10.4":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658"
- integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==
- dependencies:
- "@babel/highlight" "^7.22.5"
-
"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.2":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc"
@@ -70,7 +63,7 @@
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@^7.23.0":
+"@babel/generator@^7.23.0", "@babel/generator@^7.7.2":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420"
integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==
@@ -80,16 +73,6 @@
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
-"@babel/generator@^7.7.2":
- version "7.22.10"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722"
- integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==
- dependencies:
- "@babel/types" "^7.22.10"
- "@jridgewell/gen-mapping" "^0.3.2"
- "@jridgewell/trace-mapping" "^0.3.17"
- jsesc "^2.5.1"
-
"@babel/helper-annotate-as-pure@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882"
@@ -185,14 +168,7 @@
dependencies:
"@babel/types" "^7.23.0"
-"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.10.4":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c"
- integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==
- dependencies:
- "@babel/types" "^7.22.5"
-
-"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5":
+"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0"
integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==
@@ -294,7 +270,7 @@
"@babel/traverse" "^7.23.2"
"@babel/types" "^7.23.0"
-"@babel/highlight@^7.22.13":
+"@babel/highlight@^7.22.13", "@babel/highlight@^7.22.5":
version "7.22.20"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54"
integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==
@@ -303,30 +279,11 @@
chalk "^2.4.2"
js-tokens "^4.0.0"
-"@babel/highlight@^7.22.5":
- version "7.22.10"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7"
- integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==
- dependencies:
- "@babel/helper-validator-identifier" "^7.22.5"
- chalk "^2.4.2"
- js-tokens "^4.0.0"
-
-"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0":
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.5", "@babel/parser@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
-"@babel/parser@^7.14.7":
- version "7.22.10"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55"
- integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==
-
-"@babel/parser@^7.22.5":
- version "7.22.16"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95"
- integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==
-
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15":
version "7.22.15"
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.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962"
@@ -1084,28 +1041,14 @@
dependencies:
regenerator-runtime "^0.12.0"
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.13.8", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.6.3":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200"
- integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==
- dependencies:
- regenerator-runtime "^0.13.11"
-
-"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.22.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.22.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885"
integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==
dependencies:
regenerator-runtime "^0.14.0"
-"@babel/runtime@^7.12.1":
- version "7.23.1"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d"
- integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==
- dependencies:
- regenerator-runtime "^0.14.0"
-
-"@babel/template@^7.22.15", "@babel/template@^7.22.5":
+"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==
@@ -1114,15 +1057,6 @@
"@babel/parser" "^7.22.15"
"@babel/types" "^7.22.15"
-"@babel/template@^7.3.3":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
- integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==
- dependencies:
- "@babel/code-frame" "^7.22.5"
- "@babel/parser" "^7.22.5"
- "@babel/types" "^7.22.5"
-
"@babel/traverse@7", "@babel/traverse@^7.23.2":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8"
@@ -1139,7 +1073,7 @@
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4":
+"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
@@ -1148,33 +1082,6 @@
"@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
-"@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.6":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe"
- integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==
- dependencies:
- "@babel/helper-string-parser" "^7.22.5"
- "@babel/helper-validator-identifier" "^7.22.5"
- to-fast-properties "^2.0.0"
-
-"@babel/types@^7.22.10":
- version "7.22.19"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684"
- integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==
- dependencies:
- "@babel/helper-string-parser" "^7.22.5"
- "@babel/helper-validator-identifier" "^7.22.19"
- to-fast-properties "^2.0.0"
-
-"@babel/types@^7.3.3":
- version "7.22.10"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03"
- integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==
- dependencies:
- "@babel/helper-string-parser" "^7.22.5"
- "@babel/helper-validator-identifier" "^7.22.5"
- to-fast-properties "^2.0.0"
-
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
@@ -1367,6 +1274,14 @@
"@formatjs/intl-localematcher" "0.4.2"
tslib "^2.4.0"
+"@formatjs/ecma402-abstract@1.17.3":
+ version "1.17.3"
+ resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.17.3.tgz#73ce8aecb1ff5572046564c833786504dfafbb06"
+ integrity sha512-2Q4hmKQ6CM30mRG/YMdSBW8LXf32BfuOb1FZgG+uVWPC/SQMoiVFz5JaeOukt96v6TZ4ddE+bHCmd611PW38QA==
+ dependencies:
+ "@formatjs/intl-localematcher" "0.5.0"
+ tslib "^2.4.0"
+
"@formatjs/fast-memoize@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz#33bd616d2e486c3e8ef4e68c99648c196887802b"
@@ -1383,6 +1298,15 @@
"@formatjs/icu-skeleton-parser" "1.6.2"
tslib "^2.4.0"
+"@formatjs/icu-messageformat-parser@2.7.1":
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.1.tgz#3968a48fdf4064cdd2d0b751afb8ed6d55574019"
+ integrity sha512-ErnXyRdk8AlpGcKskKVYn23aAlWXhI1kt5ek2o3pJwVeMTcrosSESQ8baztdTtJjfQHlB4NBeocfRA5C6DKv2g==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.17.3"
+ "@formatjs/icu-skeleton-parser" "1.6.3"
+ tslib "^2.4.0"
+
"@formatjs/icu-skeleton-parser@1.6.2":
version "1.6.2"
resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.6.2.tgz#00303034dc08583973c8aa67b96534c49c0bad8d"
@@ -1391,22 +1315,30 @@
"@formatjs/ecma402-abstract" "1.17.2"
tslib "^2.4.0"
-"@formatjs/intl-displaynames@6.6.1":
- version "6.6.1"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.6.1.tgz#2099dbd0d3dffba3176d7b470c73bdd578850d76"
- integrity sha512-TIPaDu0SlwJUXlIyeSL9052jrUC4QviLnvUEJ53Ldc3Q4nZJnT2wD8NHIroTOYX9lgp5m3BeTlhpRcsnuExDkA==
+"@formatjs/icu-skeleton-parser@1.6.3":
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.6.3.tgz#3167a9f4a7a8ca2298ac74e5d11c4e289f61d93b"
+ integrity sha512-Viggz4Pic7oC4uR8z2VroL8H9boiUTTB0TqEsiRb6DHZv7QEcg1BoVQZBkBdLmvxhBS7nwBNrTdbaiW8GOV58Q==
dependencies:
- "@formatjs/ecma402-abstract" "1.17.2"
- "@formatjs/intl-localematcher" "0.4.2"
+ "@formatjs/ecma402-abstract" "1.17.3"
tslib "^2.4.0"
-"@formatjs/intl-listformat@7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.5.0.tgz#dbccf2e0f07792aa1c273702796bdad061dc27ae"
- integrity sha512-n9FsXGl1T2ZbX6wSyrzCDJHrbJR0YJ9ZNsAqUvHXfbY3nsOmGnSTf5+bkuIp1Xiywu7m1X1Pfm/Ngp/yK1H84A==
+"@formatjs/intl-displaynames@6.6.2":
+ version "6.6.2"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.6.2.tgz#3d06089bc4ea1840a41445d42aaa387717d621c1"
+ integrity sha512-8wenvLpInbVEPoVDHiG1QC/dE16io3fptVanMr2jKUqr3938UziygflnUqPlG7U6AHRbU7geCFthfZt8x2NpsA==
dependencies:
- "@formatjs/ecma402-abstract" "1.17.2"
- "@formatjs/intl-localematcher" "0.4.2"
+ "@formatjs/ecma402-abstract" "1.17.3"
+ "@formatjs/intl-localematcher" "0.5.0"
+ tslib "^2.4.0"
+
+"@formatjs/intl-listformat@7.5.1":
+ version "7.5.1"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.5.1.tgz#a578bd88879fd66793a0cba4038240d99d94f73c"
+ integrity sha512-J6heE28cikJ2cUZ7Mvmets418lE96k5OcbgDYQkXDFHVbRnUKCHQwRAXKRCPFEGDrEmcvtqUj7NmZEJYbsJdqQ==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.17.3"
+ "@formatjs/intl-localematcher" "0.5.0"
tslib "^2.4.0"
"@formatjs/intl-localematcher@0.4.2":
@@ -1416,26 +1348,33 @@
dependencies:
tslib "^2.4.0"
-"@formatjs/intl-pluralrules@^5.2.2":
- version "5.2.7"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-5.2.7.tgz#f13ad9760f859ca67d2faddcac0d76a5b8b955f6"
- integrity sha512-KmLGzj8VUOhMjlFP0uEOfEgH9xkRAhDNBVmsVGZnE2EIsbpVG0GDG6DHuqnyC0KYXy7UfU/XuE0H1Bo+Mr35DQ==
+"@formatjs/intl-localematcher@0.5.0":
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.0.tgz#9c8bbba9f698efba732facac1a695ce8dd08aa53"
+ integrity sha512-K1Xpg/8oyfCMxisJQa/fILoeoeyndcM0wcN8QiNG/uM5OAe1BcO1+2yd0gIboDI2tRJEsUi/sSBEYPbgkIdq4A==
dependencies:
- "@formatjs/ecma402-abstract" "1.17.2"
- "@formatjs/intl-localematcher" "0.4.2"
tslib "^2.4.0"
-"@formatjs/intl@2.9.5":
- version "2.9.5"
- resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.9.5.tgz#30087e97db940038ede523439c2fb2bdf84989dd"
- integrity sha512-WEdEv8Jf2nKBErTK4MJ2xCesUJVHH9iunXzfHzZo4tnn2NSj48g04FNH9w17XDpEbj9KEM39fLkwBz7ay/ErPQ==
+"@formatjs/intl-pluralrules@^5.2.2":
+ version "5.2.8"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-5.2.8.tgz#830af77f5f377afdc43c439729ed60c4bcc25ee5"
+ integrity sha512-1pNtsZkAa3Ck1JKKydRwlys7D+wAkclWYbWdyNocoY8+UL+jjMQrh7LzHCTxsZbwWDADouWuVyeWnwEMl5wkSw==
dependencies:
- "@formatjs/ecma402-abstract" "1.17.2"
+ "@formatjs/ecma402-abstract" "1.17.3"
+ "@formatjs/intl-localematcher" "0.5.0"
+ tslib "^2.4.0"
+
+"@formatjs/intl@2.9.6":
+ version "2.9.6"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.9.6.tgz#af0204d590c670502cf6801671dc156d5040fc37"
+ integrity sha512-pHvVycu4g1S8zsZhYm0naf/ODCsDXHw00ITMMUM9TK9MYa8zGkf4W5gdItVbUX7elYN3JdDwp0d5fLNBBljhgQ==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.17.3"
"@formatjs/fast-memoize" "2.2.0"
- "@formatjs/icu-messageformat-parser" "2.7.0"
- "@formatjs/intl-displaynames" "6.6.1"
- "@formatjs/intl-listformat" "7.5.0"
- intl-messageformat "10.5.4"
+ "@formatjs/icu-messageformat-parser" "2.7.1"
+ "@formatjs/intl-displaynames" "6.6.2"
+ "@formatjs/intl-listformat" "7.5.1"
+ intl-messageformat "10.5.5"
tslib "^2.4.0"
"@formatjs/ts-transformer@3.13.6":
@@ -1451,6 +1390,19 @@
tslib "^2.4.0"
typescript "5"
+"@formatjs/ts-transformer@3.13.7":
+ version "3.13.7"
+ resolved "https://registry.yarnpkg.com/@formatjs/ts-transformer/-/ts-transformer-3.13.7.tgz#8dab6789ae36de87a5212b13bfbc32ba1bf75dd9"
+ integrity sha512-yDuLP68gPT+EGm3LLIVfZ7cRRynFx2MIhF5V1lFTzEMxNvHANhal7WRHYieDVMiPsI0vd84H+hD77hY/5KfJmw==
+ dependencies:
+ "@formatjs/icu-messageformat-parser" "2.7.1"
+ "@types/json-stable-stringify" "^1.0.32"
+ "@types/node" "14 || 16 || 17"
+ chalk "^4.0.0"
+ json-stable-stringify "^1.0.1"
+ tslib "^2.4.0"
+ typescript "5"
+
"@gamestdio/websocket@^0.3.2":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@gamestdio/websocket/-/websocket-0.3.2.tgz#321ba0976ee30fd14e51dbf8faa85ce7b325f76a"
@@ -1574,14 +1526,7 @@
"@types/node" "*"
jest-mock "^29.6.2"
-"@jest/expect-utils@^29.6.2":
- version "29.6.4"
- resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.4.tgz#17c7dfe6cec106441f218b0aff4b295f98346679"
- integrity sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==
- dependencies:
- jest-get-type "^29.6.3"
-
-"@jest/expect-utils@^29.7.0":
+"@jest/expect-utils@^29.6.2", "@jest/expect-utils@^29.7.0":
version "29.7.0"
resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6"
integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==
@@ -1749,15 +1694,7 @@
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
-"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18":
- version "0.3.19"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811"
- integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==
- dependencies:
- "@jridgewell/resolve-uri" "^3.1.0"
- "@jridgewell/sourcemap-codec" "^1.4.14"
-
-"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
+"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9":
version "0.3.20"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f"
integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==
@@ -2126,20 +2063,13 @@
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
-"@types/babel__traverse@*", "@types/babel__traverse@^7.1.7":
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6", "@types/babel__traverse@^7.1.7":
version "7.20.3"
resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.3.tgz#a971aa47441b28ef17884ff945d0551265a2d058"
integrity sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==
dependencies:
"@babel/types" "^7.20.7"
-"@types/babel__traverse@^7.0.6":
- version "7.20.1"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf"
- integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==
- dependencies:
- "@babel/types" "^7.20.7"
-
"@types/body-parser@*":
version "1.19.4"
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.4.tgz#78ad68f1f79eb851aa3634db0c7f57f6f601b462"
@@ -2291,16 +2221,11 @@
"@types/tough-cookie" "*"
parse5 "^7.0.0"
-"@types/json-schema@*", "@types/json-schema@^7.0.12":
+"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8":
version "7.0.14"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1"
integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==
-"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8":
- version "7.0.12"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb"
- integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==
-
"@types/json-stable-stringify@^1.0.32":
version "1.0.35"
resolved "https://registry.yarnpkg.com/@types/json-stable-stringify/-/json-stable-stringify-1.0.35.tgz#9cea8628b50a093ae00a7e73de49676f2f9ade27"
@@ -2737,7 +2662,7 @@
semver "^7.5.4"
ts-api-utils "^1.0.1"
-"@typescript-eslint/utils@6.9.1":
+"@typescript-eslint/utils@6.9.1", "@typescript-eslint/utils@^6.5.0":
version "6.9.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.9.1.tgz#763da41281ef0d16974517b5f0d02d85897a1c1e"
integrity sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==
@@ -2750,19 +2675,6 @@
"@typescript-eslint/typescript-estree" "6.9.1"
semver "^7.5.4"
-"@typescript-eslint/utils@^6.5.0":
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.8.0.tgz#d42939c2074c6b59844d0982ce26a51d136c4029"
- integrity sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==
- dependencies:
- "@eslint-community/eslint-utils" "^4.4.0"
- "@types/json-schema" "^7.0.12"
- "@types/semver" "^7.5.0"
- "@typescript-eslint/scope-manager" "6.8.0"
- "@typescript-eslint/types" "6.8.0"
- "@typescript-eslint/typescript-estree" "6.8.0"
- semver "^7.5.4"
-
"@typescript-eslint/visitor-keys@6.8.0":
version "6.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz#cffebed56ae99c45eba901c378a6447b06be58b8"
@@ -2982,12 +2894,7 @@ acorn@^6.4.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
-acorn@^8.0.4, acorn@^8.1.0, acorn@^8.8.1, acorn@^8.8.2:
- version "8.10.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
- integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
-
-acorn@^8.9.0:
+acorn@^8.0.4, acorn@^8.1.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0:
version "8.11.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
@@ -3151,20 +3058,13 @@ aria-query@5.1.3:
dependencies:
deep-equal "^2.0.5"
-aria-query@^5.0.0:
+aria-query@^5.0.0, aria-query@^5.1.3:
version "5.3.0"
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
dependencies:
dequal "^2.0.3"
-aria-query@^5.1.3:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.2.1.tgz#bc285d9d654d1df121bcd0c134880d415ca67c15"
- integrity sha512-7uFg4b+lETFgdaJyETnILsXgnnzVnkHcgRbwbPwevm5x/LmUlt3MjczMRe1zg824iBgXZNRPTBftNYyRSKLp2g==
- dependencies:
- dequal "^2.0.3"
-
arr-diff@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
@@ -3198,18 +3098,7 @@ array-flatten@^2.1.0:
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
-array-includes@^3.1.5, array-includes@^3.1.6:
- version "3.1.6"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
- integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
- get-intrinsic "^1.1.3"
- is-string "^1.0.7"
-
-array-includes@^3.1.7:
+array-includes@^3.1.5, array-includes@^3.1.6, array-includes@^3.1.7:
version "3.1.7"
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda"
integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==
@@ -3253,17 +3142,7 @@ array.prototype.findlastindex@^1.2.3:
es-shim-unscopables "^1.0.0"
get-intrinsic "^1.2.1"
-array.prototype.flat@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"
- integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
- es-shim-unscopables "^1.0.0"
-
-array.prototype.flat@^1.3.2:
+array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18"
integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==
@@ -3273,17 +3152,7 @@ array.prototype.flat@^1.3.2:
es-abstract "^1.22.1"
es-shim-unscopables "^1.0.0"
-array.prototype.flatmap@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183"
- integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
- es-shim-unscopables "^1.0.0"
-
-array.prototype.flatmap@^1.3.2:
+array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527"
integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==
@@ -3315,19 +3184,7 @@ array.prototype.tosorted@^1.1.1:
es-shim-unscopables "^1.0.0"
get-intrinsic "^1.1.3"
-arraybuffer.prototype.slice@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb"
- integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==
- dependencies:
- array-buffer-byte-length "^1.0.0"
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- get-intrinsic "^1.2.1"
- is-array-buffer "^3.0.2"
- is-shared-array-buffer "^1.0.2"
-
-arraybuffer.prototype.slice@^1.0.2:
+arraybuffer.prototype.slice@^1.0.1, arraybuffer.prototype.slice@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12"
integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==
@@ -3501,17 +3358,17 @@ babel-loader@^8.3.0:
schema-utils "^2.6.5"
babel-plugin-formatjs@^10.5.1:
- version "10.5.7"
- resolved "https://registry.yarnpkg.com/babel-plugin-formatjs/-/babel-plugin-formatjs-10.5.7.tgz#be31824cfb8e130166a79059b2946dbb430b794b"
- integrity sha512-mJeRdLfmVVqtKWWuEyLZgd2HYEiTv9aCNZT9XAmEg5qmMTR2GA7DrX1H9G4I1FfagsX+7dI7JUvhfbqj0CSvZA==
+ version "10.5.8"
+ resolved "https://registry.yarnpkg.com/babel-plugin-formatjs/-/babel-plugin-formatjs-10.5.8.tgz#575d36815136013171737c4c837498896cf3abec"
+ integrity sha512-pK2DW1vhDtnxtMrqh/rCNn4u8dYSD45U3i3zCB8+Lw45FoV8poiDrejTgvJSvyynk+H6LT0VYMdT6tjtbnRocg==
dependencies:
"@babel/core" "^7.10.4"
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-jsx" "7"
"@babel/traverse" "7"
"@babel/types" "^7.12.11"
- "@formatjs/icu-messageformat-parser" "2.7.0"
- "@formatjs/ts-transformer" "3.13.6"
+ "@formatjs/icu-messageformat-parser" "2.7.1"
+ "@formatjs/ts-transformer" "3.13.7"
"@types/babel__core" "^7.1.7"
"@types/babel__helper-plugin-utils" "^7.10.0"
"@types/babel__traverse" "^7.1.7"
@@ -3859,17 +3716,7 @@ browserify-zlib@^0.2.0:
dependencies:
pako "~1.0.5"
-browserslist@^4.0.0, browserslist@^4.21.4:
- version "4.21.8"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.8.tgz#db2498e1f4b80ed199c076248a094935860b6017"
- integrity sha512-j+7xYe+v+q2Id9qbBeCI8WX5NmZSRe8es1+0xntD/+gaWXznP8tFEkv5IgSaHf5dS1YwVMbX/4W6m937mj+wQw==
- dependencies:
- caniuse-lite "^1.0.30001502"
- electron-to-chromium "^1.4.428"
- node-releases "^2.0.12"
- update-browserslist-db "^1.0.11"
-
-browserslist@^4.21.10, browserslist@^4.21.9, browserslist@^4.22.1:
+browserslist@^4.0.0, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9, browserslist@^4.22.1:
version "4.22.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619"
integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==
@@ -3996,15 +3843,7 @@ cache-base@^1.0.1:
union-value "^1.0.0"
unset-value "^1.0.0"
-call-bind@^1.0.0, call-bind@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
- integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
- dependencies:
- function-bind "^1.1.1"
- get-intrinsic "^1.0.2"
-
-call-bind@^1.0.4, call-bind@^1.0.5:
+call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513"
integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==
@@ -4048,25 +3887,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
-caniuse-lite@^1.0.0:
- version "1.0.30001503"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001503.tgz#88b6ff1b2cf735f1f3361dc1a15b59f0561aa398"
- integrity sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==
-
-caniuse-lite@^1.0.30001502:
- version "1.0.30001515"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b"
- integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==
-
-caniuse-lite@^1.0.30001538:
- version "1.0.30001538"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz#9dbc6b9af1ff06b5eb12350c2012b3af56744f3f"
- integrity sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==
-
-caniuse-lite@^1.0.30001541:
- version "1.0.30001553"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001553.tgz#e64e7dc8fd4885cd246bb476471420beb5e474b5"
- integrity sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001502, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541:
+ version "1.0.30001561"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz#752f21f56f96f1b1a52e97aae98c57c562d5d9da"
+ integrity sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==
chalk@5.2.0:
version "5.2.0"
@@ -5209,15 +5033,10 @@ ejs@^3.1.6:
dependencies:
jake "^10.8.5"
-electron-to-chromium@^1.4.428:
- version "1.4.457"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.457.tgz#3fdc7b4f97d628ac6b51e8b4b385befb362fe343"
- integrity sha512-/g3UyNDmDd6ebeWapmAoiyy+Sy2HyJ+/X8KyvNeHfKRFfHaA2W8oF5fxD5F3tjBDcjpwo0iek6YNgxNXDBoEtA==
-
-electron-to-chromium@^1.4.535:
- version "1.4.563"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.563.tgz#dabb424202754c1fed2d2938ff564b23d3bbf0d3"
- integrity sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==
+electron-to-chromium@^1.4.428, electron-to-chromium@^1.4.535:
+ version "1.4.576"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.576.tgz#0c6940fdc0d60f7e34bd742b29d8fa847c9294d1"
+ integrity sha512-yXsZyXJfAqzWk1WKryr0Wl0MN2D47xodPvEEwlVePBnhU5E7raevLQR+E6b9JAD3GfL/7MbAL9ZtWQQPcLx7wA==
elliptic@^6.5.3:
version "6.5.4"
@@ -5331,52 +5150,7 @@ error-stack-parser@^2.0.6:
dependencies:
stackframe "^1.3.4"
-es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2, es-abstract@^1.21.3:
- version "1.22.1"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc"
- integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==
- dependencies:
- array-buffer-byte-length "^1.0.0"
- arraybuffer.prototype.slice "^1.0.1"
- available-typed-arrays "^1.0.5"
- call-bind "^1.0.2"
- es-set-tostringtag "^2.0.1"
- es-to-primitive "^1.2.1"
- function.prototype.name "^1.1.5"
- get-intrinsic "^1.2.1"
- get-symbol-description "^1.0.0"
- globalthis "^1.0.3"
- gopd "^1.0.1"
- has "^1.0.3"
- has-property-descriptors "^1.0.0"
- has-proto "^1.0.1"
- has-symbols "^1.0.3"
- internal-slot "^1.0.5"
- is-array-buffer "^3.0.2"
- is-callable "^1.2.7"
- is-negative-zero "^2.0.2"
- is-regex "^1.1.4"
- is-shared-array-buffer "^1.0.2"
- is-string "^1.0.7"
- is-typed-array "^1.1.10"
- is-weakref "^1.0.2"
- object-inspect "^1.12.3"
- object-keys "^1.1.1"
- object.assign "^4.1.4"
- regexp.prototype.flags "^1.5.0"
- safe-array-concat "^1.0.0"
- safe-regex-test "^1.0.0"
- string.prototype.trim "^1.2.7"
- string.prototype.trimend "^1.0.6"
- string.prototype.trimstart "^1.0.6"
- typed-array-buffer "^1.0.0"
- typed-array-byte-length "^1.0.0"
- typed-array-byte-offset "^1.0.0"
- typed-array-length "^1.0.4"
- unbox-primitive "^1.0.2"
- which-typed-array "^1.1.10"
-
-es-abstract@^1.22.1:
+es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2, es-abstract@^1.21.3, es-abstract@^1.22.1:
version "1.22.3"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32"
integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==
@@ -5892,7 +5666,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2:
dependencies:
homedir-polyfill "^1.0.1"
-expect@^29.0.0:
+expect@^29.0.0, expect@^29.6.2:
version "29.7.0"
resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc"
integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==
@@ -5903,18 +5677,6 @@ expect@^29.0.0:
jest-message-util "^29.7.0"
jest-util "^29.7.0"
-expect@^29.6.2:
- version "29.6.2"
- resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.2.tgz#7b08e83eba18ddc4a2cf62b5f2d1918f5cd84521"
- integrity sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==
- dependencies:
- "@jest/expect-utils" "^29.6.2"
- "@types/node" "*"
- jest-get-type "^29.4.3"
- jest-matcher-utils "^29.6.2"
- jest-message-util "^29.6.2"
- jest-util "^29.6.2"
-
express@^4.17.1, express@^4.18.2:
version "4.18.2"
resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
@@ -6171,12 +5933,7 @@ flatted@^3.2.9:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-follow-redirects@^1.0.0:
- version "1.15.2"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
- integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
-
-follow-redirects@^1.15.0:
+follow-redirects@^1.0.0, follow-redirects@^1.15.0:
version "1.15.3"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a"
integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==
@@ -6267,12 +6024,7 @@ fsevents@^1.2.7:
bindings "^1.5.0"
nan "^2.12.1"
-fsevents@^2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
- integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-
-fsevents@~2.3.2:
+fsevents@^2.3.2, fsevents@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
@@ -6282,17 +6034,7 @@ function-bind@^1.1.1, function-bind@^1.1.2:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-function.prototype.name@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
- integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.19.0"
- functions-have-names "^1.2.2"
-
-function.prototype.name@^1.1.6:
+function.prototype.name@^1.1.5, function.prototype.name@^1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd"
integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==
@@ -6336,17 +6078,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
- integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
- dependencies:
- function-bind "^1.1.1"
- has "^1.0.3"
- has-proto "^1.0.1"
- has-symbols "^1.0.3"
-
-get-intrinsic@^1.2.2:
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b"
integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==
@@ -6998,14 +6730,14 @@ intersection-observer@^0.12.0:
resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.12.2.tgz#4a45349cc0cd91916682b1f44c28d7ec737dc375"
integrity sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==
-intl-messageformat@10.5.4, intl-messageformat@^10.3.5:
- version "10.5.4"
- resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.4.tgz#7b212b083f1b354d7e282518e78057e025134af9"
- integrity sha512-z+hrFdiJ/heRYlzegrdFYqU1m/KOMOVMqNilIArj+PbsuU8TNE7v4TWdQgSoxlxbT4AcZH3Op3/Fu15QTp+W1w==
+intl-messageformat@10.5.5, intl-messageformat@^10.3.5:
+ version "10.5.5"
+ resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.5.tgz#cb7979887cd9d3b02a23ae8baa78ef93b2f5b8d6"
+ integrity sha512-sF+cJCfMn+kGcSeGGRcB1UpBH0/+Ko2KByHj2RpL2qIkRvsrnuDl8zufEkvk+GPosk932C6W1Kq24xWaw+2jDA==
dependencies:
- "@formatjs/ecma402-abstract" "1.17.2"
+ "@formatjs/ecma402-abstract" "1.17.3"
"@formatjs/fast-memoize" "2.2.0"
- "@formatjs/icu-messageformat-parser" "2.7.0"
+ "@formatjs/icu-messageformat-parser" "2.7.1"
tslib "^2.4.0"
invariant@^2.2.2, invariant@^2.2.4:
@@ -7134,20 +6866,13 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
-is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1:
+is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0, is-core-module@^2.9.0:
version "2.13.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
dependencies:
hasown "^2.0.0"
-is-core-module@^2.5.0, is-core-module@^2.9.0:
- version "2.13.0"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db"
- integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==
- dependencies:
- has "^1.0.3"
-
is-data-descriptor@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
@@ -7646,17 +7371,7 @@ jest-config@^29.6.2:
slash "^3.0.0"
strip-json-comments "^3.1.1"
-jest-diff@^29.6.2:
- version "29.6.4"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.4.tgz#85aaa6c92a79ae8cd9a54ebae8d5b6d9a513314a"
- integrity sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==
- dependencies:
- chalk "^4.0.0"
- diff-sequences "^29.6.3"
- jest-get-type "^29.6.3"
- pretty-format "^29.6.3"
-
-jest-diff@^29.6.4, jest-diff@^29.7.0:
+jest-diff@^29.6.2, jest-diff@^29.6.4, jest-diff@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a"
integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==
@@ -7742,17 +7457,7 @@ jest-leak-detector@^29.6.2:
jest-get-type "^29.4.3"
pretty-format "^29.6.2"
-jest-matcher-utils@^29.6.2:
- version "29.6.4"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz#327db7ababea49455df3b23e5d6109fe0c709d24"
- integrity sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==
- dependencies:
- chalk "^4.0.0"
- jest-diff "^29.6.4"
- jest-get-type "^29.6.3"
- pretty-format "^29.6.3"
-
-jest-matcher-utils@^29.7.0:
+jest-matcher-utils@^29.6.2, jest-matcher-utils@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12"
integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==
@@ -7762,22 +7467,7 @@ jest-matcher-utils@^29.7.0:
jest-get-type "^29.6.3"
pretty-format "^29.7.0"
-jest-message-util@^29.6.2:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.3.tgz#bce16050d86801b165f20cfde34dc01d3cf85fbf"
- integrity sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@jest/types" "^29.6.3"
- "@types/stack-utils" "^2.0.0"
- chalk "^4.0.0"
- graceful-fs "^4.2.9"
- micromatch "^4.0.4"
- pretty-format "^29.6.3"
- slash "^3.0.0"
- stack-utils "^2.0.3"
-
-jest-message-util@^29.7.0:
+jest-message-util@^29.6.2, jest-message-util@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3"
integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==
@@ -7915,19 +7605,7 @@ jest-snapshot@^29.6.2:
pretty-format "^29.6.2"
semver "^7.5.3"
-jest-util@^29.6.2:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.3.tgz#e15c3eac8716440d1ed076f09bc63ace1aebca63"
- integrity sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==
- dependencies:
- "@jest/types" "^29.6.3"
- "@types/node" "*"
- chalk "^4.0.0"
- ci-info "^3.2.0"
- graceful-fs "^4.2.9"
- picomatch "^2.2.3"
-
-jest-util@^29.7.0:
+jest-util@^29.6.2, jest-util@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc"
integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==
@@ -8179,7 +7857,7 @@ jsonpointer@^5.0.0:
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==
-"jsx-ast-utils@^2.4.1 || ^3.0.0":
+"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3:
version "3.3.5"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a"
integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==
@@ -8189,14 +7867,6 @@ jsonpointer@^5.0.0:
object.assign "^4.1.4"
object.values "^1.1.6"
-jsx-ast-utils@^3.3.3:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea"
- integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==
- dependencies:
- array-includes "^3.1.5"
- object.assign "^4.1.3"
-
keycode@^2.1.7:
version "2.2.1"
resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.1.tgz#09c23b2be0611d26117ea2501c2c391a01f39eff"
@@ -9070,16 +8740,11 @@ nth-check@^2.0.1:
dependencies:
boolbase "^1.0.0"
-nwsapi@^2.2.2:
+nwsapi@^2.2.2, nwsapi@^2.2.4:
version "2.2.7"
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
-nwsapi@^2.2.4:
- version "2.2.5"
- resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.5.tgz#a52744c61b3889dd44b0a158687add39b8d935e2"
- integrity sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==
-
object-assign@^4.0.1, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -9094,12 +8759,7 @@ object-copy@^0.1.0:
define-property "^0.2.5"
kind-of "^3.0.3"
-object-inspect@^1.12.3, object-inspect@^1.9.0:
- version "1.12.3"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
- integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
-
-object-inspect@^1.13.1:
+object-inspect@^1.12.3, object-inspect@^1.13.1, object-inspect@^1.9.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
@@ -9143,16 +8803,7 @@ object.entries@^1.1.6:
define-properties "^1.1.4"
es-abstract "^1.20.4"
-object.fromentries@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73"
- integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
-
-object.fromentries@^2.0.7:
+object.fromentries@^2.0.6, object.fromentries@^2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616"
integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==
@@ -9197,16 +8848,7 @@ object.pick@^1.3.0:
dependencies:
isobject "^3.0.1"
-object.values@^1.1.0, object.values@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d"
- integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
-
-object.values@^1.1.7:
+object.values@^1.1.0, object.values@^1.1.6, object.values@^1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a"
integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==
@@ -10030,7 +9672,7 @@ pretty-format@^27.0.2:
ansi-styles "^5.0.0"
react-is "^17.0.1"
-pretty-format@^29.0.0, pretty-format@^29.6.3, pretty-format@^29.7.0:
+pretty-format@^29.0.0, pretty-format@^29.6.2, pretty-format@^29.6.3, pretty-format@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812"
integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
@@ -10039,15 +9681,6 @@ pretty-format@^29.0.0, pretty-format@^29.6.3, pretty-format@^29.7.0:
ansi-styles "^5.0.0"
react-is "^18.0.0"
-pretty-format@^29.6.2:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.3.tgz#d432bb4f1ca6f9463410c3fb25a0ba88e594ace7"
- integrity sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==
- dependencies:
- "@jest/schemas" "^29.6.3"
- ansi-styles "^5.0.0"
- react-is "^18.0.0"
-
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -10278,19 +9911,19 @@ react-immutable-pure-component@^2.2.2:
integrity sha512-vkgoMJUDqHZfXXnjVlG3keCxSO/U6WeDQ5/Sl0GK2cH8TOxEzQ5jXqDXHEL/jqk6fsNxV05oH5kD7VNMUE2k+A==
react-intl@^6.4.2:
- version "6.5.1"
- resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.5.1.tgz#c44f67798e25b2778b2091563e004f54e8dc911b"
- integrity sha512-mKxfH7GV5P4dJcQmbq/xU8FVBl//xRudXgS5r1Gt62NEr+T8pnzQZZ2th1jP5BQ+Ne/3kS3uYpFcynj5KyXVhg==
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.5.2.tgz#9a3f79425f3c8d3732482142e094c846f035e64c"
+ integrity sha512-o6rmAViKusLQMVu2bKAULBiQVdkk88TurPUAJiNxUAmoxubSu+pAYjLpOuByM52HSLOKPrRvDXQrrCOSykQusw==
dependencies:
- "@formatjs/ecma402-abstract" "1.17.2"
- "@formatjs/icu-messageformat-parser" "2.7.0"
- "@formatjs/intl" "2.9.5"
- "@formatjs/intl-displaynames" "6.6.1"
- "@formatjs/intl-listformat" "7.5.0"
+ "@formatjs/ecma402-abstract" "1.17.3"
+ "@formatjs/icu-messageformat-parser" "2.7.1"
+ "@formatjs/intl" "2.9.6"
+ "@formatjs/intl-displaynames" "6.6.2"
+ "@formatjs/intl-listformat" "7.5.1"
"@types/hoist-non-react-statics" "^3.3.1"
"@types/react" "16 || 17 || 18"
hoist-non-react-statics "^3.3.2"
- intl-messageformat "10.5.4"
+ intl-messageformat "10.5.5"
tslib "^2.4.0"
"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.2.0:
@@ -10400,9 +10033,9 @@ react-router@5.3.4, react-router@^5.3.4:
tiny-warning "^1.0.0"
react-select@*, react-select@^5.7.3:
- version "5.7.7"
- resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.7.tgz#dbade9dbf711ef2a181970c10f8ab319ac37fbd0"
- integrity sha512-HhashZZJDRlfF/AKj0a0Lnfs3sRdw/46VJIRd8IbB9/Ovr74+ZIwkAdSBjSPXsFMG+u72c5xShqwLSKIJllzqw==
+ version "5.8.0"
+ resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.8.0.tgz#bd5c467a4df223f079dd720be9498076a3f085b5"
+ integrity sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==
dependencies:
"@babel/runtime" "^7.12.0"
"@emotion/cache" "^11.4.0"
@@ -10673,16 +10306,7 @@ regex-not@^1.0.0, regex-not@^1.0.2:
extend-shallow "^3.0.2"
safe-regex "^1.1.0"
-regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"
- integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- functions-have-names "^1.2.3"
-
-regexp.prototype.flags@^1.5.1:
+regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e"
integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==
@@ -10817,7 +10441,7 @@ resolve.exports@^2.0.0:
resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800"
integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==
-resolve@^1.14.2, resolve@^1.19.0:
+resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.4:
version "1.22.8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -10826,15 +10450,6 @@ resolve@^1.14.2, resolve@^1.19.0:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
-resolve@^1.20.0, resolve@^1.22.4:
- version "1.22.4"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34"
- integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==
- dependencies:
- is-core-module "^2.13.0"
- path-parse "^1.0.7"
- supports-preserve-symlinks-flag "^1.0.0"
-
resolve@^2.0.0-next.4:
version "2.0.0-next.4"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660"
@@ -10944,17 +10559,7 @@ rxjs@^7.8.0:
dependencies:
tslib "^2.1.0"
-safe-array-concat@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060"
- integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==
- dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.2.0"
- has-symbols "^1.0.3"
- isarray "^2.0.5"
-
-safe-array-concat@^1.0.1:
+safe-array-concat@^1.0.0, safe-array-concat@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c"
integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==
@@ -11091,14 +10696,7 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.2:
- version "7.5.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec"
- integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==
- dependencies:
- lru-cache "^6.0.0"
-
-semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4:
+semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4:
version "7.5.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
@@ -11660,16 +11258,7 @@ string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8:
regexp.prototype.flags "^1.4.3"
side-channel "^1.0.4"
-string.prototype.trim@^1.2.7:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533"
- integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
-
-string.prototype.trim@^1.2.8:
+string.prototype.trim@^1.2.7, string.prototype.trim@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd"
integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==
@@ -11678,16 +11267,7 @@ string.prototype.trim@^1.2.8:
define-properties "^1.2.0"
es-abstract "^1.22.1"
-string.prototype.trimend@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
- integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
-
-string.prototype.trimend@^1.0.7:
+string.prototype.trimend@^1.0.6, string.prototype.trimend@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e"
integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==
@@ -11696,16 +11276,7 @@ string.prototype.trimend@^1.0.7:
define-properties "^1.2.0"
es-abstract "^1.22.1"
-string.prototype.trimstart@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
- integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
-
-string.prototype.trimstart@^1.0.7:
+string.prototype.trimstart@^1.0.6, string.prototype.trimstart@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298"
integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==
@@ -11745,6 +11316,7 @@ stringz@^2.1.0:
char-regex "^1.0.2"
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ name strip-ansi-cjs
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -12094,17 +11666,7 @@ terser-webpack-plugin@^1.4.3, terser-webpack-plugin@^4.2.3:
terser "^5.3.4"
webpack-sources "^1.4.3"
-terser@^5.0.0:
- version "5.18.0"
- resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.0.tgz#dc811fb8e3481a875d545bda247c8730ee4dc76b"
- integrity sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA==
- dependencies:
- "@jridgewell/source-map" "^0.3.3"
- acorn "^8.8.2"
- commander "^2.20.0"
- source-map-support "~0.5.20"
-
-terser@^5.3.4:
+terser@^5.0.0, terser@^5.3.4:
version "5.19.4"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.4.tgz#941426fa482bf9b40a0308ab2b3cd0cf7c775ebd"
integrity sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==
@@ -12302,16 +11864,11 @@ tsconfig-paths@^3.14.2:
minimist "^1.2.6"
strip-bom "^3.0.0"
-tslib@2.6.2, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.0:
+tslib@2.6.2, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.0:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
-tslib@^2.1.0:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410"
- integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==
-
tty-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -13026,18 +12583,7 @@ which-module@^2.0.0:
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409"
integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==
-which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.9:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a"
- integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==
- dependencies:
- available-typed-arrays "^1.0.5"
- call-bind "^1.0.2"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-tostringtag "^1.0.0"
-
-which-typed-array@^1.1.13:
+which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.9:
version "1.1.13"
resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36"
integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==