Merge remote-tracking branch 'parent/main' into kb_migration
This commit is contained in:
commit
621a41b670
29 changed files with 640 additions and 300 deletions
2
.github/workflows/build-container-image.yml
vendored
2
.github/workflows/build-container-image.yml
vendored
|
@ -76,8 +76,6 @@ jobs:
|
||||||
if: ${{ inputs.push_to_images != '' }}
|
if: ${{ inputs.push_to_images != '' }}
|
||||||
with:
|
with:
|
||||||
images: ${{ inputs.push_to_images }}
|
images: ${{ inputs.push_to_images }}
|
||||||
# Only tag with latest when ran against the latest stable branch
|
|
||||||
# This needs to be updated after each minor version release
|
|
||||||
flavor: ${{ inputs.flavor }}
|
flavor: ${{ inputs.flavor }}
|
||||||
tags: ${{ inputs.tags }}
|
tags: ${{ inputs.tags }}
|
||||||
labels: ${{ inputs.labels }}
|
labels: ${{ inputs.labels }}
|
||||||
|
|
2
.github/workflows/build-releases.yml
vendored
2
.github/workflows/build-releases.yml
vendored
|
@ -17,6 +17,8 @@ jobs:
|
||||||
push_to_images: |
|
push_to_images: |
|
||||||
tootsuite/mastodon
|
tootsuite/mastodon
|
||||||
ghcr.io/mastodon/mastodon
|
ghcr.io/mastodon/mastodon
|
||||||
|
# Only tag with latest when ran against the latest stable branch
|
||||||
|
# This needs to be updated after each minor version release
|
||||||
flavor: |
|
flavor: |
|
||||||
latest=${{ startsWith(github.ref, 'refs/tags/v4.1.') }}
|
latest=${{ startsWith(github.ref, 'refs/tags/v4.1.') }}
|
||||||
tags: |
|
tags: |
|
||||||
|
|
10
Gemfile.lock
10
Gemfile.lock
|
@ -109,7 +109,7 @@ GEM
|
||||||
i18n (>= 1.6, < 2)
|
i18n (>= 1.6, < 2)
|
||||||
minitest (>= 5.1)
|
minitest (>= 5.1)
|
||||||
tzinfo (~> 2.0)
|
tzinfo (~> 2.0)
|
||||||
addressable (2.8.4)
|
addressable (2.8.5)
|
||||||
public_suffix (>= 2.0.2, < 6.0)
|
public_suffix (>= 2.0.2, < 6.0)
|
||||||
aes_key_wrap (1.1.0)
|
aes_key_wrap (1.1.0)
|
||||||
airbrussh (1.4.1)
|
airbrussh (1.4.1)
|
||||||
|
@ -203,7 +203,7 @@ GEM
|
||||||
activesupport
|
activesupport
|
||||||
cbor (0.5.9.6)
|
cbor (0.5.9.6)
|
||||||
charlock_holmes (0.7.7)
|
charlock_holmes (0.7.7)
|
||||||
chewy (7.3.3)
|
chewy (7.3.4)
|
||||||
activesupport (>= 5.2)
|
activesupport (>= 5.2)
|
||||||
elasticsearch (>= 7.12.0, < 7.14.0)
|
elasticsearch (>= 7.12.0, < 7.14.0)
|
||||||
elasticsearch-dsl
|
elasticsearch-dsl
|
||||||
|
@ -482,7 +482,7 @@ GEM
|
||||||
nokogiri (1.15.4)
|
nokogiri (1.15.4)
|
||||||
mini_portile2 (~> 2.8.2)
|
mini_portile2 (~> 2.8.2)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
oj (3.16.0)
|
oj (3.16.1)
|
||||||
omniauth (2.1.1)
|
omniauth (2.1.1)
|
||||||
hashie (>= 3.4.6)
|
hashie (>= 3.4.6)
|
||||||
rack (>= 2.2.3)
|
rack (>= 2.2.3)
|
||||||
|
@ -519,7 +519,7 @@ GEM
|
||||||
parslet (2.0.0)
|
parslet (2.0.0)
|
||||||
pastel (0.8.0)
|
pastel (0.8.0)
|
||||||
tty-color (~> 0.5)
|
tty-color (~> 0.5)
|
||||||
pg (1.5.3)
|
pg (1.5.4)
|
||||||
pghero (3.3.3)
|
pghero (3.3.3)
|
||||||
activerecord (>= 6)
|
activerecord (>= 6)
|
||||||
posix-spawn (0.3.15)
|
posix-spawn (0.3.15)
|
||||||
|
@ -797,7 +797,7 @@ GEM
|
||||||
webfinger (1.2.0)
|
webfinger (1.2.0)
|
||||||
activesupport
|
activesupport
|
||||||
httpclient (>= 2.4)
|
httpclient (>= 2.4)
|
||||||
webmock (3.18.1)
|
webmock (3.19.1)
|
||||||
addressable (>= 2.8.0)
|
addressable (>= 2.8.0)
|
||||||
crack (>= 0.3.2)
|
crack (>= 0.3.2)
|
||||||
hashdiff (>= 0.4.0, < 2.0.0)
|
hashdiff (>= 0.4.0, < 2.0.0)
|
||||||
|
|
|
@ -53,7 +53,7 @@ class AccountsIndex < Chewy::Index
|
||||||
},
|
},
|
||||||
|
|
||||||
verbatim: {
|
verbatim: {
|
||||||
tokenizer: 'uax_url_email',
|
tokenizer: 'standard',
|
||||||
filter: %w(lowercase asciifolding cjk_width),
|
filter: %w(lowercase asciifolding cjk_width),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class Api::V1::Timelines::TagController < Api::BaseController
|
class Api::V1::Timelines::TagController < Api::BaseController
|
||||||
|
before_action -> { doorkeeper_authorize! :read, :'read:statuses' }, only: :show, if: :require_auth?
|
||||||
before_action :load_tag
|
before_action :load_tag
|
||||||
after_action :insert_pagination_headers, unless: -> { @statuses.empty? }
|
after_action :insert_pagination_headers, unless: -> { @statuses.empty? }
|
||||||
|
|
||||||
|
@ -12,6 +13,10 @@ class Api::V1::Timelines::TagController < Api::BaseController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def require_auth?
|
||||||
|
!Setting.timeline_preview
|
||||||
|
end
|
||||||
|
|
||||||
def load_tag
|
def load_tag
|
||||||
@tag = Tag.find_normalized(params[:id])
|
@tag = Tag.find_normalized(params[:id])
|
||||||
end
|
end
|
||||||
|
|
|
@ -34,6 +34,7 @@ const messages = defineMessages({
|
||||||
about: { id: 'navigation_bar.about', defaultMessage: 'About' },
|
about: { id: 'navigation_bar.about', defaultMessage: 'About' },
|
||||||
search: { id: 'navigation_bar.search', defaultMessage: 'Search' },
|
search: { id: 'navigation_bar.search', defaultMessage: 'Search' },
|
||||||
advancedInterface: { id: 'navigation_bar.advanced_interface', defaultMessage: 'Open in advanced web interface' },
|
advancedInterface: { id: 'navigation_bar.advanced_interface', defaultMessage: 'Open in advanced web interface' },
|
||||||
|
openedInClassicInterface: { id: 'navigation_bar.opened_in_classic_interface', defaultMessage: 'Posts, accounts, and other specific pages are opened by default in the classic web interface.' },
|
||||||
});
|
});
|
||||||
|
|
||||||
class NavigationPanel extends Component {
|
class NavigationPanel extends Component {
|
||||||
|
@ -70,12 +71,17 @@ class NavigationPanel extends Component {
|
||||||
<div className='navigation-panel__logo'>
|
<div className='navigation-panel__logo'>
|
||||||
<Link to='/' className='column-link column-link--logo'><WordmarkLogo /></Link>
|
<Link to='/' className='column-link column-link--logo'><WordmarkLogo /></Link>
|
||||||
|
|
||||||
{transientSingleColumn && (
|
{transientSingleColumn ? (
|
||||||
<a href={`/deck${location.pathname}`} className='button button--block'>
|
<div class='switch-to-advanced'>
|
||||||
|
{intl.formatMessage(messages.openedInClassicInterface)}
|
||||||
|
{" "}
|
||||||
|
<a href={`/deck${location.pathname}`} class='switch-to-advanced__toggle'>
|
||||||
{intl.formatMessage(messages.advancedInterface)}
|
{intl.formatMessage(messages.advancedInterface)}
|
||||||
</a>
|
</a>
|
||||||
)}
|
</div>
|
||||||
|
) : (
|
||||||
<hr />
|
<hr />
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{signedIn && (
|
{signedIn && (
|
||||||
|
|
|
@ -421,6 +421,7 @@
|
||||||
"navigation_bar.lists": "Lists",
|
"navigation_bar.lists": "Lists",
|
||||||
"navigation_bar.logout": "Logout",
|
"navigation_bar.logout": "Logout",
|
||||||
"navigation_bar.mutes": "Muted users",
|
"navigation_bar.mutes": "Muted users",
|
||||||
|
"navigation_bar.opened_in_classic_interface": "Posts, accounts, and other specific pages are opened by default in the classic web interface.",
|
||||||
"navigation_bar.personal": "Personal",
|
"navigation_bar.personal": "Personal",
|
||||||
"navigation_bar.pins": "Pinned posts",
|
"navigation_bar.pins": "Pinned posts",
|
||||||
"navigation_bar.preferences": "Preferences",
|
"navigation_bar.preferences": "Preferences",
|
||||||
|
|
|
@ -409,6 +409,7 @@
|
||||||
"navigation_bar.lists": "Listes",
|
"navigation_bar.lists": "Listes",
|
||||||
"navigation_bar.logout": "Déconnexion",
|
"navigation_bar.logout": "Déconnexion",
|
||||||
"navigation_bar.mutes": "Comptes masqués",
|
"navigation_bar.mutes": "Comptes masqués",
|
||||||
|
"navigation_bar.opened_in_classic_interface": "Les messages, les comptes et les pages spécifiques sont ouvertes dans l’interface classique.",
|
||||||
"navigation_bar.personal": "Personnel",
|
"navigation_bar.personal": "Personnel",
|
||||||
"navigation_bar.pins": "Messages épinglés",
|
"navigation_bar.pins": "Messages épinglés",
|
||||||
"navigation_bar.preferences": "Préférences",
|
"navigation_bar.preferences": "Préférences",
|
||||||
|
|
|
@ -2441,6 +2441,7 @@ $ui-header-height: 55px;
|
||||||
|
|
||||||
.filter-form {
|
.filter-form {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.autosuggest-textarea__textarea {
|
.autosuggest-textarea__textarea {
|
||||||
|
@ -3330,6 +3331,22 @@ $ui-header-height: 55px;
|
||||||
border-color: $ui-highlight-color;
|
border-color: $ui-highlight-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.switch-to-advanced {
|
||||||
|
color: $classic-primary-color;
|
||||||
|
background-color: $classic-base-color;
|
||||||
|
padding: 15px;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-top: 4px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 18px;
|
||||||
|
|
||||||
|
.switch-to-advanced__toggle {
|
||||||
|
color: $ui-button-tertiary-color;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.column-link {
|
.column-link {
|
||||||
background: lighten($ui-base-color, 8%);
|
background: lighten($ui-base-color, 8%);
|
||||||
color: $primary-text-color;
|
color: $primary-text-color;
|
||||||
|
|
|
@ -1186,14 +1186,14 @@ code {
|
||||||
}
|
}
|
||||||
|
|
||||||
li:first-child .label {
|
li:first-child .label {
|
||||||
left: auto;
|
|
||||||
inset-inline-start: 0;
|
inset-inline-start: 0;
|
||||||
|
inset-inline-end: auto;
|
||||||
text-align: start;
|
text-align: start;
|
||||||
transform: none;
|
transform: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
li:last-child .label {
|
li:last-child .label {
|
||||||
left: auto;
|
inset-inline-start: auto;
|
||||||
inset-inline-end: 0;
|
inset-inline-end: 0;
|
||||||
text-align: end;
|
text-align: end;
|
||||||
transform: none;
|
transform: none;
|
||||||
|
|
|
@ -4,10 +4,10 @@ class Importer::AccountsIndexImporter < Importer::BaseImporter
|
||||||
def import!
|
def import!
|
||||||
scope.includes(:account_stat).find_in_batches(batch_size: @batch_size) do |tmp|
|
scope.includes(:account_stat).find_in_batches(batch_size: @batch_size) do |tmp|
|
||||||
in_work_unit(tmp) do |accounts|
|
in_work_unit(tmp) do |accounts|
|
||||||
bulk = Chewy::Index::Import::BulkBuilder.new(index, to_index: accounts).bulk_body
|
bulk = build_bulk_body(accounts)
|
||||||
|
|
||||||
indexed = bulk.count { |entry| entry[:index] }
|
indexed = bulk.size
|
||||||
deleted = bulk.count { |entry| entry[:delete] }
|
deleted = 0
|
||||||
|
|
||||||
Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
|
Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,14 @@ class Importer::BaseImporter
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
def build_bulk_body(to_import)
|
||||||
|
# Specialize `Chewy::Index::Import::BulkBuilder#bulk_body` to avoid a few
|
||||||
|
# inefficiencies, as none of our fields or join fields and we do not need
|
||||||
|
# `BulkBuilder`'s versatility.
|
||||||
|
crutches = Chewy::Index::Crutch::Crutches.new index, to_import
|
||||||
|
to_import.map { |object| { index: { _id: object.id, data: index.compose(object, crutches, fields: []) } } }
|
||||||
|
end
|
||||||
|
|
||||||
def in_work_unit(...)
|
def in_work_unit(...)
|
||||||
work_unit = Concurrent::Promises.future_on(@executor, ...)
|
work_unit = Concurrent::Promises.future_on(@executor, ...)
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,10 @@ class Importer::InstancesIndexImporter < Importer::BaseImporter
|
||||||
def import!
|
def import!
|
||||||
index.adapter.default_scope.find_in_batches(batch_size: @batch_size) do |tmp|
|
index.adapter.default_scope.find_in_batches(batch_size: @batch_size) do |tmp|
|
||||||
in_work_unit(tmp) do |instances|
|
in_work_unit(tmp) do |instances|
|
||||||
bulk = Chewy::Index::Import::BulkBuilder.new(index, to_index: instances).bulk_body
|
bulk = build_bulk_body(instances)
|
||||||
|
|
||||||
indexed = bulk.count { |entry| entry[:index] }
|
indexed = bulk.size
|
||||||
deleted = bulk.count { |entry| entry[:delete] }
|
deleted = 0
|
||||||
|
|
||||||
Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
|
Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,11 @@ class Importer::PublicStatusesIndexImporter < Importer::BaseImporter
|
||||||
scope.select(:id).find_in_batches(batch_size: @batch_size) do |batch|
|
scope.select(:id).find_in_batches(batch_size: @batch_size) do |batch|
|
||||||
in_work_unit(batch.pluck(:id)) do |status_ids|
|
in_work_unit(batch.pluck(:id)) do |status_ids|
|
||||||
bulk = ActiveRecord::Base.connection_pool.with_connection do
|
bulk = ActiveRecord::Base.connection_pool.with_connection do
|
||||||
Chewy::Index::Import::BulkBuilder.new(index, to_index: Status.includes(:media_attachments, :preloadable_poll, :preview_cards).where(id: status_ids)).bulk_body
|
build_bulk_body(index.adapter.default_scope.where(id: status_ids))
|
||||||
end
|
end
|
||||||
|
|
||||||
indexed = bulk.count { |entry| entry[:index] }
|
indexed = bulk.size
|
||||||
deleted = bulk.count { |entry| entry[:delete] }
|
deleted = 0
|
||||||
|
|
||||||
Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
|
Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
|
||||||
|
|
||||||
|
|
|
@ -13,31 +13,24 @@ class Importer::StatusesIndexImporter < Importer::BaseImporter
|
||||||
|
|
||||||
scope.find_in_batches(batch_size: @batch_size) do |tmp|
|
scope.find_in_batches(batch_size: @batch_size) do |tmp|
|
||||||
in_work_unit(tmp.map(&:status_id)) do |status_ids|
|
in_work_unit(tmp.map(&:status_id)) do |status_ids|
|
||||||
bulk = ActiveRecord::Base.connection_pool.with_connection do
|
|
||||||
Chewy::Index::Import::BulkBuilder.new(index, to_index: index.adapter.default_scope.where(id: status_ids)).bulk_body
|
|
||||||
end
|
|
||||||
|
|
||||||
indexed = 0
|
|
||||||
deleted = 0
|
deleted = 0
|
||||||
|
|
||||||
# We can't use the delete_if proc to do the filtering because delete_if
|
bulk = ActiveRecord::Base.connection_pool.with_connection do
|
||||||
# is called before rendering the data and we need to filter based
|
to_index = index.adapter.default_scope.where(id: status_ids)
|
||||||
# on the results of the filter, so this filtering happens here instead
|
crutches = Chewy::Index::Crutch::Crutches.new index, to_index
|
||||||
bulk.map! do |entry|
|
to_index.map do |object|
|
||||||
new_entry = if entry[:index] && entry.dig(:index, :data, 'searchable_by').blank?
|
# This is unlikely to happen, but the post may have been
|
||||||
{ delete: entry[:index].except(:data) }
|
# un-interacted with since it was queued for indexing
|
||||||
else
|
if object.searchable_by.empty?
|
||||||
entry
|
|
||||||
end
|
|
||||||
|
|
||||||
if new_entry[:index]
|
|
||||||
indexed += 1
|
|
||||||
else
|
|
||||||
deleted += 1
|
deleted += 1
|
||||||
|
{ delete: { _id: object.id } }
|
||||||
|
else
|
||||||
|
{ index: { _id: object.id, data: index.compose(object, crutches, fields: []) } }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
new_entry
|
indexed = bulk.size - deleted
|
||||||
end
|
|
||||||
|
|
||||||
Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
|
Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,10 @@ class Importer::TagsIndexImporter < Importer::BaseImporter
|
||||||
def import!
|
def import!
|
||||||
index.adapter.default_scope.find_in_batches(batch_size: @batch_size) do |tmp|
|
index.adapter.default_scope.find_in_batches(batch_size: @batch_size) do |tmp|
|
||||||
in_work_unit(tmp) do |tags|
|
in_work_unit(tmp) do |tags|
|
||||||
bulk = Chewy::Index::Import::BulkBuilder.new(index, to_index: tags).bulk_body
|
bulk = build_bulk_body(tags)
|
||||||
|
|
||||||
indexed = bulk.count { |entry| entry[:index] }
|
indexed = bulk.size
|
||||||
deleted = bulk.count { |entry| entry[:delete] }
|
deleted = 0
|
||||||
|
|
||||||
Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
|
Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class PlainTextFormatter
|
class PlainTextFormatter
|
||||||
include ActionView::Helpers::TextHelper
|
|
||||||
|
|
||||||
NEWLINE_TAGS_RE = %r{(<br />|<br>|</p>)+}
|
NEWLINE_TAGS_RE = %r{(<br />|<br>|</p>)+}
|
||||||
|
|
||||||
attr_reader :text, :local
|
attr_reader :text, :local
|
||||||
|
@ -18,7 +16,10 @@ class PlainTextFormatter
|
||||||
if local?
|
if local?
|
||||||
text
|
text
|
||||||
else
|
else
|
||||||
html_entities.decode(strip_tags(insert_newlines)).chomp
|
node = Nokogiri::HTML.fragment(insert_newlines)
|
||||||
|
# Elements that are entirely removed with our Sanitize config
|
||||||
|
node.xpath('.//iframe|.//math|.//noembed|.//noframes|.//noscript|.//plaintext|.//script|.//style|.//svg|.//xmp').remove
|
||||||
|
node.text.chomp
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -27,8 +28,4 @@ class PlainTextFormatter
|
||||||
def insert_newlines
|
def insert_newlines
|
||||||
text.gsub(NEWLINE_TAGS_RE) { |match| "#{match}\n" }
|
text.gsub(NEWLINE_TAGS_RE) { |match| "#{match}\n" }
|
||||||
end
|
end
|
||||||
|
|
||||||
def html_entities
|
|
||||||
HTMLEntities.new
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,10 +6,10 @@ class SearchQueryParser < Parslet::Parser
|
||||||
rule(:colon) { str(':') }
|
rule(:colon) { str(':') }
|
||||||
rule(:space) { match('\s').repeat(1) }
|
rule(:space) { match('\s').repeat(1) }
|
||||||
rule(:operator) { (str('+') | str('-')).as(:operator) }
|
rule(:operator) { (str('+') | str('-')).as(:operator) }
|
||||||
rule(:prefix) { (term >> colon).as(:prefix) }
|
rule(:prefix) { term >> colon }
|
||||||
rule(:shortcode) { (colon >> term >> colon.maybe).as(:shortcode) }
|
rule(:shortcode) { (colon >> term >> colon.maybe).as(:shortcode) }
|
||||||
rule(:phrase) { (quote >> (term >> space.maybe).repeat >> quote).as(:phrase) }
|
rule(:phrase) { (quote >> (term >> space.maybe).repeat >> quote).as(:phrase) }
|
||||||
rule(:clause) { (operator.maybe >> prefix.maybe >> (phrase | term | shortcode)).as(:clause) }
|
rule(:clause) { (operator.maybe >> prefix.maybe.as(:prefix) >> (phrase | term | shortcode)).as(:clause) | prefix.as(:clause) | quote.as(:junk) }
|
||||||
rule(:query) { (clause >> space.maybe).repeat.as(:query) }
|
rule(:query) { (clause >> space.maybe).repeat.as(:query) }
|
||||||
root(:query)
|
root(:query)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,50 +1,32 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class SearchQueryTransformer < Parslet::Transform
|
class SearchQueryTransformer < Parslet::Transform
|
||||||
|
SUPPORTED_PREFIXES = %w(
|
||||||
|
has
|
||||||
|
is
|
||||||
|
language
|
||||||
|
from
|
||||||
|
before
|
||||||
|
after
|
||||||
|
during
|
||||||
|
).freeze
|
||||||
|
|
||||||
class Query
|
class Query
|
||||||
attr_reader :should_clauses, :must_not_clauses, :must_clauses, :filter_clauses
|
attr_reader :must_not_clauses, :must_clauses, :filter_clauses
|
||||||
|
|
||||||
def initialize(clauses)
|
def initialize(clauses)
|
||||||
grouped = clauses.chunk(&:operator).to_h
|
grouped = clauses.compact.chunk(&:operator).to_h
|
||||||
@should_clauses = grouped.fetch(:should, [])
|
|
||||||
@must_not_clauses = grouped.fetch(:must_not, [])
|
@must_not_clauses = grouped.fetch(:must_not, [])
|
||||||
@must_clauses = grouped.fetch(:must, [])
|
@must_clauses = grouped.fetch(:must, [])
|
||||||
@filter_clauses = grouped.fetch(:filter, [])
|
@filter_clauses = grouped.fetch(:filter, [])
|
||||||
end
|
end
|
||||||
|
|
||||||
def apply(search)
|
def apply(search)
|
||||||
should_clauses.each { |clause| search = search.query.should(clause_to_query(clause)) }
|
must_clauses.each { |clause| search = search.query.must(clause.to_query) }
|
||||||
must_clauses.each { |clause| search = search.query.must(clause_to_query(clause)) }
|
must_not_clauses.each { |clause| search = search.query.must_not(clause.to_query) }
|
||||||
must_not_clauses.each { |clause| search = search.query.must_not(clause_to_query(clause)) }
|
filter_clauses.each { |clause| search = search.filter(**clause.to_query) }
|
||||||
filter_clauses.each { |clause| search = search.filter(**clause_to_filter(clause)) }
|
|
||||||
search.query.minimum_should_match(1)
|
search.query.minimum_should_match(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def clause_to_query(clause)
|
|
||||||
case clause
|
|
||||||
when TermClause
|
|
||||||
{ match_phrase: { text: { query: clause.term } } }
|
|
||||||
when PhraseClause
|
|
||||||
{ match_phrase: { text: { query: clause.phrase } } }
|
|
||||||
else
|
|
||||||
raise "Unexpected clause type: #{clause}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def clause_to_filter(clause)
|
|
||||||
case clause
|
|
||||||
when PrefixClause
|
|
||||||
if clause.negated?
|
|
||||||
{ bool: { must_not: { clause.type => { clause.filter => clause.term } } } }
|
|
||||||
else
|
|
||||||
{ clause.type => { clause.filter => clause.term } }
|
|
||||||
end
|
|
||||||
else
|
|
||||||
raise "Unexpected clause type: #{clause}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class Operator
|
class Operator
|
||||||
|
@ -63,29 +45,37 @@ class SearchQueryTransformer < Parslet::Transform
|
||||||
end
|
end
|
||||||
|
|
||||||
class TermClause
|
class TermClause
|
||||||
attr_reader :prefix, :operator, :term
|
attr_reader :operator, :term
|
||||||
|
|
||||||
def initialize(prefix, operator, term)
|
def initialize(operator, term)
|
||||||
@prefix = prefix
|
|
||||||
@operator = Operator.symbol(operator)
|
@operator = Operator.symbol(operator)
|
||||||
@term = term
|
@term = term
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def to_query
|
||||||
|
# { multi_match: { type: 'most_fields', query: @term, fields: ['text', 'text.stemmed'], operator: 'and' } }
|
||||||
|
{ match_phrase: { text: { query: @phrase } } }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class PhraseClause
|
class PhraseClause
|
||||||
attr_reader :prefix, :operator, :phrase
|
attr_reader :operator, :phrase
|
||||||
|
|
||||||
def initialize(prefix, operator, phrase)
|
def initialize(operator, phrase)
|
||||||
@prefix = prefix
|
|
||||||
@operator = Operator.symbol(operator)
|
@operator = Operator.symbol(operator)
|
||||||
@phrase = phrase
|
@phrase = phrase
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def to_query
|
||||||
|
{ match_phrase: { text: { query: @phrase } } }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class PrefixClause
|
class PrefixClause
|
||||||
attr_reader :type, :filter, :operator, :term
|
attr_reader :operator, :prefix, :term
|
||||||
|
|
||||||
def initialize(prefix, operator, term, options = {})
|
def initialize(prefix, operator, term, options = {})
|
||||||
|
@prefix = prefix
|
||||||
@negated = operator == '-'
|
@negated = operator == '-'
|
||||||
@options = options
|
@options = options
|
||||||
@operator = :filter
|
@operator = :filter
|
||||||
|
@ -98,7 +88,7 @@ class SearchQueryTransformer < Parslet::Transform
|
||||||
when 'language'
|
when 'language'
|
||||||
@filter = :language
|
@filter = :language
|
||||||
@type = :term
|
@type = :term
|
||||||
@term = term
|
@term = language_code_from_term(term)
|
||||||
when 'from'
|
when 'from'
|
||||||
@filter = :account_id
|
@filter = :account_id
|
||||||
@type = :term
|
@type = :term
|
||||||
|
@ -120,12 +110,16 @@ class SearchQueryTransformer < Parslet::Transform
|
||||||
@type = :range
|
@type = :range
|
||||||
@term = { gte: term, lte: term, time_zone: @options[:current_account]&.user_time_zone || 'UTC' }
|
@term = { gte: term, lte: term, time_zone: @options[:current_account]&.user_time_zone || 'UTC' }
|
||||||
else
|
else
|
||||||
raise Mastodon::SyntaxError
|
raise "Unknown prefix: #{prefix}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def negated?
|
def to_query
|
||||||
@negated
|
if @negated
|
||||||
|
{ bool: { must_not: { @type => { @filter => @term } } } }
|
||||||
|
else
|
||||||
|
{ @type => { @filter => @term } }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -147,24 +141,48 @@ class SearchQueryTransformer < Parslet::Transform
|
||||||
|
|
||||||
term
|
term
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def language_code_from_term(term)
|
||||||
|
language_code = term
|
||||||
|
|
||||||
|
return language_code if LanguagesHelper::SUPPORTED_LOCALES.key?(language_code.to_sym)
|
||||||
|
|
||||||
|
language_code = term.downcase
|
||||||
|
|
||||||
|
return language_code if LanguagesHelper::SUPPORTED_LOCALES.key?(language_code.to_sym)
|
||||||
|
|
||||||
|
language_code = term.split(/[_-]/).first.downcase
|
||||||
|
|
||||||
|
return language_code if LanguagesHelper::SUPPORTED_LOCALES.key?(language_code.to_sym)
|
||||||
|
|
||||||
|
term
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
rule(clause: subtree(:clause)) do
|
rule(clause: subtree(:clause)) do
|
||||||
prefix = clause[:prefix][:term].to_s if clause[:prefix]
|
prefix = clause[:prefix][:term].to_s if clause[:prefix]
|
||||||
operator = clause[:operator]&.to_s
|
operator = clause[:operator]&.to_s
|
||||||
|
|
||||||
if clause[:prefix]
|
if clause[:prefix] && SUPPORTED_PREFIXES.include?(prefix)
|
||||||
PrefixClause.new(prefix, operator, clause[:term].to_s, current_account: current_account)
|
PrefixClause.new(prefix, operator, clause[:term].to_s, current_account: current_account)
|
||||||
|
elsif clause[:prefix]
|
||||||
|
TermClause.new(operator, "#{prefix} #{clause[:term]}")
|
||||||
elsif clause[:term]
|
elsif clause[:term]
|
||||||
TermClause.new(prefix, operator, clause[:term].to_s)
|
TermClause.new(operator, clause[:term].to_s)
|
||||||
elsif clause[:shortcode]
|
elsif clause[:shortcode]
|
||||||
TermClause.new(prefix, operator, ":#{clause[:term]}:")
|
TermClause.new(operator, ":#{clause[:term]}:")
|
||||||
elsif clause[:phrase]
|
elsif clause[:phrase]
|
||||||
PhraseClause.new(prefix, operator, clause[:phrase].is_a?(Array) ? clause[:phrase].map { |p| p[:term].to_s }.join(' ') : clause[:phrase].to_s)
|
PhraseClause.new(operator, clause[:phrase].is_a?(Array) ? clause[:phrase].map { |p| p[:term].to_s }.join(' ') : clause[:phrase].to_s)
|
||||||
else
|
else
|
||||||
raise "Unexpected clause type: #{clause}"
|
raise "Unexpected clause type: #{clause}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
rule(query: sequence(:clauses)) { Query.new(clauses) }
|
rule(junk: subtree(:junk)) do
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
|
rule(query: sequence(:clauses)) do
|
||||||
|
Query.new(clauses)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -105,6 +105,8 @@ class MediaAttachment < ApplicationRecord
|
||||||
output: {
|
output: {
|
||||||
'loglevel' => 'fatal',
|
'loglevel' => 'fatal',
|
||||||
'preset' => 'veryfast',
|
'preset' => 'veryfast',
|
||||||
|
'movflags' => 'faststart', # Move metadata to start of file so playback can begin before download finishes
|
||||||
|
'pix_fmt' => 'yuv420p', # Ensure color space for cross-browser compatibility
|
||||||
'c:v' => 'h264',
|
'c:v' => 'h264',
|
||||||
'c:a' => 'aac',
|
'c:a' => 'aac',
|
||||||
'b:a' => '192k',
|
'b:a' => '192k',
|
||||||
|
|
|
@ -18,18 +18,31 @@ class WebfingerSerializer < ActiveModel::Serializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def links
|
def links
|
||||||
if object.instance_actor?
|
|
||||||
[
|
[
|
||||||
{ rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: about_more_url(instance_actor: true) },
|
{ rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: profile_page_href },
|
||||||
{ rel: 'self', type: 'application/activity+json', href: instance_actor_url },
|
{ rel: 'self', type: 'application/activity+json', href: self_href },
|
||||||
{ rel: 'http://ostatus.org/schema/1.0/subscribe', template: "#{authorize_interaction_url}?uri={uri}" },
|
{ rel: 'http://ostatus.org/schema/1.0/subscribe', template: "#{authorize_interaction_url}?uri={uri}" },
|
||||||
]
|
].tap do |x|
|
||||||
else
|
x << { rel: 'http://webfinger.net/rel/avatar', type: object.avatar.content_type, href: full_asset_url(object.avatar_original_url) } if show_avatar?
|
||||||
[
|
|
||||||
{ rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: short_account_url(object) },
|
|
||||||
{ rel: 'self', type: 'application/activity+json', href: account_url(object) },
|
|
||||||
{ rel: 'http://ostatus.org/schema/1.0/subscribe', template: "#{authorize_interaction_url}?uri={uri}" },
|
|
||||||
]
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def show_avatar?
|
||||||
|
media_present = object.avatar.present? && object.avatar.content_type.present?
|
||||||
|
|
||||||
|
# Show avatar only if an instance shows profiles to logged out users
|
||||||
|
allowed_by_config = ENV['DISALLOW_UNAUTHENTICATED_API_ACCESS'] != 'true' && !Rails.configuration.x.limited_federation_mode
|
||||||
|
|
||||||
|
media_present && allowed_by_config
|
||||||
|
end
|
||||||
|
|
||||||
|
def profile_page_href
|
||||||
|
object.instance_actor? ? about_more_url(instance_actor: true) : short_account_url(object)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self_href
|
||||||
|
object.instance_actor? ? instance_actor_url : account_url(object)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class SearchService < BaseService
|
class SearchService < BaseService
|
||||||
def call(query, account, limit, options = {})
|
QUOTE_EQUIVALENT_CHARACTERS = /[“”„«»「」『』《》]/
|
||||||
@query = query&.strip
|
|
||||||
|
|
||||||
|
def call(query, account, limit, options = {})
|
||||||
|
@query = query&.strip&.gsub(QUOTE_EQUIVALENT_CHARACTERS, '"')
|
||||||
@account = account
|
@account = account
|
||||||
@options = options
|
@options = options
|
||||||
@limit = limit.to_i
|
@limit = limit.to_i
|
||||||
|
|
|
@ -15,10 +15,22 @@ class AddUniqueIndexOnPreviewCardsStatuses < ActiveRecord::Migration[6.1]
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def supports_concurrent_reindex?
|
||||||
|
@supports_concurrent_reindex ||= begin
|
||||||
|
version = select_one("SELECT current_setting('server_version_num') AS v")['v'].to_i
|
||||||
|
version >= 12_000
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def deduplicate_and_reindex!
|
def deduplicate_and_reindex!
|
||||||
deduplicate_preview_cards!
|
deduplicate_preview_cards!
|
||||||
|
|
||||||
|
if supports_concurrent_reindex?
|
||||||
safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' }
|
safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' }
|
||||||
|
else
|
||||||
|
remove_index :preview_cards_statuses, name: :preview_cards_statuses_pkey
|
||||||
|
add_index :preview_cards_statuses, [:status_id, :preview_card_id], name: :preview_cards_statuses_pkey, algorithm: :concurrently, unique: true
|
||||||
|
end
|
||||||
rescue ActiveRecord::RecordNotUnique
|
rescue ActiveRecord::RecordNotUnique
|
||||||
retry
|
retry
|
||||||
end
|
end
|
||||||
|
|
6
dist/nginx.conf
vendored
6
dist/nginx.conf
vendored
|
@ -36,7 +36,11 @@ server {
|
||||||
server_name example.com;
|
server_name example.com;
|
||||||
|
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
|
|
||||||
|
# You can use https://ssl-config.mozilla.org/ to generate your cipher set.
|
||||||
|
# We recommend their "Intermediate" level.
|
||||||
|
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
|
||||||
|
|
||||||
ssl_prefer_server_ciphers on;
|
ssl_prefer_server_ciphers on;
|
||||||
ssl_session_cache shared:SSL:10m;
|
ssl_session_cache shared:SSL:10m;
|
||||||
ssl_session_tickets off;
|
ssl_session_tickets off;
|
||||||
|
|
|
@ -6,35 +6,65 @@ describe Api::V1::Timelines::TagController do
|
||||||
render_views
|
render_views
|
||||||
|
|
||||||
let(:user) { Fabricate(:user) }
|
let(:user) { Fabricate(:user) }
|
||||||
|
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses') }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
allow(controller).to receive(:doorkeeper_token) { token }
|
allow(controller).to receive(:doorkeeper_token) { token }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with a user context' do
|
|
||||||
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id) }
|
|
||||||
|
|
||||||
describe 'GET #show' do
|
describe 'GET #show' do
|
||||||
|
subject do
|
||||||
|
get :show, params: { id: 'test' }
|
||||||
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
PostStatusService.new.call(user.account, text: 'It is a #test')
|
PostStatusService.new.call(user.account, text: 'It is a #test')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns http success' do
|
context 'when the instance allows public preview' do
|
||||||
get :show, params: { id: 'test' }
|
context 'when the user is not authenticated' do
|
||||||
|
let(:token) { nil }
|
||||||
|
|
||||||
|
it 'returns http success', :aggregate_failures do
|
||||||
|
subject
|
||||||
|
|
||||||
|
expect(response).to have_http_status(200)
|
||||||
|
expect(response.headers['Link'].links.size).to eq(2)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the user is authenticated' do
|
||||||
|
it 'returns http success', :aggregate_failures do
|
||||||
|
subject
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(response.headers['Link'].links.size).to eq(2)
|
expect(response.headers['Link'].links.size).to eq(2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'without a user context' do
|
context 'when the instance does not allow public preview' do
|
||||||
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: nil) }
|
before do
|
||||||
|
Form::AdminSettings.new(timeline_preview: false).save
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the user is not authenticated' do
|
||||||
|
let(:token) { nil }
|
||||||
|
|
||||||
|
it 'returns http unauthorized' do
|
||||||
|
subject
|
||||||
|
|
||||||
|
expect(response).to have_http_status(401)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the user is authenticated' do
|
||||||
|
it 'returns http success', :aggregate_failures do
|
||||||
|
subject
|
||||||
|
|
||||||
describe 'GET #show' do
|
|
||||||
it 'returns http success' do
|
|
||||||
get :show, params: { id: 'test' }
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(response.headers['Link']).to be_nil
|
expect(response.headers['Link'].links.size).to eq(2)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
describe WellKnown::WebfingerController do
|
describe WellKnown::WebfingerController do
|
||||||
|
include RoutingHelper
|
||||||
|
|
||||||
render_views
|
render_views
|
||||||
|
|
||||||
describe 'GET #show' do
|
describe 'GET #show' do
|
||||||
|
@ -167,5 +169,67 @@ describe WellKnown::WebfingerController do
|
||||||
expect(response).to have_http_status(400)
|
expect(response).to have_http_status(400)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when an account has an avatar' do
|
||||||
|
let(:alice) { Fabricate(:account, username: 'alice', avatar: attachment_fixture('attachment.jpg')) }
|
||||||
|
let(:resource) { alice.to_webfinger_s }
|
||||||
|
|
||||||
|
it 'returns avatar in response' do
|
||||||
|
perform_show!
|
||||||
|
|
||||||
|
avatar_link = get_avatar_link(body_as_json)
|
||||||
|
expect(avatar_link).to_not be_nil
|
||||||
|
expect(avatar_link[:type]).to eq alice.avatar.content_type
|
||||||
|
expect(avatar_link[:href]).to eq full_asset_url(alice.avatar)
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with limited federation mode' do
|
||||||
|
before do
|
||||||
|
allow(Rails.configuration.x).to receive(:limited_federation_mode).and_return(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not return avatar in response' do
|
||||||
|
perform_show!
|
||||||
|
|
||||||
|
avatar_link = get_avatar_link(body_as_json)
|
||||||
|
expect(avatar_link).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when enabling DISALLOW_UNAUTHENTICATED_API_ACCESS' do
|
||||||
|
around do |example|
|
||||||
|
ClimateControl.modify DISALLOW_UNAUTHENTICATED_API_ACCESS: 'true' do
|
||||||
|
example.run
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not return avatar in response' do
|
||||||
|
perform_show!
|
||||||
|
|
||||||
|
avatar_link = get_avatar_link(body_as_json)
|
||||||
|
expect(avatar_link).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when an account does not have an avatar' do
|
||||||
|
let(:alice) { Fabricate(:account, username: 'alice', avatar: nil) }
|
||||||
|
let(:resource) { alice.to_webfinger_s }
|
||||||
|
|
||||||
|
before do
|
||||||
|
perform_show!
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not return avatar in response' do
|
||||||
|
avatar_link = get_avatar_link(body_as_json)
|
||||||
|
expect(avatar_link).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def get_avatar_link(json)
|
||||||
|
json[:links].find { |link| link[:rel] == 'http://webfinger.net/rel/avatar' }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
98
spec/lib/search_query_parser_spec.rb
Normal file
98
spec/lib/search_query_parser_spec.rb
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
require 'parslet/rig/rspec'
|
||||||
|
|
||||||
|
describe SearchQueryParser do
|
||||||
|
let(:parser) { described_class.new }
|
||||||
|
|
||||||
|
context 'with term' do
|
||||||
|
it 'consumes "hello"' do
|
||||||
|
expect(parser.term).to parse('hello')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with prefix' do
|
||||||
|
it 'consumes "foo:"' do
|
||||||
|
expect(parser.prefix).to parse('foo:')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with operator' do
|
||||||
|
it 'consumes "+"' do
|
||||||
|
expect(parser.operator).to parse('+')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes "-"' do
|
||||||
|
expect(parser.operator).to parse('-')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with shortcode' do
|
||||||
|
it 'consumes ":foo:"' do
|
||||||
|
expect(parser.shortcode).to parse(':foo:')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with phrase' do
|
||||||
|
it 'consumes "hello world"' do
|
||||||
|
expect(parser.phrase).to parse('"hello world"')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with clause' do
|
||||||
|
it 'consumes "foo"' do
|
||||||
|
expect(parser.clause).to parse('foo')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes "-foo"' do
|
||||||
|
expect(parser.clause).to parse('-foo')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes "foo:bar"' do
|
||||||
|
expect(parser.clause).to parse('foo:bar')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes "-foo:bar"' do
|
||||||
|
expect(parser.clause).to parse('-foo:bar')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes \'foo:"hello world"\'' do
|
||||||
|
expect(parser.clause).to parse('foo:"hello world"')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes \'-foo:"hello world"\'' do
|
||||||
|
expect(parser.clause).to parse('-foo:"hello world"')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes "foo:"' do
|
||||||
|
expect(parser.clause).to parse('foo:')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes \'"\'' do
|
||||||
|
expect(parser.clause).to parse('"')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with query' do
|
||||||
|
it 'consumes "hello -world"' do
|
||||||
|
expect(parser.query).to parse('hello -world')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes \'foo "hello world"\'' do
|
||||||
|
expect(parser.query).to parse('foo "hello world"')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes "foo:bar hello"' do
|
||||||
|
expect(parser.query).to parse('foo:bar hello')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes \'"hello" world "\'' do
|
||||||
|
expect(parser.query).to parse('"hello" world "')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'consumes "foo:bar bar: hello"' do
|
||||||
|
expect(parser.query).to parse('foo:bar bar: hello')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -3,16 +3,57 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
describe SearchQueryTransformer do
|
describe SearchQueryTransformer do
|
||||||
describe 'initialization' do
|
subject { described_class.new.apply(parser, current_account: nil) }
|
||||||
let(:parser) { SearchQueryParser.new.parse('query') }
|
|
||||||
|
|
||||||
it 'sets attributes' do
|
let(:parser) { SearchQueryParser.new.parse(query) }
|
||||||
transformer = described_class.new.apply(parser)
|
|
||||||
|
|
||||||
expect(transformer.should_clauses.first).to be_nil
|
context 'with "hello world"' do
|
||||||
expect(transformer.must_clauses.first).to be_a(SearchQueryTransformer::TermClause)
|
let(:query) { 'hello world' }
|
||||||
expect(transformer.must_not_clauses.first).to be_nil
|
|
||||||
expect(transformer.filter_clauses.first).to be_nil
|
it 'transforms clauses' do
|
||||||
|
expect(subject.must_clauses.map(&:term)).to match_array %w(hello world)
|
||||||
|
expect(subject.must_not_clauses).to be_empty
|
||||||
|
expect(subject.filter_clauses).to be_empty
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with "hello -world"' do
|
||||||
|
let(:query) { 'hello -world' }
|
||||||
|
|
||||||
|
it 'transforms clauses' do
|
||||||
|
expect(subject.must_clauses.map(&:term)).to match_array %w(hello)
|
||||||
|
expect(subject.must_not_clauses.map(&:term)).to match_array %w(world)
|
||||||
|
expect(subject.filter_clauses).to be_empty
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with "hello is:reply"' do
|
||||||
|
let(:query) { 'hello is:reply' }
|
||||||
|
|
||||||
|
it 'transforms clauses' do
|
||||||
|
expect(subject.must_clauses.map(&:term)).to match_array %w(hello)
|
||||||
|
expect(subject.must_not_clauses).to be_empty
|
||||||
|
expect(subject.filter_clauses.map(&:term)).to match_array %w(reply)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with "foo: bar"' do
|
||||||
|
let(:query) { 'foo: bar' }
|
||||||
|
|
||||||
|
it 'transforms clauses' do
|
||||||
|
expect(subject.must_clauses.map(&:term)).to match_array %w(foo bar)
|
||||||
|
expect(subject.must_not_clauses).to be_empty
|
||||||
|
expect(subject.filter_clauses).to be_empty
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with "foo:bar"' do
|
||||||
|
let(:query) { 'foo:bar' }
|
||||||
|
|
||||||
|
it 'transforms clauses' do
|
||||||
|
expect(subject.must_clauses.map(&:term)).to contain_exactly('foo bar')
|
||||||
|
expect(subject.must_not_clauses).to be_empty
|
||||||
|
expect(subject.filter_clauses).to be_empty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
329
yarn.lock
329
yarn.lock
|
@ -29,7 +29,7 @@
|
||||||
jsonpointer "^5.0.0"
|
jsonpointer "^5.0.0"
|
||||||
leven "^3.1.0"
|
leven "^3.1.0"
|
||||||
|
|
||||||
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5":
|
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.10":
|
||||||
version "7.22.10"
|
version "7.22.10"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3"
|
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3"
|
||||||
integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==
|
integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==
|
||||||
|
@ -44,7 +44,15 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/highlight" "^7.22.5"
|
"@babel/highlight" "^7.22.5"
|
||||||
|
|
||||||
"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9":
|
"@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==
|
||||||
|
dependencies:
|
||||||
|
"@babel/highlight" "^7.22.13"
|
||||||
|
chalk "^2.4.2"
|
||||||
|
|
||||||
|
"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9":
|
||||||
version "7.22.9"
|
version "7.22.9"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730"
|
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730"
|
||||||
integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==
|
integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==
|
||||||
|
@ -113,7 +121,7 @@
|
||||||
lru-cache "^5.1.1"
|
lru-cache "^5.1.1"
|
||||||
semver "^6.3.1"
|
semver "^6.3.1"
|
||||||
|
|
||||||
"@babel/helper-create-class-features-plugin@^7.22.11":
|
"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5":
|
||||||
version "7.22.11"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz#4078686740459eeb4af3494a273ac09148dfb213"
|
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz#4078686740459eeb4af3494a273ac09148dfb213"
|
||||||
integrity sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==
|
integrity sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==
|
||||||
|
@ -128,21 +136,6 @@
|
||||||
"@babel/helper-split-export-declaration" "^7.22.6"
|
"@babel/helper-split-export-declaration" "^7.22.6"
|
||||||
semver "^6.3.1"
|
semver "^6.3.1"
|
||||||
|
|
||||||
"@babel/helper-create-class-features-plugin@^7.22.5":
|
|
||||||
version "7.22.10"
|
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3"
|
|
||||||
integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==
|
|
||||||
dependencies:
|
|
||||||
"@babel/helper-annotate-as-pure" "^7.22.5"
|
|
||||||
"@babel/helper-environment-visitor" "^7.22.5"
|
|
||||||
"@babel/helper-function-name" "^7.22.5"
|
|
||||||
"@babel/helper-member-expression-to-functions" "^7.22.5"
|
|
||||||
"@babel/helper-optimise-call-expression" "^7.22.5"
|
|
||||||
"@babel/helper-replace-supers" "^7.22.9"
|
|
||||||
"@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
|
|
||||||
"@babel/helper-split-export-declaration" "^7.22.6"
|
|
||||||
semver "^6.3.1"
|
|
||||||
|
|
||||||
"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5":
|
"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5":
|
||||||
version "7.22.9"
|
version "7.22.9"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6"
|
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6"
|
||||||
|
@ -292,7 +285,16 @@
|
||||||
"@babel/traverse" "^7.22.11"
|
"@babel/traverse" "^7.22.11"
|
||||||
"@babel/types" "^7.22.11"
|
"@babel/types" "^7.22.11"
|
||||||
|
|
||||||
"@babel/highlight@^7.22.10", "@babel/highlight@^7.22.5":
|
"@babel/highlight@^7.22.10", "@babel/highlight@^7.22.13":
|
||||||
|
version "7.22.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16"
|
||||||
|
integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-validator-identifier" "^7.22.5"
|
||||||
|
chalk "^2.4.2"
|
||||||
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
|
"@babel/highlight@^7.22.5":
|
||||||
version "7.22.10"
|
version "7.22.10"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7"
|
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7"
|
||||||
integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==
|
integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==
|
||||||
|
@ -306,11 +308,16 @@
|
||||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55"
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55"
|
||||||
integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==
|
integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==
|
||||||
|
|
||||||
"@babel/parser@^7.22.11", "@babel/parser@^7.22.5":
|
"@babel/parser@^7.22.11":
|
||||||
version "7.22.11"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.11.tgz#becf8ee33aad2a35ed5607f521fe6e72a615f905"
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.11.tgz#becf8ee33aad2a35ed5607f521fe6e72a615f905"
|
||||||
integrity sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g==
|
integrity sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g==
|
||||||
|
|
||||||
|
"@babel/parser@^7.22.5":
|
||||||
|
version "7.22.14"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.14.tgz#c7de58e8de106e88efca42ce17f0033209dfd245"
|
||||||
|
integrity sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==
|
||||||
|
|
||||||
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5":
|
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5":
|
||||||
version "7.22.5"
|
version "7.22.5"
|
||||||
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.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e"
|
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.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e"
|
||||||
|
@ -487,10 +494,10 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-async-generator-functions@^7.22.10":
|
"@babel/plugin-transform-async-generator-functions@^7.22.11":
|
||||||
version "7.22.10"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz#45946cd17f915b10e65c29b8ed18a0a50fc648c8"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz#dbe3b1ff5a52e2e5edc4b19a60d325a675ed2649"
|
||||||
integrity sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==
|
integrity sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-environment-visitor" "^7.22.5"
|
"@babel/helper-environment-visitor" "^7.22.5"
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
|
@ -528,12 +535,12 @@
|
||||||
"@babel/helper-create-class-features-plugin" "^7.22.5"
|
"@babel/helper-create-class-features-plugin" "^7.22.5"
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-class-static-block@^7.22.5":
|
"@babel/plugin-transform-class-static-block@^7.22.11":
|
||||||
version "7.22.5"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974"
|
||||||
integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==
|
integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-create-class-features-plugin" "^7.22.5"
|
"@babel/helper-create-class-features-plugin" "^7.22.11"
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/plugin-syntax-class-static-block" "^7.14.5"
|
"@babel/plugin-syntax-class-static-block" "^7.14.5"
|
||||||
|
|
||||||
|
@ -582,10 +589,10 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-dynamic-import@^7.22.5":
|
"@babel/plugin-transform-dynamic-import@^7.22.11":
|
||||||
version "7.22.5"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa"
|
||||||
integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==
|
integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
|
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
|
||||||
|
@ -598,10 +605,10 @@
|
||||||
"@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5"
|
"@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5"
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-export-namespace-from@^7.22.5":
|
"@babel/plugin-transform-export-namespace-from@^7.22.11":
|
||||||
version "7.22.5"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c"
|
||||||
integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==
|
integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
|
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
|
||||||
|
@ -622,10 +629,10 @@
|
||||||
"@babel/helper-function-name" "^7.22.5"
|
"@babel/helper-function-name" "^7.22.5"
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-json-strings@^7.22.5":
|
"@babel/plugin-transform-json-strings@^7.22.11":
|
||||||
version "7.22.5"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835"
|
||||||
integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==
|
integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/plugin-syntax-json-strings" "^7.8.3"
|
"@babel/plugin-syntax-json-strings" "^7.8.3"
|
||||||
|
@ -637,10 +644,10 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-logical-assignment-operators@^7.22.5":
|
"@babel/plugin-transform-logical-assignment-operators@^7.22.11":
|
||||||
version "7.22.5"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c"
|
||||||
integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==
|
integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
|
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
|
||||||
|
@ -669,22 +676,13 @@
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/helper-simple-access" "^7.22.5"
|
"@babel/helper-simple-access" "^7.22.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-modules-commonjs@^7.22.5":
|
"@babel/plugin-transform-modules-systemjs@^7.22.11":
|
||||||
version "7.22.5"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1"
|
||||||
integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==
|
integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==
|
||||||
dependencies:
|
|
||||||
"@babel/helper-module-transforms" "^7.22.5"
|
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
|
||||||
"@babel/helper-simple-access" "^7.22.5"
|
|
||||||
|
|
||||||
"@babel/plugin-transform-modules-systemjs@^7.22.5":
|
|
||||||
version "7.22.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496"
|
|
||||||
integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==
|
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-hoist-variables" "^7.22.5"
|
"@babel/helper-hoist-variables" "^7.22.5"
|
||||||
"@babel/helper-module-transforms" "^7.22.5"
|
"@babel/helper-module-transforms" "^7.22.9"
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/helper-validator-identifier" "^7.22.5"
|
"@babel/helper-validator-identifier" "^7.22.5"
|
||||||
|
|
||||||
|
@ -711,7 +709,7 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-nullish-coalescing-operator@^7.22.3", "@babel/plugin-transform-nullish-coalescing-operator@^7.22.5":
|
"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11", "@babel/plugin-transform-nullish-coalescing-operator@^7.22.3":
|
||||||
version "7.22.11"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc"
|
||||||
integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==
|
integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==
|
||||||
|
@ -719,21 +717,21 @@
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
|
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
|
||||||
|
|
||||||
"@babel/plugin-transform-numeric-separator@^7.22.5":
|
"@babel/plugin-transform-numeric-separator@^7.22.11":
|
||||||
version "7.22.5"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd"
|
||||||
integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==
|
integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
|
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
|
||||||
|
|
||||||
"@babel/plugin-transform-object-rest-spread@^7.22.5":
|
"@babel/plugin-transform-object-rest-spread@^7.22.11":
|
||||||
version "7.22.5"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz#dbbb06ce783cd994a8f430d8cefa553e9b42ca62"
|
||||||
integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==
|
integrity sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/compat-data" "^7.22.5"
|
"@babel/compat-data" "^7.22.9"
|
||||||
"@babel/helper-compilation-targets" "^7.22.5"
|
"@babel/helper-compilation-targets" "^7.22.10"
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
|
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
|
||||||
"@babel/plugin-transform-parameters" "^7.22.5"
|
"@babel/plugin-transform-parameters" "^7.22.5"
|
||||||
|
@ -746,18 +744,18 @@
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/helper-replace-supers" "^7.22.5"
|
"@babel/helper-replace-supers" "^7.22.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-optional-catch-binding@^7.22.5":
|
"@babel/plugin-transform-optional-catch-binding@^7.22.11":
|
||||||
version "7.22.5"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0"
|
||||||
integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==
|
integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
|
"@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
|
||||||
|
|
||||||
"@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5":
|
"@babel/plugin-transform-optional-chaining@^7.22.12", "@babel/plugin-transform-optional-chaining@^7.22.5":
|
||||||
version "7.22.10"
|
version "7.22.12"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz#076d28a7e074392e840d4ae587d83445bac0372a"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz#d7ebf6a88cd2f4d307b0e000ab630acd8124b333"
|
||||||
integrity sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==
|
integrity sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
|
"@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
|
||||||
|
@ -778,13 +776,13 @@
|
||||||
"@babel/helper-create-class-features-plugin" "^7.22.5"
|
"@babel/helper-create-class-features-plugin" "^7.22.5"
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-private-property-in-object@^7.22.5":
|
"@babel/plugin-transform-private-property-in-object@^7.22.11":
|
||||||
version "7.22.5"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1"
|
||||||
integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==
|
integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-annotate-as-pure" "^7.22.5"
|
"@babel/helper-annotate-as-pure" "^7.22.5"
|
||||||
"@babel/helper-create-class-features-plugin" "^7.22.5"
|
"@babel/helper-create-class-features-plugin" "^7.22.11"
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
|
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
|
||||||
|
|
||||||
|
@ -948,9 +946,9 @@
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
|
|
||||||
"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.22.4":
|
"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.22.4":
|
||||||
version "7.22.10"
|
version "7.22.14"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.10.tgz#3263b9fe2c8823d191d28e61eac60a79f9ce8a0f"
|
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.14.tgz#1cbb468d899f64fa71c53446f13b7ff8c0005cc1"
|
||||||
integrity sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==
|
integrity sha512-daodMIoVo+ol/g+//c/AH+szBkFj4STQUikvBijRGL72Ph+w+AMTSh55DUETe8KJlPlDT1k/mp7NBfOuiWmoig==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/compat-data" "^7.22.9"
|
"@babel/compat-data" "^7.22.9"
|
||||||
"@babel/helper-compilation-targets" "^7.22.10"
|
"@babel/helper-compilation-targets" "^7.22.10"
|
||||||
|
@ -978,41 +976,41 @@
|
||||||
"@babel/plugin-syntax-top-level-await" "^7.14.5"
|
"@babel/plugin-syntax-top-level-await" "^7.14.5"
|
||||||
"@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
|
"@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
|
||||||
"@babel/plugin-transform-arrow-functions" "^7.22.5"
|
"@babel/plugin-transform-arrow-functions" "^7.22.5"
|
||||||
"@babel/plugin-transform-async-generator-functions" "^7.22.10"
|
"@babel/plugin-transform-async-generator-functions" "^7.22.11"
|
||||||
"@babel/plugin-transform-async-to-generator" "^7.22.5"
|
"@babel/plugin-transform-async-to-generator" "^7.22.5"
|
||||||
"@babel/plugin-transform-block-scoped-functions" "^7.22.5"
|
"@babel/plugin-transform-block-scoped-functions" "^7.22.5"
|
||||||
"@babel/plugin-transform-block-scoping" "^7.22.10"
|
"@babel/plugin-transform-block-scoping" "^7.22.10"
|
||||||
"@babel/plugin-transform-class-properties" "^7.22.5"
|
"@babel/plugin-transform-class-properties" "^7.22.5"
|
||||||
"@babel/plugin-transform-class-static-block" "^7.22.5"
|
"@babel/plugin-transform-class-static-block" "^7.22.11"
|
||||||
"@babel/plugin-transform-classes" "^7.22.6"
|
"@babel/plugin-transform-classes" "^7.22.6"
|
||||||
"@babel/plugin-transform-computed-properties" "^7.22.5"
|
"@babel/plugin-transform-computed-properties" "^7.22.5"
|
||||||
"@babel/plugin-transform-destructuring" "^7.22.10"
|
"@babel/plugin-transform-destructuring" "^7.22.10"
|
||||||
"@babel/plugin-transform-dotall-regex" "^7.22.5"
|
"@babel/plugin-transform-dotall-regex" "^7.22.5"
|
||||||
"@babel/plugin-transform-duplicate-keys" "^7.22.5"
|
"@babel/plugin-transform-duplicate-keys" "^7.22.5"
|
||||||
"@babel/plugin-transform-dynamic-import" "^7.22.5"
|
"@babel/plugin-transform-dynamic-import" "^7.22.11"
|
||||||
"@babel/plugin-transform-exponentiation-operator" "^7.22.5"
|
"@babel/plugin-transform-exponentiation-operator" "^7.22.5"
|
||||||
"@babel/plugin-transform-export-namespace-from" "^7.22.5"
|
"@babel/plugin-transform-export-namespace-from" "^7.22.11"
|
||||||
"@babel/plugin-transform-for-of" "^7.22.5"
|
"@babel/plugin-transform-for-of" "^7.22.5"
|
||||||
"@babel/plugin-transform-function-name" "^7.22.5"
|
"@babel/plugin-transform-function-name" "^7.22.5"
|
||||||
"@babel/plugin-transform-json-strings" "^7.22.5"
|
"@babel/plugin-transform-json-strings" "^7.22.11"
|
||||||
"@babel/plugin-transform-literals" "^7.22.5"
|
"@babel/plugin-transform-literals" "^7.22.5"
|
||||||
"@babel/plugin-transform-logical-assignment-operators" "^7.22.5"
|
"@babel/plugin-transform-logical-assignment-operators" "^7.22.11"
|
||||||
"@babel/plugin-transform-member-expression-literals" "^7.22.5"
|
"@babel/plugin-transform-member-expression-literals" "^7.22.5"
|
||||||
"@babel/plugin-transform-modules-amd" "^7.22.5"
|
"@babel/plugin-transform-modules-amd" "^7.22.5"
|
||||||
"@babel/plugin-transform-modules-commonjs" "^7.22.5"
|
"@babel/plugin-transform-modules-commonjs" "^7.22.11"
|
||||||
"@babel/plugin-transform-modules-systemjs" "^7.22.5"
|
"@babel/plugin-transform-modules-systemjs" "^7.22.11"
|
||||||
"@babel/plugin-transform-modules-umd" "^7.22.5"
|
"@babel/plugin-transform-modules-umd" "^7.22.5"
|
||||||
"@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
|
"@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
|
||||||
"@babel/plugin-transform-new-target" "^7.22.5"
|
"@babel/plugin-transform-new-target" "^7.22.5"
|
||||||
"@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5"
|
"@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11"
|
||||||
"@babel/plugin-transform-numeric-separator" "^7.22.5"
|
"@babel/plugin-transform-numeric-separator" "^7.22.11"
|
||||||
"@babel/plugin-transform-object-rest-spread" "^7.22.5"
|
"@babel/plugin-transform-object-rest-spread" "^7.22.11"
|
||||||
"@babel/plugin-transform-object-super" "^7.22.5"
|
"@babel/plugin-transform-object-super" "^7.22.5"
|
||||||
"@babel/plugin-transform-optional-catch-binding" "^7.22.5"
|
"@babel/plugin-transform-optional-catch-binding" "^7.22.11"
|
||||||
"@babel/plugin-transform-optional-chaining" "^7.22.10"
|
"@babel/plugin-transform-optional-chaining" "^7.22.12"
|
||||||
"@babel/plugin-transform-parameters" "^7.22.5"
|
"@babel/plugin-transform-parameters" "^7.22.5"
|
||||||
"@babel/plugin-transform-private-methods" "^7.22.5"
|
"@babel/plugin-transform-private-methods" "^7.22.5"
|
||||||
"@babel/plugin-transform-private-property-in-object" "^7.22.5"
|
"@babel/plugin-transform-private-property-in-object" "^7.22.11"
|
||||||
"@babel/plugin-transform-property-literals" "^7.22.5"
|
"@babel/plugin-transform-property-literals" "^7.22.5"
|
||||||
"@babel/plugin-transform-regenerator" "^7.22.10"
|
"@babel/plugin-transform-regenerator" "^7.22.10"
|
||||||
"@babel/plugin-transform-reserved-words" "^7.22.5"
|
"@babel/plugin-transform-reserved-words" "^7.22.5"
|
||||||
|
@ -1026,7 +1024,7 @@
|
||||||
"@babel/plugin-transform-unicode-regex" "^7.22.5"
|
"@babel/plugin-transform-unicode-regex" "^7.22.5"
|
||||||
"@babel/plugin-transform-unicode-sets-regex" "^7.22.5"
|
"@babel/plugin-transform-unicode-sets-regex" "^7.22.5"
|
||||||
"@babel/preset-modules" "0.1.6-no-external-plugins"
|
"@babel/preset-modules" "0.1.6-no-external-plugins"
|
||||||
"@babel/types" "^7.22.10"
|
"@babel/types" "^7.22.11"
|
||||||
babel-plugin-polyfill-corejs2 "^0.4.5"
|
babel-plugin-polyfill-corejs2 "^0.4.5"
|
||||||
babel-plugin-polyfill-corejs3 "^0.8.3"
|
babel-plugin-polyfill-corejs3 "^0.8.3"
|
||||||
babel-plugin-polyfill-regenerator "^0.5.2"
|
babel-plugin-polyfill-regenerator "^0.5.2"
|
||||||
|
@ -1125,7 +1123,7 @@
|
||||||
debug "^4.1.0"
|
debug "^4.1.0"
|
||||||
globals "^11.1.0"
|
globals "^11.1.0"
|
||||||
|
|
||||||
"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
|
"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.3.3":
|
||||||
version "7.22.10"
|
version "7.22.10"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03"
|
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03"
|
||||||
integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==
|
integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==
|
||||||
|
@ -1143,7 +1141,7 @@
|
||||||
"@babel/helper-validator-identifier" "^7.22.5"
|
"@babel/helper-validator-identifier" "^7.22.5"
|
||||||
to-fast-properties "^2.0.0"
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
"@babel/types@^7.22.10", "@babel/types@^7.22.11", "@babel/types@^7.22.5":
|
"@babel/types@^7.22.10", "@babel/types@^7.22.11", "@babel/types@^7.22.5", "@babel/types@^7.4.4":
|
||||||
version "7.22.11"
|
version "7.22.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.11.tgz#0e65a6a1d4d9cbaa892b2213f6159485fe632ea2"
|
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.11.tgz#0e65a6a1d4d9cbaa892b2213f6159485fe632ea2"
|
||||||
integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==
|
integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==
|
||||||
|
@ -2923,16 +2921,16 @@ acorn@^6.4.1:
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
|
||||||
integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
|
integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
|
||||||
|
|
||||||
acorn@^8.0.4, acorn@^8.8.2:
|
acorn@^8.0.4, acorn@^8.1.0, acorn@^8.8.1, acorn@^8.9.0:
|
||||||
version "8.8.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
|
|
||||||
integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
|
|
||||||
|
|
||||||
acorn@^8.1.0, acorn@^8.8.1, acorn@^8.9.0:
|
|
||||||
version "8.10.0"
|
version "8.10.0"
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
|
||||||
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
|
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
|
||||||
|
|
||||||
|
acorn@^8.8.2:
|
||||||
|
version "8.8.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
|
||||||
|
integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
|
||||||
|
|
||||||
agent-base@6:
|
agent-base@6:
|
||||||
version "6.0.2"
|
version "6.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
|
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
|
||||||
|
@ -3942,9 +3940,9 @@ caniuse-lite@^1.0.30001502:
|
||||||
integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==
|
integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==
|
||||||
|
|
||||||
caniuse-lite@^1.0.30001517:
|
caniuse-lite@^1.0.30001517:
|
||||||
version "1.0.30001522"
|
version "1.0.30001524"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz#44b87a406c901269adcdb834713e23582dd71856"
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz#1e14bce4f43c41a7deaeb5ebfe86664fe8dadb80"
|
||||||
integrity sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==
|
integrity sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==
|
||||||
|
|
||||||
caniuse-lite@^1.0.30001520:
|
caniuse-lite@^1.0.30001520:
|
||||||
version "1.0.30001520"
|
version "1.0.30001520"
|
||||||
|
@ -4345,11 +4343,11 @@ copy-descriptor@^0.1.0:
|
||||||
integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
|
integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
|
||||||
|
|
||||||
core-js-compat@^3.31.0:
|
core-js-compat@^3.31.0:
|
||||||
version "3.32.0"
|
version "3.32.1"
|
||||||
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.0.tgz#f41574b6893ab15ddb0ac1693681bd56c8550a90"
|
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964"
|
||||||
integrity sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==
|
integrity sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==
|
||||||
dependencies:
|
dependencies:
|
||||||
browserslist "^4.21.9"
|
browserslist "^4.21.10"
|
||||||
|
|
||||||
core-js@^2.5.0:
|
core-js@^2.5.0:
|
||||||
version "2.6.12"
|
version "2.6.12"
|
||||||
|
@ -5102,9 +5100,9 @@ electron-to-chromium@^1.4.428:
|
||||||
integrity sha512-/g3UyNDmDd6ebeWapmAoiyy+Sy2HyJ+/X8KyvNeHfKRFfHaA2W8oF5fxD5F3tjBDcjpwo0iek6YNgxNXDBoEtA==
|
integrity sha512-/g3UyNDmDd6ebeWapmAoiyy+Sy2HyJ+/X8KyvNeHfKRFfHaA2W8oF5fxD5F3tjBDcjpwo0iek6YNgxNXDBoEtA==
|
||||||
|
|
||||||
electron-to-chromium@^1.4.477:
|
electron-to-chromium@^1.4.477:
|
||||||
version "1.4.500"
|
version "1.4.505"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.500.tgz#7dd05fdfbe02ed34b9f6099cfe01407b473d5af7"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.505.tgz#00571ade5975b58413f0f56a665b065bfc29cdfc"
|
||||||
integrity sha512-P38NO8eOuWOKY1sQk5yE0crNtrjgjJj6r3NrbIKtG18KzCHmHE2Bt+aQA7/y0w3uYsHWxDa6icOohzjLJ4vJ4A==
|
integrity sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ==
|
||||||
|
|
||||||
elliptic@^6.5.3:
|
elliptic@^6.5.3:
|
||||||
version "6.5.4"
|
version "6.5.4"
|
||||||
|
@ -6248,9 +6246,9 @@ glob-parent@^6.0.2:
|
||||||
is-glob "^4.0.3"
|
is-glob "^4.0.3"
|
||||||
|
|
||||||
glob@^10.2.5, glob@^10.2.6:
|
glob@^10.2.5, glob@^10.2.6:
|
||||||
version "10.3.3"
|
version "10.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.3.tgz#8360a4ffdd6ed90df84aa8d52f21f452e86a123b"
|
resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.4.tgz#c85c9c7ab98669102b6defda76d35c5b1ef9766f"
|
||||||
integrity sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==
|
integrity sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
foreground-child "^3.1.0"
|
foreground-child "^3.1.0"
|
||||||
jackspeak "^2.0.3"
|
jackspeak "^2.0.3"
|
||||||
|
@ -7353,9 +7351,9 @@ iterator.prototype@^1.1.0:
|
||||||
reflect.getprototypeof "^1.0.3"
|
reflect.getprototypeof "^1.0.3"
|
||||||
|
|
||||||
jackspeak@^2.0.3:
|
jackspeak@^2.0.3:
|
||||||
version "2.2.1"
|
version "2.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6"
|
resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.1.tgz#ce2effa4c458e053640e61938865a5b5fae98456"
|
||||||
integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==
|
integrity sha512-4iSY3Bh1Htv+kLhiiZunUhQ+OYXIn0ze3ulq8JeWrFKmhPAJSySV2+kdtRh2pGcCeF0s6oR8Oc+pYZynJj4t8A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@isaacs/cliui" "^8.0.2"
|
"@isaacs/cliui" "^8.0.2"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
|
@ -8117,6 +8115,16 @@ lodash.debounce@^4.0.8:
|
||||||
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
|
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
|
||||||
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
|
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
|
||||||
|
|
||||||
|
lodash.escape@^4.0.1:
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98"
|
||||||
|
integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==
|
||||||
|
|
||||||
|
lodash.flatten@^4.4.0:
|
||||||
|
version "4.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
|
||||||
|
integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==
|
||||||
|
|
||||||
lodash.get@^4.0:
|
lodash.get@^4.0:
|
||||||
version "4.4.2"
|
version "4.4.2"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
|
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
|
||||||
|
@ -8127,6 +8135,11 @@ lodash.has@^4.0:
|
||||||
resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862"
|
resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862"
|
||||||
integrity sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==
|
integrity sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==
|
||||||
|
|
||||||
|
lodash.invokemap@^4.6.0:
|
||||||
|
version "4.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz#1748cda5d8b0ef8369c4eb3ec54c21feba1f2d62"
|
||||||
|
integrity sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==
|
||||||
|
|
||||||
lodash.isboolean@^3.0.3:
|
lodash.isboolean@^3.0.3:
|
||||||
version "3.0.3"
|
version "3.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
|
resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
|
||||||
|
@ -8152,6 +8165,11 @@ lodash.merge@^4.6.2:
|
||||||
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
||||||
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
|
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
|
||||||
|
|
||||||
|
lodash.pullall@^4.2.0:
|
||||||
|
version "4.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.pullall/-/lodash.pullall-4.2.0.tgz#9d98b8518b7c965b0fae4099bd9fb7df8bbf38ba"
|
||||||
|
integrity sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==
|
||||||
|
|
||||||
lodash.sortby@^4.7.0:
|
lodash.sortby@^4.7.0:
|
||||||
version "4.7.0"
|
version "4.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
||||||
|
@ -8167,6 +8185,11 @@ lodash.uniq@^4.5.0:
|
||||||
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||||
integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
|
integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
|
||||||
|
|
||||||
|
lodash.uniqby@^4.7.0:
|
||||||
|
version "4.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302"
|
||||||
|
integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==
|
||||||
|
|
||||||
lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21:
|
lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21:
|
||||||
version "4.17.21"
|
version "4.17.21"
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||||
|
@ -8209,9 +8232,9 @@ lru-cache@^6.0.0:
|
||||||
yallist "^4.0.0"
|
yallist "^4.0.0"
|
||||||
|
|
||||||
"lru-cache@^9.1.1 || ^10.0.0":
|
"lru-cache@^9.1.1 || ^10.0.0":
|
||||||
version "10.0.0"
|
version "10.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61"
|
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a"
|
||||||
integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==
|
integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==
|
||||||
|
|
||||||
lz-string@^1.5.0:
|
lz-string@^1.5.0:
|
||||||
version "1.5.0"
|
version "1.5.0"
|
||||||
|
@ -8548,9 +8571,9 @@ minipass@^5.0.0:
|
||||||
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
|
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
|
||||||
|
|
||||||
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
|
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
|
||||||
version "7.0.2"
|
version "7.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.2.tgz#58a82b7d81c7010da5bd4b2c0c85ac4b4ec5131e"
|
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974"
|
||||||
integrity sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==
|
integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==
|
||||||
|
|
||||||
minizlib@^2.1.1:
|
minizlib@^2.1.1:
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
|
@ -9647,9 +9670,9 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
|
||||||
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
||||||
|
|
||||||
postcss@^8.2.15, postcss@^8.4.24, postcss@^8.4.25:
|
postcss@^8.2.15, postcss@^8.4.24, postcss@^8.4.25:
|
||||||
version "8.4.28"
|
version "8.4.29"
|
||||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.28.tgz#c6cc681ed00109072816e1557f889ef51cf950a5"
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd"
|
||||||
integrity sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==
|
integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==
|
||||||
dependencies:
|
dependencies:
|
||||||
nanoid "^3.3.6"
|
nanoid "^3.3.6"
|
||||||
picocolors "^1.0.0"
|
picocolors "^1.0.0"
|
||||||
|
@ -10957,14 +10980,14 @@ signal-exit@^4.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
|
||||||
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
|
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
|
||||||
|
|
||||||
sirv@^1.0.7:
|
sirv@^2.0.3:
|
||||||
version "1.0.19"
|
version "2.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49"
|
resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.3.tgz#ca5868b87205a74bef62a469ed0296abceccd446"
|
||||||
integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==
|
integrity sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@polka/url" "^1.0.0-next.20"
|
"@polka/url" "^1.0.0-next.20"
|
||||||
mrmime "^1.0.0"
|
mrmime "^1.0.0"
|
||||||
totalist "^1.0.0"
|
totalist "^3.0.0"
|
||||||
|
|
||||||
sisteransi@^1.0.5:
|
sisteransi@^1.0.5:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
|
@ -11397,7 +11420,6 @@ stringz@^2.1.0:
|
||||||
char-regex "^1.0.2"
|
char-regex "^1.0.2"
|
||||||
|
|
||||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
"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"
|
version "6.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||||
|
@ -11884,10 +11906,10 @@ toidentifier@1.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
||||||
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
||||||
|
|
||||||
totalist@^1.0.0:
|
totalist@^3.0.0:
|
||||||
version "1.1.0"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df"
|
resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8"
|
||||||
integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==
|
integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
|
||||||
|
|
||||||
tough-cookie@^4.1.2:
|
tough-cookie@^4.1.2:
|
||||||
version "4.1.3"
|
version "4.1.3"
|
||||||
|
@ -12445,19 +12467,26 @@ webpack-assets-manifest@^4.0.6:
|
||||||
webpack-sources "^1.0"
|
webpack-sources "^1.0"
|
||||||
|
|
||||||
webpack-bundle-analyzer@^4.8.0:
|
webpack-bundle-analyzer@^4.8.0:
|
||||||
version "4.9.0"
|
version "4.9.1"
|
||||||
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz#fc093c4ab174fd3dcbd1c30b763f56d10141209d"
|
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz#d00bbf3f17500c10985084f22f1a2bf45cb2f09d"
|
||||||
integrity sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw==
|
integrity sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@discoveryjs/json-ext" "0.5.7"
|
"@discoveryjs/json-ext" "0.5.7"
|
||||||
acorn "^8.0.4"
|
acorn "^8.0.4"
|
||||||
acorn-walk "^8.0.0"
|
acorn-walk "^8.0.0"
|
||||||
chalk "^4.1.0"
|
|
||||||
commander "^7.2.0"
|
commander "^7.2.0"
|
||||||
|
escape-string-regexp "^4.0.0"
|
||||||
gzip-size "^6.0.0"
|
gzip-size "^6.0.0"
|
||||||
lodash "^4.17.20"
|
is-plain-object "^5.0.0"
|
||||||
|
lodash.debounce "^4.0.8"
|
||||||
|
lodash.escape "^4.0.1"
|
||||||
|
lodash.flatten "^4.4.0"
|
||||||
|
lodash.invokemap "^4.6.0"
|
||||||
|
lodash.pullall "^4.2.0"
|
||||||
|
lodash.uniqby "^4.7.0"
|
||||||
opener "^1.5.2"
|
opener "^1.5.2"
|
||||||
sirv "^1.0.7"
|
picocolors "^1.0.0"
|
||||||
|
sirv "^2.0.3"
|
||||||
ws "^7.3.1"
|
ws "^7.3.1"
|
||||||
|
|
||||||
webpack-cli@^3.3.12:
|
webpack-cli@^3.3.12:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue