>
+ <% if header? %>
+ <%= header%>
+ <%- end %>
<%#
NOTE: content? is not always working as described, and is returning a proc in some cases rather than a boolean
%>
<% if content.present? %>
-
>
+
<%= content %>
<% end %>
+
<% if footer? %>
-
+ <%= footer %>
<% end %>
diff --git a/app/components/card_component.rb b/app/components/card_component.rb
index 9e55bf761..c305f9f8a 100644
--- a/app/components/card_component.rb
+++ b/app/components/card_component.rb
@@ -1,32 +1,17 @@
class CardComponent < ApplicationComponent
- renders_one :footer
+ HEADER_VARIANTS = {default: "p-2 sm:p-4", no_padding: ""}
+ renders_one :header, ->(variant: :default, &block) {
+ content_tag(:header, class: HEADER_VARIANTS.fetch(variant), &block)
+ }
- private
-
- def card_classes_content
- [
- "p-4",
- "sm:p-6"
- ].compact.join(" ")
- end
-
- def card_classes_wrapper
- [
- "shadow",
- "rounded-lg",
- "h-full",
- "bg-white",
- "group-hover:bg-slate-50"
- ].compact.join(" ")
- end
-
- def card_classes_footer
- [
- "bg-orange-50",
- "p-4",
- "sm:p-6",
- # content? is not always working as described, and is returning a proc in some cases rather than a boolean
- ("rounded-t-none" if content.blank?)
- ].compact.join(" ")
- end
+ DEFAULT_FOOTER = "bg-slate-50 p-2 sm:p-4"
+ FOOTER_VARIANTS = {
+ default: DEFAULT_FOOTER,
+ action_bar: [DEFAULT_FOOTER, "flex flex-row justify-between"].join(" ")
+ }
+ renders_one :footer, ->(variant: :default, &block) {
+ classes = FOOTER_VARIANTS.fetch(variant)
+ classes += " rounded-t-none" unless content? || header?
+ content_tag(:footer, class: classes, &block)
+ }
end
diff --git a/app/components/marketplace/stripe_overview_component/stripe_overview_component.html.erb b/app/components/marketplace/stripe_overview_component/stripe_overview_component.html.erb
index d66281c94..f0dac4f63 100644
--- a/app/components/marketplace/stripe_overview_component/stripe_overview_component.html.erb
+++ b/app/components/marketplace/stripe_overview_component/stripe_overview_component.html.erb
@@ -1,22 +1,23 @@
-<%= render CardComponent.new(dom_id: "stripe_overview", classes: "flex flex-col h-full
-") do %>
+<%= render CardComponent.new(dom_id: "stripe_overview") do |card| %>
<%- if marketplace.stripe_api_key? %>
-
- <%= marketplace_stripe_utility.name %>
-
-
+ <%- card.with_header do %>
+ <%= marketplace_stripe_utility.name %>
+ <%- end %>
+
+ <%- card.with_footer(variant: :action_bar) do %>
<%= render ButtonComponent.new(
- label: "View #{t('marketplace.stripe_accounts.show.link_to')}",
- title: "View #{t('marketplace.stripe_accounts.show.link_to')}",
- href: marketplace.location(:index, child: :stripe_account),
- method: :get,
- scheme: :secondary) %>
-
+ label: "View #{t('marketplace.stripe_accounts.show.link_to')}",
+ title: "View #{t('marketplace.stripe_accounts.show.link_to')}",
+ href: marketplace.location(:index, child: :stripe_account),
+ method: :get,
+ scheme: :secondary) %>
+ <%- end %>
<%- else %>
-
To start accepting payments, add your Stripe Account.
-
+ <%- card.with_header do %>
+ To start accepting payments, add your Stripe Account.
+ <%- end %>
+
+ <%- card.with_footer(variant: :action_bar) do %>
<%= render ButtonComponent.new(
label: "Add #{t('marketplace.stripe_accounts.show.link_to')}",
title: "Add #{t('marketplace.stripe_accounts.show.link_to')}",
@@ -25,6 +26,6 @@
scheme: :secondary
)
%>
-
+ <%- end %>
<%- end %>
<%- end %>
diff --git a/app/controllers/rooms_controller.rb b/app/controllers/rooms_controller.rb
index adf5a983e..9ea5ac400 100644
--- a/app/controllers/rooms_controller.rb
+++ b/app/controllers/rooms_controller.rb
@@ -25,7 +25,17 @@ def create
def update
respond_to do |format|
- if room.update(room_params)
+ # TODO: Move logic for Media resource management to a dedicated controller (see: https://github.com/zinc-collective/convene/pull/2101/files#r1464115624)
+ new_media = Media.create
+ new_media.upload.attach(room_params[:hero_image_upload])
+ room_params_for_update = {}.merge(
+ room_params.except(:hero_image_upload),
+ {
+ hero_image: new_media
+ }
+ )
+
+ if room.update(room_params_for_update)
format.html do
redirect_to [:edit, room.space], notice: t(".success", room_name: room.name)
end
diff --git a/app/furniture/marketplace/cart_product.rb b/app/furniture/marketplace/cart_product.rb
index 61b585f29..dce1b0e2b 100644
--- a/app/furniture/marketplace/cart_product.rb
+++ b/app/furniture/marketplace/cart_product.rb
@@ -25,6 +25,10 @@ def price_total
product.price * quantity
end
+ def quantity_picker
+ QuantityPicker.new(cart_product: self)
+ end
+
private
def editable_cart
diff --git a/app/furniture/marketplace/cart_product/quantity_picker.rb b/app/furniture/marketplace/cart_product/quantity_picker.rb
new file mode 100644
index 000000000..6a454472b
--- /dev/null
+++ b/app/furniture/marketplace/cart_product/quantity_picker.rb
@@ -0,0 +1,6 @@
+class Marketplace
+ class CartProduct::QuantityPicker < Model
+ attr_accessor :cart_product
+ delegate :location, :quantity, to: :cart_product
+ end
+end
diff --git a/app/furniture/marketplace/cart_product/quantity_pickers/_quantity_picker.html.erb b/app/furniture/marketplace/cart_product/quantity_pickers/_quantity_picker.html.erb
new file mode 100644
index 000000000..1993d6eaf
--- /dev/null
+++ b/app/furniture/marketplace/cart_product/quantity_pickers/_quantity_picker.html.erb
@@ -0,0 +1,13 @@
+
+ <%- if quantity_picker.quantity < 1%>
+
+ <%- elsif quantity_picker.quantity == 1 %>
+ <%= button_to("🗑️", quantity_picker.location, method: :delete) %>
+ <%- else %>
+ <%= button_to("➖", quantity_picker.location, method: :put, params: { cart_product: { quantity: quantity_picker.quantity - 1 } }) %>
+ <%- end %>
+
+ <%= quantity_picker.quantity %>
+
+ <%= button_to("➕", quantity_picker.location, method: :put, params: { cart_product: { quantity: quantity_picker.quantity + 1 } }) %>
+
diff --git a/app/furniture/marketplace/cart_product_component.html.erb b/app/furniture/marketplace/cart_product_component.html.erb
index 8af527a27..a0cae15e0 100644
--- a/app/furniture/marketplace/cart_product_component.html.erb
+++ b/app/furniture/marketplace/cart_product_component.html.erb
@@ -1,16 +1,7 @@
- <%- if product.photo.present? %>
-
- <%= image_tag product.photo.variant(resize_to_limit: [150, 150]).processed.url, class: "mx-auto h-40 overflow-hidden object-center rounded-lg"
- %>
-
- <%=product.name%>
-
-
- <%- else %>
+
<%= product.name %>
- <%- end %>
<%= product.class.human_attribute_name(:price) %>
@@ -27,15 +18,10 @@
<%= humanized_money_with_symbol(product.price) %>
-
- <%= render "buttons/minus", title: t('marketplace.cart_product_component.remove'), method: remove_method,
- disabled: cart_product.quantity.zero?,
- href: remove_href %>
-
- <%= quantity %>
-
- <%= render "buttons/plus", method: add_method, title: t('marketplace.cart_product_component.add'),
- href: add_href %>
-
+ <%- if cart_product.quantity.zero? %>
+ <%= button_to("Add to Cart", cart.location(child: :cart_products), method: :post, params: { cart_product: { product_id: product.id, quantity: 1 } }) %>
+ <%- else %>
+ <%= render cart_product.quantity_picker %>
+ <%- end %>
diff --git a/app/furniture/marketplace/cart_product_component.rb b/app/furniture/marketplace/cart_product_component.rb
index d89c9ed64..06df98d22 100644
--- a/app/furniture/marketplace/cart_product_component.rb
+++ b/app/furniture/marketplace/cart_product_component.rb
@@ -1,7 +1,7 @@
class Marketplace
class CartProductComponent < ApplicationComponent
attr_accessor :cart_product
- delegate :name, :description, :location, to: :cart_product
+ delegate :name, :description, :quantity, :location, to: :cart_product
delegate :cart, :product, to: :cart_product
def initialize(cart_product:, **kwargs)
@@ -10,36 +10,8 @@ def initialize(cart_product:, **kwargs)
self.cart_product = cart_product
end
- def quantity
- cart_product.destroyed? ? 0 : cart_product.quantity
- end
-
- def add_quantity
- quantity + 1
- end
-
- def add_method
- (add_quantity == 1) ? :post : :put
- end
-
- def add_href
- cart_product.location(query_params: {cart_product: {quantity: add_quantity, product_id: product.id}})
- end
-
- def remove_quantity
- [quantity - 1, 0].max
- end
-
- def remove_method
- remove_quantity.zero? ? :delete : :put
- end
-
- def remove_href
- cart_product.location(query_params: {cart_product: {quantity: remove_quantity, product_id: product.id}})
- end
-
def dom_id
- super(product).gsub("product", "cart_product")
+ super(cart_product)
end
end
end
diff --git a/app/furniture/marketplace/cart_products_controller.rb b/app/furniture/marketplace/cart_products_controller.rb
index 363cf57f2..65567b73e 100644
--- a/app/furniture/marketplace/cart_products_controller.rb
+++ b/app/furniture/marketplace/cart_products_controller.rb
@@ -6,84 +6,47 @@ class CartProductsController < Controller
def create
authorize(cart_product).save
- respond_to do |format|
- format.html do
- if cart_product.errors.empty?
- flash[:notice] = t(".success",
- product: cart_product.product.name.pluralize(cart_product.quantity),
- quantity: cart_product.quantity)
- else
- flash[:alert] = t(".failure",
- product: cart_product.product.name.pluralize(cart_product.quantity),
- quantity: cart_product.quantity)
- end
-
- redirect_to [marketplace.space, marketplace.room]
- end
-
- format.turbo_stream do
- render turbo_stream: [
- turbo_stream.replace(cart_product_component.dom_id, cart_product_component),
- turbo_stream.replace("cart-footer-#{cart.id}",
- partial: "marketplace/carts/footer", locals: {cart: cart}),
- turbo_stream.replace("cart-total-#{cart.id}", partial: "marketplace/carts/total", locals: {cart: cart})
- ]
- end
+ if cart_product.errors.empty?
+ flash[:notice] = t(".success",
+ product: cart_product.product.name.pluralize(cart_product.quantity),
+ quantity: cart_product.quantity)
+ else
+ flash[:alert] = t(".failure",
+ product: cart_product.product.name.pluralize(cart_product.quantity),
+ quantity: cart_product.quantity)
end
+
+ redirect_to marketplace.location
end
def update
authorize(cart_product).update(cart_product_params)
- respond_to do |format|
- format.html do
- if cart_product.errors.empty?
- flash[:notice] =
- t(".success", product: cart_product.product.name.pluralize(cart_product.quantity),
- quantity: cart_product.quantity)
- else
- flash[:alert] =
- t(".failure", product: cart_product.product.name.pluralize(cart_product.quantity),
- quantity: cart_product.quantity)
- end
-
- redirect_to [marketplace.space, marketplace.room]
- end
- format.turbo_stream do
- render turbo_stream: [
- turbo_stream.replace(cart_product_component.dom_id, cart_product_component),
- turbo_stream.replace("cart-footer-#{cart.id}",
- partial: "marketplace/carts/footer", locals: {cart: cart}),
- turbo_stream.replace("cart-total-#{cart.id}", partial: "marketplace/carts/total", locals: {cart: cart})
- ]
- end
+ if cart_product.errors.empty?
+ flash[:notice] =
+ t(".success", product: cart_product.product.name.pluralize(cart_product.quantity),
+ quantity: cart_product.quantity)
+ else
+ flash[:alert] =
+ t(".failure", product: cart_product.product.name.pluralize(cart_product.quantity),
+ quantity: cart_product.quantity)
end
+
+ redirect_to marketplace.location
end
def destroy
authorize(cart_product).destroy
- respond_to do |format|
- format.html do
- if cart_product.destroyed?
- flash[:notice] =
- t(".success", product: cart_product.product.name.pluralize(cart_product.quantity),
- quantity: cart_product.quantity)
- else
- flash[:alert] =
- t(".failure", product: cart_product.product.name.pluralize(cart_product.quantity),
- quantity: cart_product.quantity)
- end
- redirect_to [marketplace.space, marketplace.room]
- end
- format.turbo_stream do
- render turbo_stream: [
- turbo_stream.replace(cart_product_component.dom_id, cart_product_component),
- turbo_stream.replace("cart-footer-#{cart.id}",
- partial: "marketplace/carts/footer", locals: {cart: cart}),
- turbo_stream.replace("cart-total-#{cart.id}", partial: "marketplace/carts/total", locals: {cart: cart})
- ]
- end
+ if cart_product.destroyed?
+ flash[:notice] =
+ t(".success", product: cart_product.product.name.pluralize(cart_product.quantity),
+ quantity: cart_product.quantity)
+ else
+ flash[:alert] =
+ t(".failure", product: cart_product.product.name.pluralize(cart_product.quantity),
+ quantity: cart_product.quantity)
end
+ redirect_to marketplace.location
end
def cart_product_component
diff --git a/app/furniture/marketplace/carts/_cart.html.erb b/app/furniture/marketplace/carts/_cart.html.erb
index 3142a710c..002c8fe9f 100644
--- a/app/furniture/marketplace/carts/_cart.html.erb
+++ b/app/furniture/marketplace/carts/_cart.html.erb
@@ -16,8 +16,8 @@
- <%- cart.marketplace.products.unarchived.each do |product| %>
- <%= render Marketplace::CartProductComponent.new(cart_product: cart.cart_products.find_or_initialize_by(product: product)) %>
+ <%- cart.cart_products.order(created_at: :desc).each do |cart_product| %>
+ <%= render Marketplace::CartProductComponent.new(cart_product:) %>
<%- end %>
<%= render "marketplace/carts/footer", cart: cart %>
diff --git a/app/furniture/marketplace/delivery_area_component.html.erb b/app/furniture/marketplace/delivery_area_component.html.erb
index fb1e5e7f7..10b2363d7 100644
--- a/app/furniture/marketplace/delivery_area_component.html.erb
+++ b/app/furniture/marketplace/delivery_area_component.html.erb
@@ -1,11 +1,14 @@
-<%= render CardComponent.new(dom_id: dom_id(delivery_area), classes: "flex flex-col justify-between gap-y-2 w-full") do %>
-
- <%= label %>
+<%= render CardComponent.new(dom_id: dom_id(delivery_area)) do |card| %>
+ <%- card.with_header do %>
+
+ <%= label %>
+
+
<%- if delivery_area.archived? %>
- (archived)
+ (archived)
<%- end %>
-
+ <%- end %>
-
+ <%- card.with_footer(variant: :action_bar) do %>
<%= render edit_button if edit_button? %>
<%= render archive_button if archive_button? %>
<%= render destroy_button if destroy_button? %>
-
+ <%- end %>
<%- end %>
diff --git a/app/furniture/marketplace/locales/en.yml b/app/furniture/marketplace/locales/en.yml
index c98027191..7c0fe553d 100644
--- a/app/furniture/marketplace/locales/en.yml
+++ b/app/furniture/marketplace/locales/en.yml
@@ -124,9 +124,6 @@ en:
update:
success: "Changed %{quantity} %{product} on Cart"
failure: "Could not change %{quantity} %{product} on Cart"
- cart_product_component:
- remove: Remove from Cart
- add: Add to Cart
payment_settings:
index:
link_to: "Payment Settings"
diff --git a/app/furniture/marketplace/marketplace_component.html.erb b/app/furniture/marketplace/marketplace_component.html.erb
index 836b9e305..ecdc2adaf 100644
--- a/app/furniture/marketplace/marketplace_component.html.erb
+++ b/app/furniture/marketplace/marketplace_component.html.erb
@@ -1,5 +1,9 @@
+
+
<%= render delivery_area_component %>
+ <%= render Marketplace::MenuComponent.new(marketplace:, cart:) %>
+
<%= render cart %>
diff --git a/app/furniture/marketplace/menu/product_component.html.erb b/app/furniture/marketplace/menu/product_component.html.erb
new file mode 100644
index 000000000..73f2793b1
--- /dev/null
+++ b/app/furniture/marketplace/menu/product_component.html.erb
@@ -0,0 +1,32 @@
+<%= render CardComponent.new(dom_id: dom_id(product)) do |card| %>
+ <%- card.with_header(variant: :no_padding) do %>
+ <% if product.photo.present? %>
+
+ <%= image_tag hero_image, class: "rounded-t-lg w-full" %>
+
+ <%= name %>
+
+
+ <%- else %>
+
<%= name %>
+ <% end %>
+ <%- end %>
+
+
+ <%= description %>
+
+
+
+
+ <%- card.with_footer do %>
+ <%- cart_product = cart.cart_products.find_by(product:) %>
+
+ <%- if !cart_product %>
+ <%= button_to("Add to Cart", cart.location(child: :cart_products), method: :post, params: { cart_product: { product_id: product.id, quantity: 1 } }, class: "w-full --secondary") %>
+ <%- else %>
+ <%= render cart_product.quantity_picker %>
+ <%- end %>
+ <%- end %>
+<%- end %>
diff --git a/app/furniture/marketplace/menu/product_component.rb b/app/furniture/marketplace/menu/product_component.rb
new file mode 100644
index 000000000..982f19e34
--- /dev/null
+++ b/app/furniture/marketplace/menu/product_component.rb
@@ -0,0 +1,9 @@
+class Marketplace
+ class Menu::ProductComponent < ProductComponent
+ attr_accessor :cart
+ def initialize(product:, cart:, **kwargs)
+ super(product:, **kwargs)
+ self.cart = cart
+ end
+ end
+end
diff --git a/app/furniture/marketplace/menu_component.html.erb b/app/furniture/marketplace/menu_component.html.erb
new file mode 100644
index 000000000..0973effae
--- /dev/null
+++ b/app/furniture/marketplace/menu_component.html.erb
@@ -0,0 +1,5 @@
+
+ <%- marketplace.products.unarchived.each do |product| %>
+ <%= render Marketplace::Menu::ProductComponent.new(product:, cart:)%>
+ <%- end %>
+
diff --git a/app/furniture/marketplace/menu_component.rb b/app/furniture/marketplace/menu_component.rb
new file mode 100644
index 000000000..7b913ad89
--- /dev/null
+++ b/app/furniture/marketplace/menu_component.rb
@@ -0,0 +1,11 @@
+class Marketplace
+ class MenuComponent < ApplicationComponent
+ attr_accessor :marketplace, :cart
+
+ def initialize(marketplace:, cart:, **kwargs)
+ super(**kwargs)
+ self.marketplace = marketplace
+ self.cart = cart
+ end
+ end
+end
diff --git a/app/furniture/marketplace/notification_method_component.html.erb b/app/furniture/marketplace/notification_method_component.html.erb
index 0be40c98a..3efd379aa 100644
--- a/app/furniture/marketplace/notification_method_component.html.erb
+++ b/app/furniture/marketplace/notification_method_component.html.erb
@@ -1,9 +1,10 @@
-<%= render CardComponent.new(dom_id: dom_id(notification_method), classes: "flex flex-col justify-between gap-y-2 w-full") do %>
-
- <%= contact_location %>
-
-
+<%= render CardComponent.new(dom_id: dom_id(notification_method)) do |card| %>
+ <%- card.with_header do %>
+ <%= contact_location %>
+ <%- end %>
+
+ <%- card.with_footer(variant: :action_bar) do %>
<%= render edit_button if edit_button? %>
<%= render destroy_button if destroy_button? %>
-
+ <%- end %>
<%- end %>
diff --git a/app/furniture/marketplace/payment_settings/index.html.erb b/app/furniture/marketplace/payment_settings/index.html.erb
index 458aed87e..bcb30cf17 100644
--- a/app/furniture/marketplace/payment_settings/index.html.erb
+++ b/app/furniture/marketplace/payment_settings/index.html.erb
@@ -3,20 +3,21 @@
<%= render Marketplace::StripeOverviewComponent.new(marketplace: marketplace) %>
- <%= render CardComponent.new(classes: "flex flex-col h-full") do %>
-
- Did we miss something?
-
-
- Let us know about other payment service options that will help your marketplace to thrive.
-
-
+ <%-end %>
<% end %>
diff --git a/app/furniture/marketplace/product.rb b/app/furniture/marketplace/product.rb
index b91b7401b..03b4c81a8 100644
--- a/app/furniture/marketplace/product.rb
+++ b/app/furniture/marketplace/product.rb
@@ -4,6 +4,7 @@ class Marketplace
class Product < Record
include Archivable
+ # TODO: Refactor to use Media model
has_one_attached :photo, dependent: :destroy
self.table_name = "marketplace_products"
diff --git a/app/furniture/marketplace/product_component.html.erb b/app/furniture/marketplace/product_component.html.erb
index 3e58768db..08a966de5 100644
--- a/app/furniture/marketplace/product_component.html.erb
+++ b/app/furniture/marketplace/product_component.html.erb
@@ -1,32 +1,34 @@
-<%= render CardComponent.new(dom_id: dom_id(product), classes: "flex flex-col justify-between max-w-prose") do %>
-
- <%= name %>
- <%- if product.archived? %>
- (archived)
- <%- end %>
-
-
-
+<%= render CardComponent.new(dom_id: dom_id(product)) do |card| %>
+ <%- card.with_header(variant: :no_padding) do %>
<% if product.photo.present? %>
-
- <%= image_tag product.photo.variant(resize_to_limit: [150, 150]) %>
-
+
+ <%= image_tag hero_image, class: "rounded-t-lg w-full" %>
+
+ <%= name %>
+ <%- if product.archived? %>
+ (archived)
+ <%- end %>
+
+
+ <%- else %>
+
<%= name %>
<% end %>
-
- <%= description %>
-
+ <%- end %>
+
+
+ <%= description %>
+
-
-
- <%= tax_rates %>
-
-
<%= price %>
+
+
+ <%= tax_rates %>
+
<%= price %>
-
+ <%- card.with_footer(variant: :action_bar) do %>
<%= render edit_button if edit_button? %>
<%= render archive_button if archive_button? %>
<%= render destroy_button if destroy_button? %>
-
+ <%- end %>
<%- end %>
diff --git a/app/furniture/marketplace/product_component.rb b/app/furniture/marketplace/product_component.rb
index f9e84b0ac..0463c7aa0 100644
--- a/app/furniture/marketplace/product_component.rb
+++ b/app/furniture/marketplace/product_component.rb
@@ -13,6 +13,14 @@ def edit_button
super(title: t("marketplace.products.edit.link_to", name: name), href: location(:edit))
end
+ # 16:9 of 1290 is 1290:725.625
+ # We rounded up.
+ # @see https://www.ios-resolution.com/
+ FULL_WIDTH_16_BY_9 = [1290, 726]
+ def hero_image
+ product.photo.variant(resize_to_fill: FULL_WIDTH_16_BY_9)
+ end
+
def tax_rates
product.tax_rates.map do |tax_rate|
"#{tax_rate.label} #{helpers.number_to_percentage(tax_rate.tax_rate, precision: 2)}"
diff --git a/app/furniture/marketplace/tax_rate_component.html.erb b/app/furniture/marketplace/tax_rate_component.html.erb
index 4cec26d3e..516f974d0 100644
--- a/app/furniture/marketplace/tax_rate_component.html.erb
+++ b/app/furniture/marketplace/tax_rate_component.html.erb
@@ -1,12 +1,14 @@
-<%= render CardComponent.new(dom_id: dom_id(tax_rate), classes: "flex flex-col justify-between gap-y-2 w-full") do %>
-
+<%= render CardComponent.new(dom_id: dom_id(tax_rate)) do |card| %>
+ <%- card.with_header do |card| %>
+
<%= label %>
+ <%- end %>
+
<%= rate %>
-
+
+ <%- card.with_footer(variant: :action_bar) do %>
<%= render edit_button if edit_button? %>
<%= render destroy_button if destroy_button? %>
-
+ <%- end %>
<%- end %>
diff --git a/app/models/media.rb b/app/models/media.rb
new file mode 100644
index 000000000..3d5ccce42
--- /dev/null
+++ b/app/models/media.rb
@@ -0,0 +1,7 @@
+# The Media resource manages file uploads to the platform
+class Media < ApplicationRecord
+ # NOTE: Dependent destroy is defaulted, but when it becomes important to
+ # separate the destroy request and purge operations, let's add the
+ # `dependent: :purge_later` option.
+ has_one_attached :upload
+end
diff --git a/app/models/room.rb b/app/models/room.rb
index 0b92eced1..4794a282a 100644
--- a/app/models/room.rb
+++ b/app/models/room.rb
@@ -1,5 +1,7 @@
# A Room in Convene acts as a gathering place.
class Room < ApplicationRecord
+ belongs_to :hero_image, class_name: "Media", optional: true
+
# The space whose settings govern the default publicity and access controls for the Room.
belongs_to :space, inverse_of: :rooms
location(parent: :space)
diff --git a/app/policies/room_policy.rb b/app/policies/room_policy.rb
index f212df4be..67c721eb0 100644
--- a/app/policies/room_policy.rb
+++ b/app/policies/room_policy.rb
@@ -19,7 +19,7 @@ def create?
alias_method :new?, :create?
def permitted_attributes(params)
- [:access_level, :name, :description, :slug, gizmos_attributes:
+ [:access_level, :name, :description, :slug, :hero_image_upload, gizmos_attributes:
policy(Furniture).permitted_attributes(params)]
end
diff --git a/app/views/application/_file_field.html.erb b/app/views/application/_file_field.html.erb
index f9f623854..63f51e28e 100644
--- a/app/views/application/_file_field.html.erb
+++ b/app/views/application/_file_field.html.erb
@@ -1,6 +1,11 @@
<% required ||= required | false %>
- <%= form.label attribute %>
+ <%= form.label local_assigns[:label] || attribute %>
+ <% if local_assigns[:label_hint] %>
+
+ <%= label_hint %>
+
+ <% end %>
<%= form.file_field attribute, required: required %>
<%= render partial: "error", locals: { model: form.object, attribute: attribute } %>
diff --git a/app/views/rooms/_form.html.erb b/app/views/rooms/_form.html.erb
index fb3c404fc..478af73ff 100644
--- a/app/views/rooms/_form.html.erb
+++ b/app/views/rooms/_form.html.erb
@@ -3,6 +3,18 @@
<%= render "text_field", attribute: :name, form: room_form %>
<%= render "text_field", attribute: :slug, form: room_form %>
<%= render "text_area", attribute: :description, form: room_form, label_hint: 'Add brief summary of your section for search engines to display as snippets in results' %>
+ <%- if room.hero_image&.upload&.attached? %>
+
+ <%= image_tag room.hero_image&.upload %>
+
+ <% end %>
+ <%= render "file_field",
+ attribute: :hero_image_upload,
+ form: room_form,
+ label: "Upload a header image",
+ label_hint: "Images are great for marketing!",
+ required: false
+ %>
Privacy and Security
<%= render "radio_group", attribute: :access_level, options: Room::access_levels.values, form: room_form %>
diff --git a/cucumber.cjs b/cucumber.cjs
deleted file mode 100644
index 136c716d3..000000000
--- a/cucumber.cjs
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = { default: '--publish-quiet' }
diff --git a/db/migrate/20240120011344_create_media.rb b/db/migrate/20240120011344_create_media.rb
new file mode 100644
index 000000000..36f987b79
--- /dev/null
+++ b/db/migrate/20240120011344_create_media.rb
@@ -0,0 +1,7 @@
+class CreateMedia < ActiveRecord::Migration[7.1]
+ def change
+ create_table :media, id: :uuid, default: -> { "gen_random_uuid()" } do |t|
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20240120034325_add_hero_image_to_rooms.rb b/db/migrate/20240120034325_add_hero_image_to_rooms.rb
new file mode 100644
index 000000000..ced519a1e
--- /dev/null
+++ b/db/migrate/20240120034325_add_hero_image_to_rooms.rb
@@ -0,0 +1,8 @@
+class AddHeroImageToRooms < ActiveRecord::Migration[7.1]
+ def change
+ safety_assured {
+ add_column :rooms, :hero_image_id, :uuid, null: true, default: nil
+ add_foreign_key :rooms, :media, column: "hero_image_id"
+ }
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index bf0be70ec..d926915c1 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,19 +10,19 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[7.1].define(version: 2023_12_21_025246) do
+ActiveRecord::Schema[7.1].define(version: 2024_01_20_034325) do
# These are extensions that must be enabled in order to support this database
enable_extension "pgcrypto"
enable_extension "plpgsql"
create_enum :invitation_status, [
"pending",
- "sent",
"accepted",
"rejected",
"expired",
"ignored",
"revoked",
+ "sent",
], force: :cascade
create_enum :membership_status, [
@@ -231,6 +231,11 @@
t.index ["marketplace_id"], name: "index_marketplace_tax_rates_on_marketplace_id"
end
+ create_table "media", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ end
+
create_table "memberships", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
t.uuid "member_id"
t.uuid "space_id"
@@ -260,6 +265,7 @@
t.datetime "updated_at", null: false
t.uuid "space_id"
t.string "description"
+ t.uuid "hero_image_id"
t.index ["slug", "space_id"], name: "index_rooms_on_slug_and_space_id", unique: true
t.index ["space_id"], name: "index_rooms_on_space_id"
end
@@ -317,6 +323,7 @@
add_foreign_key "marketplace_tax_rates", "furnitures", column: "marketplace_id"
add_foreign_key "marketplace_tax_rates", "spaces", column: "bazaar_id"
add_foreign_key "memberships", "invitations"
+ add_foreign_key "rooms", "media", column: "hero_image_id"
add_foreign_key "space_agreements", "spaces"
add_foreign_key "spaces", "rooms", column: "entrance_id"
end
diff --git a/features/boops.feature b/features/boops.feature
deleted file mode 100644
index 68b4f1a62..000000000
--- a/features/boops.feature
+++ /dev/null
@@ -1,58 +0,0 @@
-Feature: Boops
-
- Note: `Furniture` has been renamed to `Gizmo/Gizmos`.
-
- In order to equitably invoice for the costs incurred in providing co-owned digital infrastucture
- Operators want a way to account for costs of interactions/behaviors/etc.
-
- Boops ("Bytes Or OPerationS") serve as a cost-unit, similar to KW/h for electricity, that allow Space Owners to only
- pay for what they actually use in the Convene Neighborhood.
-
- Cost for Boops is set by the Operators of the Convene Neighborhood, and the cost-in-boops for particular events is
- set by Maintainers of the particular pieces of Furniture and Utilities.
-
- By decoupling from particular currencies, we make it easy to account for really low "cost" things, that still have a
- cost as well as make it possible to operate a Convene Neighborhood without being tied to USD (or even local
- currencies).
-
- Admittedly this abstraction can make things more complicated; but my hope is that it's a useful one for giving
- affordances for decision making about how much to charge for what without making the stakes super high.
-
- Plus it's fun to say. Boop. Boop. Boopboopboop.
-
- @unimplemented-steps
- Scenario: Monthly Space Fees
- Given a "Personal Website" Space
- And the "Personal Website" Space has 5,000 Boops
- And the Operators set the Daily Space Rental to 5 Boops
- When a Day passes
- Then the "Personal Website" Space has 4,995 Boops remaining
- And the Boop Log for the "Personal Website" Space has a
-
- @unimplemented-steps
- Scenario: Filling Boops
- Given a "Personal Website" Space
- And the "Personal Website" Space has 100 Boops
- And the Operators have set the Boops price at 1,000 Boops for $1
- When a $5 Boops Payment is made for the "Personal Website" Space
- Then the "Personal Website" Space has 5,100 Boops
-
- @unimplemented-steps
- Scenario: Reviewing Boop Spend History
- Given a "Personal Website" Space
- And the Boop Spends for the "Personal Website" Space are as follows:
- | spender | spender type | amount | reason | date |
- | 8x8 Jitsi SaaS | Utility | 150 | 3 MAUs on Jan 3rd 2022 | 2022-01-03 |
- | VideoBridge | Furniture | 10 | 3 MAUs on Jan 3rd 2022 | 2022-01-03 |
- | PaymentForm | Furniture | 10 | Payment received | 2022-01-03 |
- | Neighborhood | Space | 50 | Monthly Hosting Fee (personal site) | 2022-01-31 |
- | PaymentForm | Furniture | 10 | Total Payments Stored in January | 2022-01-31 |
- When the Operator for the "Personal Website" Space reviews Boops spent in January
- Then the Operator for the "Personal Wesbsite" Space can see there were 230 Boops Spent in January 2022
- And the Operator for the "Personal Website" space can see the following Boop Spends
- | spender | spender type | amount | reason | date |
- | 8x8 Jitsi SaaS | Utility | 150 | MAUs on Jan 3rd 2022 | 2022-01-03 |
- | VideoBridge | Furniture | 10 | MAUs on Jan 3rd 2022 | 2022-01-03 |
- | PaymentForm | Furniture | 10 | Payment received | 2022-01-03 |
- | Neighborhood | Space | 50 | Monthly Hosting Fee (personal site) | 2022-01-31 |
- | PaymentForm | Furniture | 10 | Total Payments Stored in January | 2022-01-31 |
diff --git a/features/entering-spaces.feature b/features/entering-spaces.feature
deleted file mode 100644
index db906773b..000000000
--- a/features/entering-spaces.feature
+++ /dev/null
@@ -1,16 +0,0 @@
-Feature: Entering Spaces
- In order to interact with other folks
- I want to be able to enter a Spaces
-
- @unimplemented-steps
- Scenario: Entering a Space via Branded Domain
- Given a Space with a Branded Domain
- When I visit the Branded Domain
- Then I am in the Space
-
-
- @unimplemented-steps
- Scenario: Entering a Space via Space Path
- Given a Space with a Slug
- When I visit "/spaces/:slug"
- Then I am in the Space
diff --git a/features/furniture.feature b/features/furniture.feature
deleted file mode 100644
index 92ff5155a..000000000
--- a/features/furniture.feature
+++ /dev/null
@@ -1,30 +0,0 @@
-# Note: `Furniture` has been renamed to `Gizmo/Gizmos`.
-
-Feature: Furniture
- In order to customize Rooms to fit their purpose,
- I would like to place Furniture in the Room.
-
-# Background Context for Contributors:
-#
-# Furniture are distinct features within a Room. Each supports a type of micro-interaction in the Room.
-#
-# Many kinds of Furniture are adapters between services, while others are fully encapsulated features.
-#
-# Fully Encapsulated Furniture could be: Random Number Generator, A conversation stack manager
-#
-# For working Code examples and further developer documentation, check out app/furniture
-#
-# Most Furniture can be configured by Space Members to fit the specific needs of the specific Room.
-
-
-@unstarted
-Scenario: Space Member adds Furniture to Room
-
-@unstarted
-Scenario: Space Member configures Furniture in Room
-
-@unstarted
-Scenario: Space Member removes Furniture from Room
-
-@unstarted
-Scenario: Space Member reorders Furniture in Room (maybe configure Rooms?)
diff --git a/features/furniture/delivery-order-form.feature.md b/features/furniture/delivery-order-form.feature.md
deleted file mode 100644
index 796ed5776..000000000
--- a/features/furniture/delivery-order-form.feature.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# Feature: Furniture: Delivery Order Form
-
-Local Caterers and Delivery Companies partner to bring affordable, high-quality, local food right to your doorstep!
-
-This piece of furniture is for the Delivery Company to provide folks who are near-by that a local caterer is setting up;
-and if they want they can add their order and ?save some cash? (Need to check w/April re: most compelling hook).
-
-`@unimplemented-steps` `@unstarted`
-
-## Scenario: Offering a Delivery Order Form
-
-- Given a "Delivery Order Form" Furniture in the Entrance Hall to "Dev's Deliveries" Space
-- And a Space Member "dev@example.com" for "Dev's Deliveries" Space
-- And a Delivery Order Form Menu "Zee's Munchies Merchants" is in "Dev's Deliveries" Space with the following Menu Items:
- | name | price | description | photo |
- | A God Damn Pizza | $8.95 | It's a 12" margherita: Tomato's, Moz, Basil. WARNING: Does NOT travel well. No refunds. | |
- | Some Mother Effin' Granola| $2.99 | Maple syrup, dried cranberries, cinnamon, cardamom, almonds, and oats. What more can you want?! | |
-- When the following Delivery Order Form is opened in Dev's Deliveries" Space by the Space Member "dev@example.com":
- | date | 2022-03-05 |
- | delivery_window | 11AM to 1PM |
- | menu | Zee's Munchies Merchants |
-- Then a Delivery Order Form Order may be placed by Guests to the Entrance Hall to "Dev's Deliveries" Space
-
-`@unimplemented-steps` `@unstarted`
-
-## Scenario: Placing a Delivery Order Form Order
-
-- Given a "Delivery Order Form" Furniture in the Entrance Hall to "Dev's Deliveries" Space with the following configuration:
- | order_email | orders@devs-deliveries.example.com |
-- And a Delivery Order Form Menu "Zee's Munchies Merchants" is in "Dev's Deliveries" Space with the following Menu Items:
- | name | price | description | photo |
- | A God Damn Pizza | $8.95 | It's a 12" margherita: Tomato's, Moz, Basil. WARNING: Does NOT travel well. No refunds. | |
- | Some Mother Effin' Granola| $2.99 | Maple syrup, dried cranberries, cinnamon, cardamom, almonds, and oats. What more can you want?! | |
-- And the following Delivery Order Form is open in Dev's Deliveries" Space:
- | name | Downtown Oakland! Get Your Munchies! |
- | date | 2022-03-05 |
- | delivery_window | 11AM to 1PM |
- | menu | Zee's Munchies Merchants |
-- When the following Delivery Order Form Order is placed by the Guest "a-rando@example.com" in "Dev's Deliveries" Space:
- | popup | Downtown Oakland! Get Your Munchies! |
- | item[] | { "name": "A God Damn Pizza", price: "$8.95" } |
- | delivery_fee | $2.95 |
- | deliver_to | "123 N West St, Oakland, CA 94612 |
-- Then a Delivery Order Form Payment of $11.90 is collected from the Guest "A-rando@example.com" in "Dev's Deliveries" Space
-- And the following Delivery Order Form Order Confirmation Email is sent to "orders@devs-deliveries.example.com"
diff --git a/features/furniture/embedded_form.feature b/features/furniture/embedded_form.feature
deleted file mode 100644
index 92cbb28ef..000000000
--- a/features/furniture/embedded_form.feature
+++ /dev/null
@@ -1,2 +0,0 @@
-# https://github.com/zinc-collective/convene/issues/619
-Feature: Embedded Forms
diff --git a/features/furniture/journal.feature.md b/features/furniture/journal.feature.md
deleted file mode 100644
index 71b965e7e..000000000
--- a/features/furniture/journal.feature.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Feature: Journal
-
-Many people maintain an online journal. Often, these journals are intended to connect with a broader collection of people via one-on-one or small group messages.
-
-Journal entries are frequently responded to, remixed, or amplified.
-
-Short-form journals, like Instagram or Facebook or Tiktok or Twitter; tend to prioritize entries which can be written or
-read with little effort. These entries tend to flow through the internet like a stream; capturing and distributing peoples
-thoughts and feelings in the moment.
-
-Long-form journals, like medium or Substack, Wordpress, eleventy, Hugo or Jekyll; tend to prioritize posterity, pooling
-information or wisdom into one place that others reference.
-
-Perhaps this is overly ambitious, but Convene's journal is intended to play well with either format.
-
-Authoring a Journal Entry has several steps:
-
-1. Writing the Journal Entry.
-2. Beautifying the Entry with Images, Animations, Video or other Media.
-3. Contextualizing the Entry with meta-data like tags, links, or similar "hooks" into the broader Web.
-4. Publishing the Entry, giving it a place in the world.
-5. Distributing the Entry to the appropriate Channels; such as mailing lists, social media or even traditional media like the Associated Press.
-
-For some authors, the most important part of a Journal are writing the entry. In Zee's case, he likes to blurt
-things out. Others like to take a more thoughtful approach, writing in drafts that are revised.
-
-For others, distribution is key. Getting the word out to the appropriate channels can provide a powerful tool for
-organizing or building economic relationships.
\ No newline at end of file
diff --git a/features/furniture/livestream.feature.md b/features/furniture/livestream.feature.md
deleted file mode 100644
index 944998296..000000000
--- a/features/furniture/livestream.feature.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Feature: Furniture: Livestream
-
-Convene lets you embed your stream right on your Space!
-
-`@andromeda` `@built`
-
-## Scenario: Embedding a Livestream from Twitch
-
-Twitch is an Amazon subsidiary, and one of the most popular live-streaming oriented sites.
-
-- Given a "Zee's Space O' Streaming" Space
-- And a "Livestream" Furniture in the Entrance Hall to "Zee's Space O' Streaming" Space is configured with:
- | channel | zeespencer |
- | provider | twitch |
- | layout | video |
-- When a Guest visits the "Zee's Space O' Streaming" Space
-- Then a "Twitch" Livestream is playing the "zeespencer" channel
-
-`@andromeda` `@built`
-
-## Scenario: Embedding a Livestream from OwnCast
-
-Owncast is libre software for hosting a LiveStream. You'll need to follow the [OwnCast QuickStart](https://owncast.online/quickstart/) prior to setting up a LiveStream in Convene
-
-- Given a "Zee's Space O' Streaming" Space
-- And a "Livestream" Furniture in the Entrance Hall to "Zee's Space O' Streaming" Space is configured with:
- | channel | https://watch.owncast.online |
- | provider | owncast |
-- When a Guest visits the "Zee's Space O' Streaming" Space
-- Then an "Owncast" Livestream is playing the "https://owncast.example.com" channel
diff --git a/features/furniture/markdown-text-block.feature b/features/furniture/markdown-text-block.feature
deleted file mode 100644
index f3eada6c0..000000000
--- a/features/furniture/markdown-text-block.feature
+++ /dev/null
@@ -1,26 +0,0 @@
-Feature: Furniture: Markdown Text Block
- In order to communicate with the written word
- I want a Markdown Text Block
-
-
- @built @unimplemented-steps
- Scenario: Viewing Markdown
- Given a Room with a Markdown Text Block with the following Content:
- """
- ## Fancy Pants
-
- Everyone has pants!
-
- But not everyone has _fancy pants!_
-
- [Like the GRINCH](https://google.com/)
-
- **FANCY PANTS** for _ALL_!
- """
- Then people in that Room see the following HTML:
- | Fancy Pants |
- | Everyone has pants!
|
- | But not everyone has fancy pants! |
- |
Like the GRINCH
|
- | FANCY PANTS |
- | ALL |
diff --git a/features/furniture/media_box.feature b/features/furniture/media_box.feature
deleted file mode 100644
index 6a56444c0..000000000
--- a/features/furniture/media_box.feature
+++ /dev/null
@@ -1,84 +0,0 @@
-Feature: Furniture - MediaBox (🌰)
- # - Find Media to Consume!
- # - Maintain a History of your media consumption!
- # - Share your Reccommendations and AntiRecommendations!
- # - Generate Revenue for the Neighborhood through Affiliate Programs!
- #
- # Each Space operates a MediaBox and own their Reviews of the Media; while the
- # Neighborhood holds the information about how to acquire the pieces of Media
- # in they're particular formats, and generates revenue by injecting affiliate
- # marketing links into the Reviews/Recommendation results.
- #
- # Assuming the Neighborhood is operated as a Contributor/Community
- # Co-operative; profits would flow back to Contributors as part of the regular
- # Patronage redemptions, and back to the Community as Patronage Refunds or
- # reduced prices.
- #
- # There are likely three main use cases:
- # - "Reviewing Media" for people who like to keep a record and share what
- # they've read/listened to/watched
- # - "Finding Media" for people who are like "What do I wanna watch/read/listen
- # to?"
- # - "Reading Media Reviews" for people who want a more in-depth way of
- # evaluating potential media choices.
- # - "Acquiring Media" once people have made a "I want this!" decision.
- #
- # Data Prototype: https://airtable.com/shrUIIkF5Gnm6R5ff
- #
-
-
- Background:
- Given a Space with the "MediaBox Demo" Room
- And the "MediaBox" Furniture is in the "MediaBox Demo" Room
- And the Neighborhood's MediaBoxes have the following Reviews:
- | media | recommendation | format | themes | content warnings |
- | A Song for the Wild Built | yes | audiobook | fiction,speculative fiction,solarpunk, artificial sentience, tea | |
- | Ancillary Justice | yes | ebook | fiction,speculative fiction,tea,chosen family,genderfuckery, artificial sentience | military violence, violence |
- | An Unkindness of Ghosts | yes | ebook | gritty, fiction,speculative fiction,genderfuckery,personal liberation | familial trauma, sexual violence, racial trauma |
-
-
- # A MediaBox may provide Recommendations based upon the Users in-the-moment curiosity, prior consumption, and
- # future intentions. The basic interaction flow uses a search box which can be expanded into weighted tag filter
- # groups for format, thematic content, content warnings, or creator identity.
- #
- # A MediaBox's Recommendation Engine may be tuned by a Resident, giving Neighbors and Visitors further curated
- # results.
- #
- # Note: There is clearly a fractal of interesting nuance to explore here; which may be best defined in
- # `features/furniture/mediabox/search.feature`
- @unstarted
- Scenario: Finding Media
- When the MediaBox is asked for Recommendations with the following Filters:
- | query | * |
- | formats[] | audiobook,ebook |
- | themes[] | gritty--,liberation+,fiction |
- | identities[] | white--,masculine-,cooperative+,human+,b corp+ |
- | content warnings[] | !sexual violence |
- Then the Recommendations are:
- | media |
- | Ancillary Justice |
- | A Song for the Wild Built |
-
- # This illustrates how revenue flows back into the organization operating the Convene instance.
- # @see features/vendor-affiliates.feature
- @unstarted
- Scenario: Acquiring Media
- Given the Neighborhood has the following Affiliate Relationships:
- | vendor |
- | bookshop.org |
- And the "Ancillary Justice" Media may be Acquired At:
- | format | link |
- | paperback | https://bookshop.org/books/ancillary-justice/9780316246620 |
- | ebook | https://www.kobo.com/us/en/ebook/ancillary-justice-1 |
- When Someone buys a copy of "Ancillary Justice" by following the "Bookshop.org" Get This Link
- Then the Neighborhood Operator is granted the affiliate fee
-
-
- @unstarted
- Scenario: Reviewing Media
-
- @unstarted
- Scenario: Reading Media Reviews
-
-
-
diff --git a/features/furniture/payment-form.feature b/features/furniture/payment-form.feature
deleted file mode 100644
index 98da471c0..000000000
--- a/features/furniture/payment-form.feature
+++ /dev/null
@@ -1,63 +0,0 @@
-Feature: Payment Form
- In order to reduce transaction fees when accepting large payments
- As a Space Owner
- I would like to accept Payments
-
-
- # At present, we're exploring using [Plaid Link] and [Plaid Auth] as the
- # mechanism for collecting and verifying ACH details. They have provided
- # a particularly nice [Modern Guide to ACH].
- #
- # Because we do not store any financial account data, we should be compliant
- # with [PCI DSS].
- #
- # There are two primary use-cases here:
- #
- # 1. Dropping off a check for (eventual) deposit
- # 2. Providing the checks to the Space Owner
- #
- # At present, we are _not_ automating the ACH transfer, though there are many
- # [Payment Processor integrations for Plaid]. Instead, we are opting to
- # expose a [NACHA file], which can be uploaded to many financial institutions
- # business portals.
- #
- # [Plaid Link]: https://plaid.com/docs/link/
- # [Plaid Auth]: https://plaid.com/docs/auth/
- # [Plaid Auth API Docs]: https://plaid.com/docs/api/products/#auth
- # [Payment Processor integrations for Plaid]: https://plaid.com/docs/auth/#using-a-payment-processor
- # [Modern Guide to ACH]: https://go.plaid.com/rs/495-WRE-561/images/Plaid-Modern-guide-to-ACH.pdf
- # [PCI DSS]: https://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard
- # [NACHA file: https://files.nc.gov/ncosc/documents/eCommerce/bank_of_america_nacha_file_specs.pdf
- Background:
- Given a Space with a Room with Check Drop Off Furniture fully configured
-
- # For valid link credentials data, see https://plaid.com/docs/auth/coverage/testing/#testing-the-link-flow
- @unstarted
- Scenario: Dropping off an Electronic Check with a Valid Bank Account
- Given a Guest begins the Check Deposit Workflow with the following data:
- | check_amount | $1000 |
- | earliest_deposit_date | 1 week from now |
- | memo | Initial investment amount |
- | email | person@example.com |
- | name | Person McMoney |
- | signature | Person McMoney |
- When a Guest completes the Plaid Link Workflow with valid credentials
- Then the Space Owner's Pending Check's list includes the Check
- And the Space Owner's Pending Checks NACHA file looks like:
- """
- lol i don't know i need to look the file format up
- """
- And the Guest receives an Email letting them know that their Check is Pending Deposit
-
- @unstarted
- Scenario: Depositing Pending Checks from the Check Drop Box
- Given there are Pending Checks in the Check Drop Box
- When a Space Owner downloads the Pending Checks
- Then the downloaded NACHA file file looks like
- """
- lol i don't know this yet either
- """
- And the Check Drop Box has no Pending Checks
- And the Check Drop Box has the formerly pending checks Deposited
- And the Depositors receive an email letting them know their Check is being deposited.
-
diff --git a/features/furniture/spotlight.feature.md b/features/furniture/spotlight.feature.md
deleted file mode 100644
index d68cb58fc..000000000
--- a/features/furniture/spotlight.feature.md
+++ /dev/null
@@ -1,81 +0,0 @@
-# Furniture: Spotlight!
-
-Note: `Room/Rooms` has been renamed to `Section/Sections`.
-
-Note: `Furniture` has been renamed to `Gizmo/Gizmos`.
-
-Instagram and Signal have Stories, eCommerce sites have "Featured Items", Product Landing Pages have
-"Highlighted Value Propositions." Each of these "Spotlight" something on the Web, and bring it to the
-front of a Visitors attention.
-
-Spotlight the latest page from your favorite WebComic, an episode of your friend's thrilling DnD Podcast, or
-your own latest artistic endeavor!
-
-Spotlights are:
-
-1. Focused! Spotlights can fit up to 3 Targets!
-2. Time-Boxed! Targets stick around for a few hours, days or weeks.
-3. Multi-format! Spotlight writing, illustrations, comics, short stories, photos, videos, 3d models, VR scenes, and more!
-
-
-## Fauxsonas
-
-- Spotter - Sets a Spotlight's Targets
-- Viewer - Sees a Spotlight's Targets
-
-`@andromeda` `@unimplemented-steps`
-
-## Scenario: Hero Style
-
-Hero images[1] [2] are a mainstay of web design, providing a clear place for people to direct their
-attention. Spotlights in Hero Style take up a large portion of the Room.
-
-Hero's often convey the core value proposition of a product or service, highlight a particularly impressive
-piece of work on a portfolio, capture a viewer's imagination, or direct their attention to a key call to action.
-
-Spotlights in Hero Style preserve the Spotlighted Target (such as aspect ratio) while providing as resonant
-Viewer's experience as possible across form factors.
-
-- Given an "Zee's Artist Portfolio" Space
-- And a "Spotlight" Furniture in the Entrance Hall to "Zee's Artist Portfolio" Space is configured with:
- | file | adorable_kitten.heic |
- | alt | Two adorable kittens sitting in a fruit bowl |
- | heading | Kittens Are The Best |
- | summary | Everyone loves kittens. They're adorable! Look at them! They make you melt! How can you not love kittens?! |
- | link_text | Scroll your way to happiness |
- | link | //kitten-gallery |
-
-- When a Guest visits the "Zee's Artist Portfolio" Space
-- Then a "Spotlight" Furniture is rendered with:
- | file | adorable_kitten.heic |
- | alt | Two adorable kittens sitting in a fruit bowl |
- | heading | Kittens Are The Best |
- | summary | Everyone loves kittens. They're adorable! Look at them! They make you melt! How can you not love kittens?! |
- | link_text | Scroll your way to happiness |
- | link | //kitten-gallery |
-
-[1]: https://design4users.com/hero-images-in-web-design/
-[2]: https://elementor.com/blog/hero-image/
-
-`@andromeda` `@unstarted`
-
-## Scenario: Hero Video
-
-While Hero _Images_ are quite common, many sites embed video to really showcase what's up.
-
-- Given an "Zee's Artist Portfolio" Space
-- And a "Spotlight" Furniture in the Entrance Hall to "Zee's Artist Portfolio" Space is configured with:
- | file | adorable_kitten.mp4 |
- | alt | Two adorable kittens playing in a fruit bowl |
- | heading | Kittens Are The Best |
- | summary | Everyone loves kittens. They're adorable! Look at them! They make you melt! How can you not love kittens?! |
- | link_text | Scroll your way to happiness |
- | link | //kitten-gallery |
-- When a Guest visits the "Zee's Artist Portfolio" Space
-- Then a "Spotlight" Furniture is rendered with:
- | file | adorable_kitten.heic |
- | alt | Two adorable kittens sitting in a fruit bowl |
- | heading | Kittens Are The Best |
- | summary | Everyone loves kittens. They're adorable! Look at them! They make you melt! How can you not love kittens?! |
- | link_text | Scroll your way to happiness |
- | link | //kitten-gallery |
diff --git a/features/furniture/video-bridge.feature b/features/furniture/video-bridge.feature
deleted file mode 100644
index 0d70bb109..000000000
--- a/features/furniture/video-bridge.feature
+++ /dev/null
@@ -1,24 +0,0 @@
-@utility-jitsi @milestone-andromeda
-Feature: Furniture: VideoBridge
- # Chat with Friends! Face to Face! Over the Internet!
-
- Background:
- Given a "VideoBridge Demo" Space
- And the "VideoBridge Demo" Space has a fully configured "Jitsi" Utility
- And the "VideoBridge Demo" Space has a "VideoBridge Demo" Room
- And the "VideoBridge Demo" Room has a VideoBridge
-
- @unimplemented-steps
- Scenario: Opening a VideoBridge
- Given a Guest "Joe Schmoe" is in the "VideoBridge Demo" Room
- When the Guest "Joe Schmoe" Opens the VideoBridge
- Then the Guest "Joe Schmoe" can see and hear everyone in the VideoBridge
-
- @unimplemented-steps
- Scenario: Closing a VideoBridge
- Given a Guest "Joe Schmoe" is in the "VideoBridge Demo" Room
- And the Guest "Joe Schmoe" has Opened the VideoBridge
- When the Guest "Joe Schmoe" Closes the VideoBridge
- Then the Guest "Joe Schmoe" is in the "VideoBridge Demo" Room
- And the Guest "Joe Schmoe" cannot see or hear anyone in the VideoBridge
-
diff --git a/features/harness/Component.js b/features/harness/Component.js
deleted file mode 100644
index 1531cc30e..000000000
--- a/features/harness/Component.js
+++ /dev/null
@@ -1,90 +0,0 @@
-import { By, until } from "selenium-webdriver";
-/**
- * Provides a test-harness for a particular part of the UI.
- */
-class Component {
- /**
- * @param {ThenableWebDriver} driver
- * @param {string} selector
- */
- constructor(driver, selector) {
- this.driver = driver;
- this.selector = By.css(selector);
- }
- /**
- * @returns {Promise}
- */
- click() {
- return this.el()
- .then((el) => el.click())
- .then(() => this);
- }
- /**
- * @param {string} value
- * @returns {Promise}
- */
- fillIn(value) {
- return this.el()
- .then((el) => {
- el.clear();
- return el;
- })
- .then((el) => el.sendKeys(value))
- .then(() => this);
- }
- /**
- *
- * @param {string} value
- * @returns {Promise}
- */
- select(value) {
- return this.click()
- .then(() => this.component(`[value=${value}]`).click())
- .then(() => this);
- }
- /**
- * @returns {Promise}
- */
- text() {
- return this.el().then((el) => el.getText());
- }
- /**
- * @returns {Promise}
- */
- submit() {
- return this.el()
- .then((el) => el.submit())
- .then(() => this);
- }
- /**
- * @returns {Promise}
- */
- isDisplayed() {
- return this.el()
- .then((el) => el.isDisplayed())
- .catch(() => false);
- }
- /**
- * Factory for building child component(s)
- * @param {string} selector
- * @param {class} componentClass
- * @returns {Component}
- */
- component(selector, componentClass = Component) {
- return new componentClass(
- this.driver,
- `${this.selector.value} ${selector}`,
- );
- }
- /**
- * Exposes an underlying Selenium::WebElement, try not to use this outside of
- * sub-classes!
- * @returns {Promise}
- */
- el() {
- return this.driver
- .wait(until.elementLocated(this.selector), 50)
- .then(() => this.driver.findElement(this.selector));
- }
-}
-export default Component;
diff --git a/features/harness/Components.js b/features/harness/Components.js
deleted file mode 100644
index 7da80f17e..000000000
--- a/features/harness/Components.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import Component from "./Component.js";
-import PersonNavigationComponent from "./PersonNavigationComponent.js";
-export { Component };
-export { PersonNavigationComponent };
-export default {
- Component,
- PersonNavigationComponent,
-};
diff --git a/features/harness/CustomDomainSpacePage.js b/features/harness/CustomDomainSpacePage.js
deleted file mode 100644
index b7477138f..000000000
--- a/features/harness/CustomDomainSpacePage.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import SpacePage from "./SpacePage.js";
-class CustomDomainSpacePage extends SpacePage {
- constructor(driver, customDomain) {
- this.customDomain = customDomain;
- super(driver);
- }
- enter() {
- this.driver.get(`${this.customDomain}`);
- }
- enterRoomThruUrl(room) {
- this.driver.get(`${this.customDomain}/${room.slug}`);
- }
-}
-export default CustomDomainSpacePage;
diff --git a/features/harness/FurnitureComponent.js b/features/harness/FurnitureComponent.js
deleted file mode 100644
index be4864401..000000000
--- a/features/harness/FurnitureComponent.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import Component from "./Component.js";
-class FurnitureComponent extends Component {
- constructor(driver, furniture) {
- super(driver, furniture.selector);
- this.furniture = furniture;
- }
-}
-export { FurnitureComponent };
diff --git a/features/harness/InvitationResponsePage.js b/features/harness/InvitationResponsePage.js
deleted file mode 100644
index 6e47ddf59..000000000
--- a/features/harness/InvitationResponsePage.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import Page from "./Page.js";
-class InvitationResponsePage extends Page {
- constructor(driver, invitation) {
- super(driver);
- this.invitation = invitation;
- }
- url() {
- return this.invitation.rsvpLink();
- }
- submit() {
- return this.submitButton()
- .click()
- .then(() => this);
- }
- submitButton() {
- return this.component("input[type=submit");
- }
- ignoreButton() {
- return this.component("[data-testid=ignore]");
- }
-}
-export default InvitationResponsePage;
diff --git a/features/harness/InvitationsIndexPage.js b/features/harness/InvitationsIndexPage.js
deleted file mode 100644
index d1da0669d..000000000
--- a/features/harness/InvitationsIndexPage.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import { ThenableWebDriver } from "selenium-webdriver";
-import Page from "./Page.js";
-import Component from "./Component.js";
-
-class InvitationsIndexPage extends Page {
- /**
- * @param {ThenableWebDriver} driver
- * @param {Space} space
- */
- constructor(driver, space) {
- super(driver);
- this.space = space;
- }
- /**
- * @returns {string}
- */
- path() {
- return `/spaces/${this.space.slug}/invitations`;
- }
-
- /**
- * @returns {Promise}
- */
- invite({ name, email }) {
- return this.visit()
- .then(() => {
- return this.newInvitationForm()
- .component('input[name="invitation[name]"]')
- .fillIn(name);
- })
- .then(() => {
- return this.newInvitationForm()
- .component('input[name="invitation[email]"]')
- .fillIn(email);
- })
- .then(() => {
- return this.newInvitationForm()
- .component('input[type="submit"]')
- .click();
- })
- .finally(() => {
- return this;
- });
- }
-
- invitation({ invitation, status }) {
- return this.component(
- `*[data-invitation-status="${status}"][data-invitation-email="${invitation.emailAddress}"]`,
- );
- }
-
- /**
- * @returns {Promise}
- */
- inviteAll(invitations) {
- return Promise.all(
- invitations.map((invitation) => this.invite(invitation)),
- ).finally(() => this);
- }
-
- /**
- * @returns {Component}
- */
- newInvitationForm() {
- return this.component(".new-invitation-form");
- }
-}
-export default InvitationsIndexPage;
diff --git a/features/harness/LiveStreamFurnitureComponent.js b/features/harness/LiveStreamFurnitureComponent.js
deleted file mode 100644
index e635804ab..000000000
--- a/features/harness/LiveStreamFurnitureComponent.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import Component from "./Component.js";
-class LiveStreamFurnitureComponent extends Component {
- constructor(driver, { provider, channel }) {
- super(
- driver,
- `*[data-furniture-kind="livestream"][data-provider="${provider}"]`,
- );
- this.provider = provider;
- this.channel = channel;
- }
-}
-export default LiveStreamFurnitureComponent;
diff --git a/features/harness/MePage.js b/features/harness/MePage.js
deleted file mode 100644
index 607aea605..000000000
--- a/features/harness/MePage.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import Page from "./Page.js";
-import lodash from "lodash";
-const { last } = lodash;
-const valueFromText = (text) => last(text.split(": "));
-class MePage extends Page {
- path() {
- return "/me";
- }
- async person() {
- return { id: this.id(), name: this.name(), email: this.email() };
- }
- /**
- * @return {Promise}
- */
- id() {
- return this.component("main > ul.person > li.id")
- .text()
- .then(valueFromText);
- }
- /**
- * @return {Promise}
- */
- name() {
- return this.component("main > ul.person > li.name")
- .text()
- .then(valueFromText);
- }
- /**
- * @return {Promise}
- */
- email() {
- return this.component("main > ul.person > li.email")
- .text()
- .then(valueFromText);
- }
-}
-export default MePage;
diff --git a/features/harness/MembershipsIndexPage.js b/features/harness/MembershipsIndexPage.js
deleted file mode 100644
index ca588d845..000000000
--- a/features/harness/MembershipsIndexPage.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import { ThenableWebDriver } from "selenium-webdriver";
-import Page from "./Page.js";
-
-class MembershipsIndexPage extends Page {
- /**
- * @param {ThenableWebDriver} driver
- * @param {Space} space
- */
- constructor(driver, space) {
- super(driver);
- this.space = space;
- }
- /**
- * @returns {string}
- */
- path() {
- return `/spaces/${this.space.slug}/memberships`;
- }
-}
-export default MembershipsIndexPage;
diff --git a/features/harness/Page.js b/features/harness/Page.js
deleted file mode 100644
index 681eb28a9..000000000
--- a/features/harness/Page.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import appUrl from "../lib/appUrl.js";
-import { By } from "selenium-webdriver";
-import Component from "./Component.js";
-import PersonNavigationComponent from "./PersonNavigationComponent.js";
-class Page {
- /**
- * @param {ThenableWebDriver} driver
- */
- constructor(driver) {
- this.baseUrl = appUrl();
- this.driver = driver;
- }
- /**
- * Factory for building {Component}s
- * @param {string} selector
- * @param {class} componentClass
- * @returns {Component}
- */
- component(selector, componentClass = Component) {
- return new componentClass(this.driver, selector);
- }
- /**
- * @returns {PersonNavigationComponent}
- */
- personNavigation() {
- return this.component(
- "*[aria-label='Profile Menu']",
- PersonNavigationComponent,
- );
- }
- /**
- * Goes directly to the page, as defined in the path method.
- * @returns {Promise}
- */
- visit() {
- return this.url()
- .then((url) => this.driver.get(url))
- .then(() => this);
- }
- /**
- * @returns {Promise}
- */
- url() {
- return Promise.resolve(`${this.baseUrl}${this.path()}`);
- }
- /**
- * @param {RegExp} content
- * @returns {Promise}
- */
- hasContent(content) {
- return this.driver
- .findElement(By.tagName("body"))
- .getText()
- .then((body) => body.match(content));
- }
- /**
- * @throws if not defined in child classes
- */
- path() {
- throw "NotImplemented";
- }
-}
-export default Page;
diff --git a/features/harness/Pages.js b/features/harness/Pages.js
deleted file mode 100644
index c7f2b033f..000000000
--- a/features/harness/Pages.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import Page from "./Page.js";
-import RoomPage from "./RoomPage.js";
-import RoomEditPage from "./RoomEditPage.js";
-import SpacePage from "./SpacePage.js";
-import SpaceEditPage from "./SpaceEditPage.js";
-import MembershipsIndexPage from "./MembershipsIndexPage.js";
-import InvitationsIndexPage from "./InvitationsIndexPage.js";
-import MePage from "./MePage.js";
-import SignInPage from "./SignInPage.js";
-export { Page };
-export { SpacePage };
-export { MePage };
-export { SignInPage };
-export { RoomPage };
-export { SpaceEditPage };
-export { MembershipsIndexPage };
-export { InvitationsIndexPage };
-export { RoomEditPage };
-export default {
- Page,
- SpacePage,
- MePage,
- SignInPage,
- RoomPage,
- SpaceEditPage,
- RoomEditPage,
-};
diff --git a/features/harness/PersonNavigationComponent.js b/features/harness/PersonNavigationComponent.js
deleted file mode 100644
index 886fac342..000000000
--- a/features/harness/PersonNavigationComponent.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import Component from "./Component.js";
-class PersonNavigationComponent extends Component {
- /**
- * @returns {Promise}
- */
- signOut() {
- return this.signOutLink()
- .click()
- .then(() => this);
- }
- signedInEmail() {
- return this.el().then((el) => el.getAttribute("data-person-email"));
- }
- /**
- * @returns {Promise}
- */
- signOutLink() {
- return this.component(".sign-out");
- }
-}
-export default PersonNavigationComponent;
diff --git a/features/harness/RoomEditPage.js b/features/harness/RoomEditPage.js
deleted file mode 100644
index 45afa16b9..000000000
--- a/features/harness/RoomEditPage.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import Page from "./Page.js";
-class RoomEditPage extends Page {
- constructor(driver, room) {
- super(driver);
- this.room = room;
- }
-
- /**
- * @param {string} accessLevel
- * @returns {Component}
- */
- accessLevel() {
- return this.component("#room_access_level");
- }
-
- /**
- * @returns {Component}
- */
- submitButton() {
- return this.component("[data-controller='room-form'] [name='commit']");
- }
-}
-export default RoomEditPage;
diff --git a/features/harness/RoomFormComponent.js b/features/harness/RoomFormComponent.js
deleted file mode 100644
index c81296eb7..000000000
--- a/features/harness/RoomFormComponent.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import Component from "./Component.js";
-import Room from "../lib/Room.js";
-class RoomFormComponent extends Component {
- /**
- * @param {ThenableWebDriver} driver
- * @param {Room} room
- */
- constructor(driver, room = new Room("")) {
- super(driver);
- // TODO: Try to build a room from the passed in Element if undefined
- this.room = room;
- }
- /**
- * @param {Room} room
- * @returns {Promise}
- */
- async fillIn(room) {
- return this;
- }
-}
-export default RoomFormComponent;
diff --git a/features/harness/RoomPage.js b/features/harness/RoomPage.js
deleted file mode 100644
index 1a1415cdc..000000000
--- a/features/harness/RoomPage.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import Page from "./Page.js";
-class RoomPage extends Page {
- /**
- * @param {ThenableWebDriver} driver
- * @param {Room} room
- */
- constructor(driver, room) {
- super(driver);
- this.room = room;
- }
-
- path() {
- return `/spaces/${this.room.space.slug}/rooms/${this.room.slug}`;
- }
-}
-export default RoomPage;
diff --git a/features/harness/SignInPage.js b/features/harness/SignInPage.js
deleted file mode 100644
index b88839f67..000000000
--- a/features/harness/SignInPage.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import Page from "./Page.js";
-class SignInPage extends Page {
- constructor(driver, space) {
- super(driver);
- this.space = space;
- }
- path() {
- return `/spaces/${this.space.slug}/authenticated_session/new`;
- }
- submitEmail(email) {
- return this.component("input[type=email]")
- .fillIn(email)
- .then(() => this.submitButton().click())
- .then(() => this);
- }
- /**
- *
- * @param {String} code
- * @returns {Promise}
- */
- submitCode(code) {
- return this.component('input[name*="[one_time_password]"]')
- .fillIn(code)
- .then(() => this.submitButton().click())
- .finally(() => this);
- }
- submitButton() {
- return this.component("input[type=submit");
- }
-}
-export default SignInPage;
diff --git a/features/harness/SpaceEditPage.js b/features/harness/SpaceEditPage.js
deleted file mode 100644
index 46abb969f..000000000
--- a/features/harness/SpaceEditPage.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import { ThenableWebDriver } from "selenium-webdriver";
-import Page from "./Page.js";
-import Component from "./Component.js";
-class SpaceEditPage extends Page {
- /**
- * @param {ThenableWebDriver} driver
- * @param {Space} space
- */
- constructor(driver, space) {
- super(driver);
- this.space = space;
- }
-
- /**
- * @returns {string}
- */
- path() {
- return `/spaces/${this.space.slug}/edit`;
- }
-
- createRoom({ room }) {
- return new RoomFormComponent(this.driver)
- .fillIn(room)
- .then((c) => c.submit());
- }
-
- /**
- * @param {string} slug
- * @returns {Promise}
- */
- addUtility(slug) {
- return this.newUtilitySelect()
- .select(name)
- .then(() => this.newUtilityForm().submit())
- .then(() => this);
- }
-
- /**
- * @returns {Component}
- */
- newUtilitySelect() {
- return this.newUtilityForm().component("select");
- }
-
- /**
- * @returns {Component}
- */
- newUtilityForm() {
- return this.component(".new-utility-form");
- }
-}
-export default SpaceEditPage;
diff --git a/features/harness/SpacePage.js b/features/harness/SpacePage.js
deleted file mode 100644
index 6f9f93fd8..000000000
--- a/features/harness/SpacePage.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import Page from "./Page.js";
-class SpacePage extends Page {
- constructor(driver, space) {
- super(driver);
- this.space = space;
- }
- /**
- * @returns {string}
- */
- path() {
- return `/spaces/${this.space.slug}`;
- }
-}
-export default SpacePage;
diff --git a/features/identification.feature b/features/identification.feature
deleted file mode 100644
index 733203f36..000000000
--- a/features/identification.feature
+++ /dev/null
@@ -1,96 +0,0 @@
-Feature: Identification
- In order to assert myself within a Space
- I want to Identify who I am.
-
- # ## Technical Details
- #
- # Identification is the process of _asserting_, _verifying_ and _acting with_
- # an Identity.
- #
- # Someones Identity is either:
- #
- # 1. Unverified (I.e. we have not proven the Identity they claim is theirs,
- # for example someone asserts they are named _Zee Spencer_.)
- # 2. Verified (I.e. we have proven the Identity they claim is theirs, for
- # example they assert that zee@example.com is their email, and prove it
- # by clicking a link or providing a secret sent to that email.)
- #
- # Note: Techniques for Verifying Identities are called _Factors_.
- #
- # Someone who Verifies their Identity in a Session is _Authenticated_.
- # Identification is orthogonal to _Authorization_, the rules that determine
- # what somoene may or may not see or do within Convene or a Space.
- #
- # To Recap:
- #
- # 1. People have an _Identity_, which is a way of asserting who they are.
- # 2. Some Identities can be Verified, which helps confirm a person is who they
- # say they are.
- # 3. Once we have Verified someone's Identity they are Authenticated for the
- # duration of that Session.
- # 4. Deciding what someone may or may not do is Authorization.
- #
- # [Identity]: https://en.wikipedia.org/wiki/Identity_(philosophy)
- # [Authentication]: https://en.wikipedia.org/wiki/Authentication
- # [Verification Factors]: https://en.wikipedia.org/wiki/Multi-factor_authentication#Factors
- # [Authorization]: https://en.wikipedia.org/wiki/Authorization
- # [Session]: https://en.wikipedia.org/wiki/Session_(computer_science)
- # [Identification, Authentication and Authorization]: https://usa.kaspersky.com/blog/identification-authentication-authorization-difference/23338/
-
- # Wireframe: https://xd.adobe.com/view/fd425dbe-5384-44c9-997a-eeee6e886a86-a811/
- # An Emailed Link is a _Possession_ Verification Factor that demonstrates the
- # person can at least _read_ the email address they are using to identiy
- # themselves.
- @built
- Scenario: Identity Verification Via Emailed Link
- Given a "System Test" Space
- And an unauthenticated Space Member has requested to be identified to the "System Test" Space via Email
- When the unauthenticated Space Member opens the Identification Verification Link emailed to them
- Then the Space Member is Verified as the Owner of that Email Address
- And the Space Member has become Authenticated
-
-
- @built
- Scenario: Authentication is lost on Sign out
- Given a "System Test" Space
- And a Space Member Authenticated Session on the "System Test" Space
- When the Authenticated Person Signs Out
- Then the Authenticated Person becomes a Guest
-
- # We're not quite sure how to do time-travel in our test suite just yet.
- @built @unimplemented-steps
- Scenario: Requests for Identification Verification via Email Times Out
- Given a Guest requests to Identify themselves via Email
- When the Guest waits for an hour
- Then the Guest can not Identify themselves by following the link sent to their Email
- # @unstarted
- # And the Guest can not Identify themselves by entering the code sent to their Email
-
- @built @unimplemented-steps
- Scenario: Authentication times out
- Given an Authenticated Person who has not signed in for 7 days
- When the Authenticated Person visits Convene
- Then the Authenticated Person is treated as a Guest
-
- @built @unimplemented-steps
- Scenario: Authentication times out due to inactivity
- Given an Authenticated Person who has been Inactive for 7 days
- When the Authenticated Person visits Convene
- Then the Authenticated Person is treated as a Guest
-
- # An Emailed Code is a _Possession_ Verification Factor that demonstrates the
- # person can at least _read_ the email address they are using to identify
- # themselves.
- @built
- Scenario: Identity Verification via Emailed Code
- Given a "System Test" Space
- And an unauthenticated Space Member has requested to be identified to the "System Test" Space via Email
- When the unauthenticated Space Member provides the Identification Code emailed to them
- Then the Space Member is Verified as the Owner of that Email Address
- And the Space Member has become Authenticated
-
- @unstarted
- Scenario: People with Multiple Email Addresses
- Given an Identified User adds an additional Email Address
- When the Identified User verifies that Email Address
- Then the Identified User may Identify themselves using that Email Address
diff --git a/features/lib/AccessLevel.js b/features/lib/AccessLevel.js
deleted file mode 100644
index 7d6338336..000000000
--- a/features/lib/AccessLevel.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import { By } from "selenium-webdriver";
-class AccessLevel {
- constructor(level) {
- this.level = level;
- }
- /**
- * @returns {By}
- */
- get locator() {
- return By.css(`*${this.attributeSelector}`);
- }
- /**
- *
- * @returns {string}
- */
- get attributeSelector() {
- return `[data-access-level="${this.level.toLowerCase()}"]`;
- }
-}
-export default AccessLevel;
diff --git a/features/lib/Actor.js b/features/lib/Actor.js
deleted file mode 100644
index 162f95600..000000000
--- a/features/lib/Actor.js
+++ /dev/null
@@ -1,86 +0,0 @@
-import { ThenableWebDriver } from "selenium-webdriver";
-import lodash from "lodash";
-import getUrls from "get-urls";
-import { MePage, SignInPage } from "../harness/Pages.js";
-import MailServer from "./MailServer.js";
-import PersonNavigationComponent from "../harness/PersonNavigationComponent.js";
-const { last, result } = lodash;
-class Actor {
- constructor(type, email) {
- this.type = type;
- this.email = email;
- }
- /**
- * Signs in to the application via email
- * @param {ThenableWebDriver} driver
- * @returns {Promise}
- */
- signIn(driver, space) {
- return this.isSignedIn(driver).then((signedIn) => {
- if (signedIn) {
- return this;
- }
-
- return new SignInPage(driver, space)
- .visit()
- .then((page) => page.submitEmail(this.email))
- .then(() => this.authenticationUrl())
- .then((authUrl) => driver.get(authUrl))
- .then(() => this);
- });
- }
- signOut(driver) {
- return new MePage(driver)
- .visit()
- .then((page) => page.personNavigation().signOut());
- }
- /**
- * The URL for a user to authenticate
- * @returns {Promise}
- */
- authenticationUrl() {
- return this.authenticationEmail().then(
- (email) => getUrls(email.text).values().next().value,
- );
- }
- /**
- * The code a user can use to sign in
- * @returns {Promise}
- */
- async authenticationCode() {
- return this.authenticationEmail().then(
- (email) => email.text.match(/password is (\d+)/)[1],
- );
- }
- /**
- * @returns {Promise}
- */
- authenticationEmail() {
- return this.emails({ text: (t) => t.match(/password is (\d+)/) }).then(
- last,
- );
- }
- /**
- * @param {ThenableWebDriver} driver
- * @returns {Promise}
- */
- isSignedIn(driver) {
- return new PersonNavigationComponent(driver, "*[aria-label='Profile Menu']")
- .signedInEmail()
- .then((email) => this.email == email);
- }
- /**
- * @param {MailQuery} query
- * @returns {Promise}
- */
- emails(query) {
- return this.emailServer().emailsWhere({ ...query, to: this.email });
- }
- /**
- * @returns {MailServer}
- */
- emailServer() {
- return (this._emailServer = this._emailServier || new MailServer());
- }
-}
-export default Actor;
diff --git a/features/lib/Api.js b/features/lib/Api.js
deleted file mode 100644
index 259503392..000000000
--- a/features/lib/Api.js
+++ /dev/null
@@ -1,121 +0,0 @@
-import axios from "axios";
-import axiosCaseConverter from "axios-case-converter";
-import Space from "./Space.js";
-import Room from "./Room.js";
-import AuthenticationMethod from "./AuthenticationMethod.js";
-import Membership from "./Membership.js";
-import lodash from "lodash";
-const applyCaseMiddleware = axiosCaseConverter.default;
-const { camelCase } = lodash;
-class Api {
- constructor(host, apiKey) {
- this.host = host;
- this.apiKey = apiKey;
- this.axios = applyCaseMiddleware(
- axios.create({
- baseURL: host,
- headers: {
- Authorization: `Token token="${apiKey}"`,
- "Content-Type": "application/json",
- Accept: "application/json",
- },
- }),
- );
- }
- /**
- * @returns {Repository}
- */
- spaces() {
- return new Repository({ client: this, endpoint: "/spaces", model: Space });
- }
- /**
- *
- * @param {Space} space
- * @returns
- */
- rooms(space) {
- return new Repository({
- client: this,
- endpoint: `/spaces/${space.slug}/rooms`,
- model: Room,
- });
- }
- /**
- *
- * @returns {Repository}
- */
- authenticationMethods() {
- return new Repository({
- client: this,
- endpoint: "/authentication_methods",
- model: AuthenticationMethod,
- });
- }
- /**
- * @returns {Repository}
- */
- spaceMemberships() {
- return new Repository({
- client: this,
- endpoint: "/memberships",
- model: Membership,
- });
- }
- post(path, model) {
- return this.axios.post(path, model.asParams()).catch(function (error) {
- console.error(`Can't POST to ${path}`);
- console.error(model.asParams());
- throw error;
- });
- }
- put(path, model) {
- return this.axios.put(path, model.asParams()).catch(function (error) {
- console.error(`Can't PUT to ${path}`);
- console.error({ model });
- console.error({ error });
- throw error;
- });
- }
- get(path) {
- return this.axios.get(path).catch(function (error) {
- console.error(`Can't get ${path}`);
- throw error;
- });
- }
-}
-class Repository {
- constructor({ client, endpoint, model }) {
- this.client = client;
- this.endpoint = endpoint;
- this.model = model;
- }
- create(model) {
- return this.client
- .post(this.endpoint, model)
- .then((response) => this.castToModel(response));
- }
- /**
- *
- * @param {any} object
- * @returns {Promise}
- */
- findBy(object) {
- return this.client
- .get(`/spaces/${object.space.slug}${this.endpoint}/${object.slug}`)
- .then((response) => this.castToModel(response));
- }
- update(model) {
- return this.client
- .put(`${this.endpoint}/${model.slug}`, model)
- .then((response) => this.castToModel(response));
- }
- findOrCreateBy(data) {
- return this.create(data);
- }
- castToModel(response) {
- const model = this.model;
- const data = response.data[camelCase(model.name)] || response.data;
- return new model(data);
- }
-}
-export { Api };
diff --git a/features/lib/AuthenticationMethod.js b/features/lib/AuthenticationMethod.js
deleted file mode 100644
index a5cf19c9e..000000000
--- a/features/lib/AuthenticationMethod.js
+++ /dev/null
@@ -1,17 +0,0 @@
-class AuthenticationMethod {
- constructor({ id, contactMethod, contactLocation, person }) {
- this.id = id;
- this.contactMethod = contactMethod;
- this.contactLocation = contactLocation;
- this.person = person;
- }
- asParams() {
- return {
- authenticationMethod: {
- contactMethod: this.contactMethod,
- contactLocation: this.contactLocation,
- },
- };
- }
-}
-export default AuthenticationMethod;
diff --git a/features/lib/Furniture.js b/features/lib/Furniture.js
deleted file mode 100644
index 934f91e76..000000000
--- a/features/lib/Furniture.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import Model from "./Model.js";
-class Furniture extends Model {
- constructor({ type }) {
- super();
- this.type = type;
- }
-}
-export default Furniture;
diff --git a/features/lib/Invitation.js b/features/lib/Invitation.js
deleted file mode 100644
index f5fe9194e..000000000
--- a/features/lib/Invitation.js
+++ /dev/null
@@ -1,81 +0,0 @@
-import getUrls from "get-urls";
-import lodash from "lodash";
-import { ThenableWebDriver } from "selenium-webdriver";
-import InvitationResponsePage from "../harness/InvitationResponsePage.js";
-import MailServer from "./MailServer.js";
-const { last } = lodash;
-/**
- *
- * @param {String} text
- * @param {RegExp} regex
- * @returns
- */
-function findUrl(text, regex) {
- for (let url of getUrls(text).values()) {
- if (url.match(regex)) {
- return url;
- }
- }
-}
-class Invitation {
- constructor(emailAddress) {
- this.emailAddress = emailAddress;
- }
- /**
- * @returns {Promise}
- */
- wasDelivered() {
- return this.latestDelivery().then((email) => !!email);
- }
- /**
- * @returns {Promise}
- */
- latestDelivery() {
- return this.emails().then(last);
- }
- /**
- *
- * @param {ThenableWebDriver} driver
- * @returns {Promise}
- */
- accept(driver) {
- return new InvitationResponsePage(driver, this)
- .visit()
- .then((page) => page.submit());
- }
- /**
- *
- * @param {ThenableWebDriver} driver
- * @returns {Promise}
- */
- ignore(driver) {
- return new InvitationResponsePage(driver, this)
- .visit()
- .then((page) => page.ignoreButton().click());
- }
-
- /**
- * @returns {Promise}
- */
- rsvpLink() {
- return this.latestDelivery().then((email) =>
- findUrl(email.text, /spaces\/.*\/invitations\/.*\/rsvp/),
- );
- }
- /**
- * @returns {Promise}
- */
- emails() {
- return this.emailServer().emailsWhere({
- to: this.emailAddress,
- text: (text) => /invited you to/.test(text),
- });
- }
- /**
- * @returns {MailServer}
- */
- emailServer() {
- return (this._emailServer = this._emailServer || new MailServer());
- }
-}
-export default Invitation;
diff --git a/features/lib/MailServer.js b/features/lib/MailServer.js
deleted file mode 100644
index 0fa432d5b..000000000
--- a/features/lib/MailServer.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import axios from "axios";
-import lodash from "lodash";
-import promiseRetry from "promise-retry";
-const { filter, last } = lodash;
-/**
- * Adapter connecting our test suite to our mail handler
- * @see {@link https://github.com/maildev/maildev/}
- */
-class MailServer {
- /**
- * @param {MailQuery} query
- * @returns {Promise}
- */
- emailsWhere(query) {
- return promiseRetry(
- (retry) => {
- return this.emails()
- .then((emails) =>
- filter(emails, (email) => email.headers.to === query.to),
- )
- .then((emails) =>
- filter(emails, (email) =>
- query.text ? query.text(email.text) : true,
- ),
- )
- .then((emails) => (emails.length > 0 ? emails : retry()));
- },
- { maxRetryTime: 2000 },
- ).catch(() => {
- throw `Couldn't find email ${JSON.stringify(query)}`;
- });
- }
- /**
- * Retrieves all emails sent
- * @returns {Promise}
- */
- emails() {
- return axios
- .get("http://127.0.0.1:1080/email")
- .then((res) => res.data)
- .catch((err) => console.log(err));
- }
-}
-export default MailServer;
diff --git a/features/lib/Membership.js b/features/lib/Membership.js
deleted file mode 100644
index 39a830d99..000000000
--- a/features/lib/Membership.js
+++ /dev/null
@@ -1,13 +0,0 @@
-class Membership {
- constructor({ space, member }) {
- this.space = space;
- this.member = member;
- }
- asParams() {
- return {
- spaceId: this.space.id,
- memberId: this.member.id,
- };
- }
-}
-export default Membership;
diff --git a/features/lib/Model.js b/features/lib/Model.js
deleted file mode 100644
index d68e3e619..000000000
--- a/features/lib/Model.js
+++ /dev/null
@@ -1,9 +0,0 @@
-class Model {
- assign(attributes) {
- for (const attribute in attributes) {
- this[attribute] = attributes[attribute];
- }
- return this;
- }
-}
-export default Model;
diff --git a/features/lib/Room.js b/features/lib/Room.js
deleted file mode 100644
index ffd3eddfc..000000000
--- a/features/lib/Room.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import slugify from "./slugify.js";
-import AccessLevel from "./AccessLevel.js";
-import Model from "./Model.js";
-class Room extends Model {
- /**
- * @type {AccessLevel | undefined}
- */
- accessLevel;
- /**
- * @param {string} roomName
- */
- constructor({ name, slug, id }) {
- super();
- this.name = name;
- this.slug = slug;
- if (name !== "Room") {
- this.slug = this.slug = slugify(name);
- }
- this.id = id;
- }
- reinitialize({ accessLevel }) {
- this.accessLevel = accessLevel;
- }
- asParams() {
- return {
- room: {
- name: this.name,
- slug: this.slug,
- gizmosAttributes: this.gizmosAttributes,
- },
- };
- }
-}
-export default Room;
diff --git a/features/lib/Space.js b/features/lib/Space.js
deleted file mode 100644
index 44467db48..000000000
--- a/features/lib/Space.js
+++ /dev/null
@@ -1,17 +0,0 @@
-class Space {
- constructor({ name, slug, id }) {
- this.name = name;
- this.slug = slug || name.replace(/\s+/g, "-").toLowerCase();
- this.id = id;
- }
- asParams() {
- return {
- space: {
- name: this.name,
- slug: this.slug,
- blueprint: "system_test",
- },
- };
- }
-}
-export default Space;
diff --git a/features/lib/appUrl.js b/features/lib/appUrl.js
deleted file mode 100644
index fbc05a872..000000000
--- a/features/lib/appUrl.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default (function () {
- return process.env.APP_ROOT_URL
- ? process.env.APP_ROOT_URL
- : "http://127.0.0.1:3000";
-});
diff --git a/features/lib/concatRegExp.js b/features/lib/concatRegExp.js
deleted file mode 100644
index 1cb86f365..000000000
--- a/features/lib/concatRegExp.js
+++ /dev/null
@@ -1,4 +0,0 @@
-const concatRegExp = (...regex) => {
- return new RegExp(regex.map((re) => re.source).join(""));
-};
-export default concatRegExp;
diff --git a/features/lib/index.js b/features/lib/index.js
deleted file mode 100644
index 0115a0642..000000000
--- a/features/lib/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import AccessLevel from "./AccessLevel.js";
-import Room from "./Room.js";
-import Space from "./Space.js";
-import Actor from "./Actor.js";
-import concatRegExp from "./concatRegExp.js";
-import linkParameters from "./linkParameters.js";
-export { Actor };
-export { Space };
-export { Room };
-export { AccessLevel };
-export { concatRegExp };
-export { linkParameters };
-export default {
- Actor,
- Space,
- Room,
- AccessLevel,
- concatRegExp,
- linkParameters,
-};
diff --git a/features/lib/linkParameters.js b/features/lib/linkParameters.js
deleted file mode 100644
index 2dc6c7404..000000000
--- a/features/lib/linkParameters.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import Space from "./Space.js";
-export default (function linkParameters({
- space = new Space({ name: "System Test" }),
- accessLevel,
- room,
-}) {
- room.space = space;
- room.reinitialize({ accessLevel });
- return {
- space,
- accessLevel,
- room,
- };
-});
diff --git a/features/lib/slugify.js b/features/lib/slugify.js
deleted file mode 100644
index eeede8bba..000000000
--- a/features/lib/slugify.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export default (function slugify(str) {
- return str.replace(/\s+/g, "-").toLowerCase();
-});
diff --git a/features/membership-and-ownership.feature b/features/membership-and-ownership.feature
deleted file mode 100644
index c369e482a..000000000
--- a/features/membership-and-ownership.feature
+++ /dev/null
@@ -1,33 +0,0 @@
-# Note: `Room/Rooms` has been renamed to `Section/Sections`.
-# Note: `Furniture` has been renamed to `Gizmo/Gizmos`.
-
-Feature: Membership and Ownership
- In order to build a cohesive, multi-occupant Space
- I want to grant People Membership in my Space
-
- [Issue](https://github.com/zinc-collective/convene/issues/117)
- [Wireframe](https://xd.adobe.com/view/fd425dbe-5384-44c9-997a-eeee6e886a86-a811/screen/a2be8c5e-926e-4fa6-a9aa-bbb74430f74d/)
-
- Membership in a Space grants Rights to People within the Space.
-
- For instance, [Internal Rooms](https://github.com/zinc-collective/convene/issues/41) are only
- Enterable by Space Members.
-
- Other Furniture (Message Boards, Chat, Announcements, Group Video, etc) may be
- Interactive, Visible, or Hidden based upon Membership.
-
- Furniture may also expose different Features based upon Membership. For example,
- Members may be able to include Images in Chat, while Guests may not.
-
- Note: `Furniture` has been renamed to `Gizmo/Gizmos`.
-
- @unstarted
- Scenario: Removing a Member
- Given a Space with additional Members
- When the Owner removes an additional Member
- Then the Person is no longer a Member of the Space
- And the Person receives an email informing them of their removal from the Space
-
- # We need to think this through.
- # Allowing Owners to remove other Owners may result in Peril
- # Scenario: Removing an Owner
diff --git a/features/membership.feature b/features/membership.feature
deleted file mode 100644
index 0a7e39045..000000000
--- a/features/membership.feature
+++ /dev/null
@@ -1,13 +0,0 @@
-Feature: Membership
- In order to build a more coherent community
- As a Owner
- I want other people to participate in the space
-
- @unimplemented-steps @andromeda
- Scenario: Revoking Membership
- Given the "Super Fun Club" Space has a Member "gonna-bite-it@example.com"
- And the "Super Fun Club" Space has a Member "stick-around@example.com"
- When the Member "stick-around@example.com" removes the Member "gonna-bite-it@example.com" from the "Super Fun Club" Space
- Then the Member "stick-around@example.com" can find the Revoked Member "gonna-bite-it@example.com" in the Space Roster's Revoked Members Section
- And the Neighbor "gonna-bite-it@example.com" can still sign in to the "Super Fun Club" Space
- And the Neighbor "gonna-bite-it@example.com" is not a Member of the "Super Fun Club" Space
\ No newline at end of file
diff --git a/features/navigate-between-convene-and-other-systems.feature b/features/navigate-between-convene-and-other-systems.feature
deleted file mode 100644
index bc76750b0..000000000
--- a/features/navigate-between-convene-and-other-systems.feature
+++ /dev/null
@@ -1,11 +0,0 @@
-# Note: `Room/Rooms` has been renamed to `Section/Sections`.
-
-Feature: Navigate Between Convene and other Systems
- In order to build confidence that Convene plays well with others
- We want to hold the affordances people use to switch between Convene and other systems with a degree of care and intentionality.
-
- @built @unimplemented-steps
- Scenario: Navigate Between Other Tabs in the Browser and Convene
- Given an Attendee is in a Room
- When the Attendee switches to a different tab
- Then the Attendee can tell which of the other Browser tabs is the Convene Room
\ No newline at end of file
diff --git a/features/rooms.feature b/features/rooms.feature
deleted file mode 100644
index 8d027a6e8..000000000
--- a/features/rooms.feature
+++ /dev/null
@@ -1,20 +0,0 @@
-Feature: Rooms
- # Rooms organize the information and functionality of a Space.
-
- # Note: `Room/Rooms` has been renamed to `Section/Sections`.
-
- # Adding a Room is done through the Space Edit page
- @built @unimplemented-steps @andromeda
- Scenario: Adding a Room
- Given a Space
- When a Space Member adds a Room
- Then the Room is listed in the Room Picker
- And the Room may be entered by Space Members
-
- # Removing a Room is done through the Space Edit page
- @unstarted @andromeda
- Scenario: Removing a Room
- Given a Space with a Room
- When a Space Member deletes the Room
- Then the Room is not listed in the Room Picker
- And the Room may not be entered by Space Members
diff --git a/features/rooms/discovering-rooms.feature b/features/rooms/discovering-rooms.feature
deleted file mode 100644
index 5f4e5e8c6..000000000
--- a/features/rooms/discovering-rooms.feature
+++ /dev/null
@@ -1,21 +0,0 @@
-Feature: Discovering Rooms
- In order to interact with other people in a Space
- I want to be able to explore the Space's rooms
-
- @built @unimplemented-steps
- Scenario: Space Member may discover Room
- Given a Space with a Room
- When a Space Member is on the Space Dashboard
- Then they see the Room
-
- @built @unimplemented-steps
- Scenario: Guest may discover Room
- Given a Space with a Room
- When a Guest is on the Space Dashboard
- Then they see the Room
-
- @unstarted
- Scenario: Guest may not discover Internal Room
- Given a Space with an Internal Room
- When a Guest is on the Space Dashboard
- Then they do not see the Room
diff --git a/features/rooms/placing-furniture.feature b/features/rooms/placing-furniture.feature
deleted file mode 100644
index 769850eb0..000000000
--- a/features/rooms/placing-furniture.feature
+++ /dev/null
@@ -1,30 +0,0 @@
-Feature: Rooms: Placing Furniture
- For Rooms to be tailored to their particular purpose, we allow people to add,
- remove, reorder, and otherwise change the Rooms Furniture.
-
- @built @unimplemented-steps @andromeda
- Scenario: Adding Furniture
- Given a Space with an Empty Room
- When a Space Member adds a Text Block Furniture to that Room
- Then that Room has a Text Block in it
-
- @unstarted @andromeda
- Scenario: Re-Ordering Furniture
- Given a Space with a Room with the following Furniture:
- | text block |
- | tip jar |
- | text block |
- When a Space Member moves the Tip Jar Furniture to the Top of the Room
- Then that Room has the following Furniture:
- | tip jar |
- | text block |
- | text block |
-
- @unstarted @andromeda
- Scenario: Removing Furniture
- Given a Space with a Room with the Following Furniture:
- | text block |
- | tip jar |
- When a Space Member removes the Text Block furniture
- Then that Room has the following Furniture:
- | tip jar |
\ No newline at end of file
diff --git a/features/spaces.feature b/features/spaces.feature
deleted file mode 100644
index 7c1b70c80..000000000
--- a/features/spaces.feature
+++ /dev/null
@@ -1,30 +0,0 @@
-Feature: Spaces
- In order to interact with the world digitally
- I want to Register a Space
-
- @unstarted
- Scenario: Registering a Space
- When a Space "New Space" is registered by Neighbor "new-space-owner@example.com" with the following attributes
- | payment details | valid credit card |
- | name | New Space {{ uid }} |
- | slug | new-space-{{ uid }} |
- Then the Space "New Space" has a Space Owner "new-space-owner@example.com"
- And the Space "New Space" is visitable at the Slug "new-space-{{ uid }}"
- And the Space Owner "new-space-owner@example.com" receives a new Space Onboarding Email
-
-
-
- # Spaces can have an "Entrance" room that serves as the primary landing page
- # for that space.
- @built @unimplemented-steps
- Scenario: Space Entrances
- Given a Space with a Room specified as its Entrance
- When Anyone visits the Space
- Then they see the Furniture in the Entrance Room
-
- # When Spaces don't have an entrance, Visitors see the set of Rooms
- @built @unimplemented-steps
- Scenario: Space without Entrances
- Given a Space with no Entrance
- When Anyone visits the Space
- Then they only see the Rooms
diff --git a/features/spaces/acquiring-a-space.feature b/features/spaces/acquiring-a-space.feature
deleted file mode 100644
index 7df026bfc..000000000
--- a/features/spaces/acquiring-a-space.feature
+++ /dev/null
@@ -1,36 +0,0 @@
-Feature: Spaces: Acquiring a Space
- See: https://github.com/zinc-collective/convene/issues/8
-
- Acquire a slice of the community owned Internet. Own your online presence.
-
- @unimplemented @unimplemented-steps
- Scenario: Joining the Waitlist
- When a Guest submits the Space Onboarding Form with the following values:
- | space name | Zee's Space |
- | slug | zee-at-home |
- | domain | home.zeespencer.com |
- | use | personal |
- | prepurchase amount | $5 |
- | owner email | zee@example.com |
- | owner name | Zee Spencer |
- Then a Pending "Zee's Space" Space is created
- And the Operators are sent a new Space Email
- And a Space Pending email is sent to the Space Owner "zee@example.com"
-
- @unimplemented @unimplemented-steps
- Scenario: Visiting Spaces on the Waitlist
- Given "Zee's Space" is on the Waitlist
- And the "Zee's Space" Space has a Space Owner "zee@example.com"
- Then Guests visiting the "Zee's Space" Space are told it is coming soon
- And Neighbors visiting the "Zee's Space" Space are told it is coming soon
- And the Space Owner "zee@example.com" visiting the "Zee's Space" Space are given the full experience
-
- @unimplemented @unimplemented-steps
- Scenario: Approving a Space
- Given "Zee's Space" Space is on the Waitlist
- And the "Zee's Space" Space has a Space Owner "zee@example.com"
- And the Operators approve the Space
- Then Guests visiting the "Zee's Space" Space are given the full experience
- Then Neighbors visiting the "Zee's Space" Space are given the full experience
- And the Space Owner "zee@example.com" visiting the "Zee's Space" Space are given the full experience
-
diff --git a/features/spaces/blueprints.feature b/features/spaces/blueprints.feature
deleted file mode 100644
index e1e8e5fca..000000000
--- a/features/spaces/blueprints.feature
+++ /dev/null
@@ -1,32 +0,0 @@
-@unstarted
-Feature: Spaces: Blueprints
- # See: https://github.com/zinc-collective/convene/issues/476
- #
- # Lay-out a Space with Rooms, Utilities, and Furniture based upon the Space's particular use case!
-
- # For example, let's pretend that a Book Club wants to use Convene to host their regular events, including managing
- # their member rolls, nominations for books to read, and the audio/video connection for their online events.
- #
- # They could create a Space from the "Book Club" Blueprint, which would come pre-configured with our recommendations
- # for how to run an effective book club.
-
- @unstarted @andromeda
- Scenario: Creating a Space from the Bookclub Blueprint
- When a "Ana and Zee's Nerdy Book Club" Space is created from the "Bookclub" Blueprint
- Then the "Ana and Zee's Nerdy Book Club" Space has the following Utilities:
- | utility |
- # @todo define this as features/utilities/jitsi_saas.feature
- | jitsi_saas |
- Then a "Landing Page" Room is in the "Ana and Zee's Nerdy Book Club" Space with the following Furniture:
- | furniture | preferences |
- # @todo define this as features/furniture/join_form.feature
- | join_form | |
- # @todo define this as features/furniture/gathering_post.feature
- | gathering_post | |
- And the Entrance Hall for the "Ana and Zee's Nerdy Book Club" Space is the "Landing Page" Room
- And a "Members" Room is in the "Ana and Zee's Nerdy Book Club" Space with the following Furniture:
- | furniture | preferences |
- | videobridge | |
- | suggestion_box | { title: "What would you like us to read and discuss together?" } |
- | voting_booth | { candidates: [{ name: "The Dispossesed", statement: "It's good! Anarchist mehtopia!!" }] } |
- | link_garden | { links: [url: 'https://discord.gg/12345', title: "Join our Discord!"] } |
\ No newline at end of file
diff --git a/features/spaces/invitations.feature b/features/spaces/invitations.feature
deleted file mode 100644
index d79cc1049..000000000
--- a/features/spaces/invitations.feature
+++ /dev/null
@@ -1,68 +0,0 @@
-Feature: Spaces: Invitations
- Invitations allow Space Owners to bring additional people into the Space
-
- Background:
- Given a "System Test" Space
- And the "System Test" Space has a Space Owner "space-owner@example.com"
-
- @built @andromeda
- Scenario: Inviting new Members via Email
- When an Invitation to the "System Test" Space is sent by Space Owner "space-owner@example.com"
- | name | email |
- | Aang | aang-the-avatar@example.com |
- Then an Invitation to "aang-the-avatar@example.com" for the "System Test" Space is delivered
- And the Invitation to "aang-the-avatar@example.com" for the "System Test" Space has a status of "pending"
-
-
- # We create new Invitation(s) when inviting someone again, so that we have a record of how many times someone was
- # invited. We allow people to accept any of the un-expired invitations that they have been sent.
- @built @unimplemented-steps @andromeda
- Scenario: Re-inviting before an Invitation Expires
- Given an Invitation to the "System Test" Space was sent by Space Owner "space-owner@example.com"
- | name | email | created_at |
- | Aang | aang-the-avatar@example.com | 13 days ago |
- When an Invitation to the "System Test" Space is sent by Space Owner "space-owner@example.com"
- | name | email |
- | Aang | aang-the-avatar@example.com |
- Then an Invitations to "aang-the-avatar@example.com" for the "System Test" Space is delivered
- And two Invitations to "aang-the-avatar@example.com" for the "System Test" Space have a status of "pending"
-
- @built @unimplemented-steps @andromeda
- Scenario: Re-inviting a Member after their Invitation Expires
- Given an Invitation to the "System Test" Space was sent by Space Owner "space-owner@example.com"
- | name | email | created_at |
- | Aang | aang-the-avatar@example.com | 15 days ago |
- When an Invitation to the "System Test" Space is sent by Space Owner "space-owner@example.com"
- | name | email |
- | Aang | aang-the-avatar@example.com |
- Then an Invitations to "aang-the-avatar@example.com" for the "System Test" Space is delivered
- And an Invitation to "aang-the-avatar@example.com" for the "System Test" Space has a status of "pending"
- And an Invitation to "aang-the-avatar@example.com" for the "System Test" Space has a status of "expired"
-
- @built @unimplemented-steps @andromeda
- Scenario: Invitations remain even if the Invitor was Removed from the Space
- Given the "System Test" Space has a Space Owner "soon-to-leave@example.com"
- And an Invitation to the "System Test" Space is sent by Space Owner "soon-to-leave@example.com"
- | name | email |
- | Aang | aang-the-avatar@example.com |
- And the "System Test" Space removes the Space Owner "soon-to-leave@example.com"
- When the Invitation to "aang-the-avatar@example.com" is Accepted
- Then the "System Test" Space has a Space Member "aang-the-avatar@example.com"
-
- @unstarted @unscheduled
- Scenario: Inviting new Members via SMS
- When a Space Owner invites a new Space Member via SMS
- Then an Invitation is sent to that SMS
-
- @unimplemented-steps @unstarted
- Scenario: Revoking a Pending Invitation
- Given an Invitation to "invitee-a@example.com" for the "System Test" Space is sent by Space Owner "space-owner@example.com"
- When the Invitation to "invitee-a@example.com" for the "System Test" Space is Revoked by Space Owner "space-owner@example.com"
- Then the Invitation to "invitee-a@example.com" for the "System Test" Space has a status of "revoked"
- Then the Invitation to "invitee-a@example.com" for the "System Test" Space cannot be Accepted
-
- @unimplemented-steps @built
- Scenario: Revoking Accepted Invitations
- Given an Invitation to "invitee-a@example.com" for the "System Test" Space is sent by Space Owner "space-owner@example.com"
- When the Invitation to "invitee-a@example.com" for the "System Test" Space is Accepted
- Then the Invitation to "invitee-a@example.com" for the "System Test" Space cannot be Revoked
\ No newline at end of file
diff --git a/features/spaces/invitations/responding_to_invitations.feature b/features/spaces/invitations/responding_to_invitations.feature
deleted file mode 100644
index 3133b1f4a..000000000
--- a/features/spaces/invitations/responding_to_invitations.feature
+++ /dev/null
@@ -1,92 +0,0 @@
-Feature: Spaces: Invitations: Responding to Invitations
- Once an Invitation is sent, it can be responded to. This allows the Invitee to:
- - Accept the Invitation and become a Member of the Space
- - Prevent further Invitations from the Space
-
- Background:
- Given a "Team Avatar" Space
- And the "Team Avatar" Space has a Space Owner "appa@example.com"
-
- @built @andromeda
- Scenario: Accepting an Invitation as the invited Un-Authenticated Neighbor
- Given a "Water Tribe" Space
- And the "Water Tribe" Space has a Space Owner "katara@example.com"
- And an Invitation to the "Team Avatar" Space is sent by Space Owner "appa@example.com"
- | name | email |
- | Katara | katara@example.com |
- When the Invitation to "katara@example.com" for the "Team Avatar" Space is accepted by the Neighbor "katara@example.com"
- Then the Neighbor "katara@example.com" becomes a Space Member of the "Team Avatar" Space
- Then the Invitation to "katara@example.com" for the "Team Avatar" Space has a status of "accepted"
-
- @built @andromeda
- Scenario: Accepting an Invitation as the invited Authenticated Neighbor
- Given a "Water Tribe" Space
- And the "Water Tribe" Space has a Space Owner "katara@example.com"
- And an Invitation to the "Team Avatar" Space is sent by Space Owner "appa@example.com"
- | name | email |
- | Katara | katara@example.com |
- And the Neighbor "katara@example.com" is signed in to the "Team Avatar" Space
- When the Invitation to "katara@example.com" for the "Team Avatar" Space is accepted by the Neighbor "katara@example.com"
- Then the Neighbor "katara@example.com" becomes a Space Member of the "Team Avatar" Space
- Then the Invitation to "katara@example.com" for the "Team Avatar" Space has a status of "accepted"
-
- @built @andromeda
- Scenario: Accepting an Invitation as the un-invited Un-Authenticated Neighbor
- Given a "Fire Nation" Space
- And the "Fire Nation" Space has a Space Owner "ozai@example.com"
- And an Invitation to the "Team Avatar" Space is sent by Space Owner "appa@example.com"
- | name | email |
- | Katara | katara@example.com |
- When the Invitation to "katara@example.com" for the "Team Avatar" Space is accepted by the Neighbor "ozai@example.com"
- Then the Neighbor "katara@example.com" does not become a Space Member of the "Team Avatar" Space
- And the Neighbor "ozai@example.com" does not become a Space Member of the "Team Avatar" Space
- # And the Invitation to "katara@example.com" for the "Team Avatar" Space has a status of "invited"
-
- @built @andromeda
- Scenario: Accepting an Invitation as the un-invited Authenticated Neighbor
- Given a "Fire Nation" Space
- And the "Fire Nation" Space has a Space Owner "ozai@example.com"
- And an Invitation to the "Team Avatar" Space is sent by Space Owner "appa@example.com"
- | name | email |
- | Katara | katara@example.com |
- And the Neighbor "ozai@example.com" is signed in to the "Team Avatar" Space
- When the Invitation to "katara@example.com" for the "Team Avatar" Space is accepted by the Neighbor "ozai@example.com"
- Then the Neighbor "katara@example.com" does not become a Space Member of the "Team Avatar" Space
- And the Neighbor "ozai@example.com" does not become a Space Member of the "Team Avatar" Space
- # And the Invitation to "katara@example.com" for the "Team Avatar" Space has a status of "invited"
-
- @built @andromeda
- Scenario: Accepting an Invitation as the invited Guest
- Given an Invitation to the "Team Avatar" Space is sent by Space Owner "appa@example.com"
- | name | email |
- | Zuko | zuko@example.com |
- When the Invitation to "zuko@example.com" for the "Team Avatar" Space is accepted by the Guest "zuko@example.com"
- Then the Guest "zuko@example.com" becomes a Space Member of the "Team Avatar" Space
- And the Invitation to "zuko@example.com" for the "Team Avatar" Space has a status of "accepted"
-
-
- @unstarted @unimplemented-steps
- Scenario: Accepting an Invitation accepts all other outstanding invitations to that Guest
- # @todo implement me! At present, the invitations just stick around as pending; but they probably shouldn't!
- # And all other Invitations to Space Member "a-guest@example.com" for the "System Test" Space no longer have a status of "pending"
-
- # We want to make sure that people who were invited but
- # didn't take action can't suddenly appear and disorient
- # or potentially disrupt the people who are in the Space.
- @built @andromeda @unimplemented-steps
- Scenario: Responding to an Expired Invitation
- Given an Invitation was sent 15 days ago
- Then that Invitation is Expired
- And that Invitation cannot be Accepted
-
- # We want to demonstrate that we care about folks having the
- # affordances to prevent harassment or spam; so we want to provide
- # an explicit option to block further invitations from the Space
- @built @andromeda @unimplemented-steps
- Scenario: Ignoring invitations
- Given an Invitation to the "System Test" Space is sent by Space Owner "space-owner@example.com"
- | name | email |
- | Aang | aang-the-avatar@example.com |
- When the Invitation to "aang-the-avatar@example.com" is Ignored
- Then the Invitation to "aang-the-avatar@example.com" for the "System Test" Space has a status of "ignored"
- And no further Invitations can be sent to "aang-the-avatar@example.com" for the "System Test" Space
\ No newline at end of file
diff --git a/features/spaces/moderation.feature b/features/spaces/moderation.feature
deleted file mode 100644
index 83bd2bdbd..000000000
--- a/features/spaces/moderation.feature
+++ /dev/null
@@ -1,20 +0,0 @@
-Feature: Spaces: Moderation
-
-
- @unstarted @andromeda
- Scenario: Removing Space Members
- Given a "System Test" Space
- And the "System Test" Space has a Space Owner "space-owner@example.com"
- And the "System Test" Space has a Space Member "bad-actor@example.com"
- And an Invitation to the "System Test" Space is sent by Space Member "bad-actor@example.com"
- | name | email |
- | Aang | aang-the-avatar@example.com |
- And an Invitation to the "System Test" Space is sent by Space Member "bad-actor@example.com"
- | name | email |
- | Katara | katara-the-waterbender@example.com |
- And an Invitation to "aang-the-avatar@example.com" the "System Test" Space is accepted
- When the Space Member "bad-actor@example.com" is removed from the "System Test" Space by the Space Owner "space-owner@example.com"
- # We thought that maybe instead of explicitely removing invitations and members, we would
- # start by letting them know who else that person invited.
- Then the Space Owner "space-owner@example.com" is encouraged to investigate the Space Member "aang-the-avatar@example.com"
- Then the Space Owner "space-owner@example.com" is encouraged to investigate the Invitation to "katara-the-waterbender@example.com"
diff --git a/features/steps/furniture/livestream_steps.js b/features/steps/furniture/livestream_steps.js
deleted file mode 100644
index c234e87cc..000000000
--- a/features/steps/furniture/livestream_steps.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Then } from "@cucumber/cucumber";
-import { assertDisplayed } from "../../support/assertDisplayed.js";
-import LiveStreamFurnitureComponent from "../../harness/LiveStreamFurnitureComponent.js";
-Then(
- "{a} {string} Livestream is playing {a} {string} channel",
- function (_a, provider, _a2, channel) {
- return assertDisplayed(
- new LiveStreamFurnitureComponent(this.driver, {
- provider: provider.toLowerCase(),
- channel: channel.toLowerCase(),
- }),
- );
- },
-);
diff --git a/features/steps/furniture_steps.js b/features/steps/furniture_steps.js
deleted file mode 100644
index 6c9601899..000000000
--- a/features/steps/furniture_steps.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import { Given, Then, DataTable } from "@cucumber/cucumber";
-import { assertDisplayed } from "../support/assertDisplayed.js";
-import { FurnitureComponent } from "../harness/FurnitureComponent.js";
-const dataTableToHash = function (dataTable) {
- return dataTable.rows().reduce((attributes, [name, value]) => {
- attributes[name] = value;
- return attributes;
- }, {});
-};
-Given(
- "{a} {furniture} in {a} {entranceHall} to {space} is configured with:",
- /**
- *
- * @this {CustomWorld}
- * @param {*} a
- * @param {Furniture} furniture
- * @param {*} a2
- * @param {Room} entranceHall
- * @param {Space} space
- * @param {DataTable} dataTable
- */
- function (_a, furniture, _a2, room, space, dataTable) {
- const gizmosAttributes = [
- {
- furnitureKind: furniture.type.toLowerCase(),
- gizmoAttributes: dataTableToHash(dataTable),
- },
- ];
-
- return this.api().rooms(space).update(room.assign({ gizmosAttributes }));
- },
-);
-Then(
- "{a} {furniture} is rendered with:",
- /**
- *
- * @param {*} _a
- * @param {Furniture} furniture
- * @param {DataTable} dataTable
- */
- function (_a, furniture, dataTable) {
- return assertDisplayed(
- new FurnitureComponent(
- this.driver,
- furniture.assign(dataTableTohash(dataTable.hashes())),
- ),
- );
- },
-);
diff --git a/features/steps/identification_steps.js b/features/steps/identification_steps.js
deleted file mode 100644
index b8f073e2e..000000000
--- a/features/steps/identification_steps.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import assert$0 from "assert";
-import { Given, When, Then } from "@cucumber/cucumber";
-import { SignInPage, MePage } from "../harness/Pages.js";
-import { Actor } from "../lib/index.js";
-const assert = assert$0.strict;
-Given(
- "an unauthenticated {actor} has requested to be identified to {a} {space} via Email",
- async function (actor, _a, space) {
- this.actor = actor;
- const signInPage = await new SignInPage(this.driver, space).visit();
- return signInPage.submitEmail(actor.email);
- },
-);
-Given(
- "{a} {actor} is signed in to {a} {space}",
- function (_a, actor, _a2, space) {
- return actor
- .signOut(this.driver)
- .then(() => actor.signIn(this.driver, space));
- },
-);
-Given(
- "a {actor} Authenticated Session on {a} {space}",
- /** @param {Actor} actor */
- function (actor, _a, space) {
- this.actor = actor;
- return this.actor.signIn(this.driver, space);
- },
-);
-When(
- "the unauthenticated {actor} opens the Identification Verification Link emailed to them",
- /** @param {Actor} actor */
- function (actor) {
- return actor.authenticationUrl().then((url) => this.driver.get(url));
- },
-);
-When(
- "the unauthenticated {actor} provides the Identification Code emailed to them",
- function (actor) {
- return actor
- .authenticationCode()
- .then((code) => new SignInPage(this.driver).submitCode(code));
- },
-);
-When("the Authenticated Person Signs Out", function () {
- return this.actor.signOut(this.driver);
-});
-Then(
- "the {actor} is Verified as the Owner of that Email Address",
- async function (actor) {
- const mePage = new MePage(this.driver);
- await mePage.visit();
- const person = await mePage.person();
- assert.strictEqual(await person.email, this.actor.email);
- },
-);
-Then("the {actor} has become Authenticated", async function (actor) {
- const mePage = new MePage(this.driver);
- await mePage.visit();
- const person = await mePage.person();
- assert.ok(await person.id);
-});
-Then("the Authenticated Person becomes a {actor}", async function (actor) {
- const mePage = await new MePage(this.driver).visit();
- const person = await mePage.person();
- assert.strictEqual(await person.email, `${actor.email}`);
-});
diff --git a/features/steps/invitation_steps.js b/features/steps/invitation_steps.js
deleted file mode 100644
index 21091bc81..000000000
--- a/features/steps/invitation_steps.js
+++ /dev/null
@@ -1,131 +0,0 @@
-import { When, Then } from "@cucumber/cucumber";
-import assert$0 from "assert";
-import Invitation from "../lib/Invitation.js";
-import Space from "../lib/Space.js";
-import Actor from "../lib/Actor.js";
-import {
- SignInPage,
- MembershipsIndexPage,
- InvitationsIndexPage,
-} from "../harness/Pages.js";
-import Component from "../harness/Component.js";
-import {
- assertDisplayed,
- refuteDisplayed,
-} from "../support/assertDisplayed.js";
-const assert = assert$0.strict;
-
-When("{a} {invitation} is Ignored", function (a, invitation) {
- return invitation.ignore(this.driver);
-});
-
-When(
- "an {invitation} to {a} {space} is sent by {actor}",
- { timeout: 90000 },
- function (invitation, _, space, actor, invitations) {
- /**
- * @todo This feels like responsibility for our Invitation class
- * or the invitation parameter type?
- */
- const toSend = invitations.hashes().map((invitation) => {
- invitation.email = this.upsertTestId(invitation.email);
- return invitation;
- });
-
- return actor
- .signIn(this.driver, space)
- .then(() => new InvitationsIndexPage(this.driver, space))
- .then((page) => page.inviteAll(toSend));
- },
-);
-When(
- "{a} {invitation} for {a} {space} is accepted by {a} {actor}",
- /**
- * @param {Invitation} invitation
- * @param {Space} space
- * @param {Actor} actor
- */
- function (_a, invitation, _a2, space, _a3, actor) {
- return actor.isSignedIn(this.driver).then((signedIn) => {
- if (signedIn) {
- return invitation.accept(this.driver);
- } else {
- return actor
- .signOut(this.driver)
- .then(() => invitation.accept(this.driver))
- .then(() => actor.authenticationCode())
- .then((code) => new SignInPage(this.driver, space).submitCode(code))
- .catch((e) => console.error(e));
- }
- });
- },
-);
-
-Then(
- "no further Invitations can be sent to {string} for {a} {space}",
- function (string, a, space) {
- // Write code here that turns the phrase above into concrete actions
- return "pending";
- },
-);
-
-Then(
- "an {invitation} for {a} {space} is delivered",
- /**
- * @param {Invitation} invitation
- */
- async function (invitation, _a, space) {
- assert(await invitation.wasDelivered());
- assert(await invitation.rsvpLink());
- },
-);
-Then(
- "{a} {invitation} for {a} {space} has {a} status of {string}",
- /**
- * @param {Invitation} invitation
- */
- function (_a, invitation, _a2, space, _a3, status) {
- const page = new InvitationsIndexPage(this.driver, space);
- return page.visit().then(() => {
- return assertDisplayed(page.invitation({ invitation, status }));
- });
- },
-);
-Then(
- "{a} {actor} becomes {a} {actor} of {a} {space}",
- /**
- * @param {Actor} actor
- * @param {Space} space
- */
- function (_a, actor, _a2, _role, _a3, space) {
- return (
- actor
- .signIn(this.driver, space)
- // @todo Refactor to live in the harness
- .then(() =>
- assertDisplayed(
- new Component(this.driver, '*[aria-label="Configure Space"]'),
- ),
- )
- );
- },
-);
-Then(
- "{a} {actor} does not become {a} {actor} of {a} {space}",
- function (_a, actor, _a2, _role, _a3, space) {
- // Write code here that turns the phrase above into concrete actions
- return (
- actor
- .signIn(this.driver, space)
- // @todo Refactor to live in the harness
- .then(() =>
- refuteDisplayed(
- new Component(
- this.driver,
- 'header a.--configure[aria_label="Configure Space"]',
- ),
- ),
- )
- );
- },
-);
diff --git a/features/steps/room_steps.js b/features/steps/room_steps.js
deleted file mode 100644
index 0b67c4e6c..000000000
--- a/features/steps/room_steps.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Given, Then } from "@cucumber/cucumber";
-Given(
- "{a} {space} with {a} {accessLevel} {room}",
- async function (_, space, _1, accessLevel, room) {
- this.spaces = this.spaces || {};
- if (this.spaces[space.name]) {
- return;
- }
- return this.api()
- .spaces()
- .create(space)
- .then((space) => (this.spaces[space.name] = space));
- },
-);
-
-Then("the {space} has a {room}", function (space, room) {
- // Write code here that turns the phrase above into concrete actions
- return "pending";
-});
diff --git a/features/steps/space_steps.js b/features/steps/space_steps.js
deleted file mode 100644
index d84e5ffb3..000000000
--- a/features/steps/space_steps.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import { Given, When } from "@cucumber/cucumber";
-import { SpacePage, SpaceEditPage } from "../harness/Pages.js";
-import { linkParameters, Actor, Space } from "../lib/index.js";
-import appUrl from "../lib/appUrl.js";
-import { Api } from "../lib/Api.js";
-import AuthenticationMethod from "../lib/AuthenticationMethod.js";
-import Membership from "../lib/Membership.js";
-
-Given("{a} {space}", function (_, space) {
- this.spaces = this.spaces || {};
- return this.api()
- .spaces()
- .create(space)
- .then((space) => (this.spaces[space.name] = space));
-});
-Given("a Space with a Room", function () {
- // This space intentionally left blank... For now...
- // TODO: Create a Space for each test instead of re-using the
- // System Test Space
-});
-Given(
- "{a} {space} has {a} {actor}",
- /**
- *
- * @param {*} _
- * @param {Space} space
- * @param {*} _
- * @param {Actor} actor
- * @returns
- */
- function (_a1, space, _a2, actor) {
- this.actors = this.actors || {};
- this.actors[actor.email] = actor;
- space = this.spaces[space.name] || space;
- const api = new Api(appUrl(), process.env.OPERATOR_API_KEY);
- const toCreate = new AuthenticationMethod({
- contactMethod: "email",
- contactLocation: actor.email,
- });
- return api
- .authenticationMethods()
- .findOrCreateBy(toCreate)
- .then((authenticationMethod) =>
- api
- .spaceMemberships()
- .findOrCreateBy(
- new Membership({ space, member: authenticationMethod.person }),
- ),
- );
- },
-);
-
-When(
- "{a} {actor} visits {a} {space}",
- /**
- * @this {CustomWorld}
- * @param {*} _a
- * @param {Actor} actor
- * @param {*} _a2
- * @param {Space} space
- * @returns
- */
- function (_a, _actor, _a2, space) {
- this.space = new SpacePage(this.driver, space);
- return this.space.visit();
- },
-);
-
-When("a {actor} adds a {room}", function (actor, room) {
- const { space } = linkParameters({ actor, room });
- const page = new SpaceEditPage(this.driver, space);
- return page.visit().then((p) => p.createRoom({ room }));
-});
diff --git a/features/steps/utility_steps.js b/features/steps/utility_steps.js
deleted file mode 100644
index b41d77100..000000000
--- a/features/steps/utility_steps.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { When, Then } from "@cucumber/cucumber";
-import { SpaceEditPage } from "../harness/Pages.js";
-import { Actor, Space } from "../lib/index.js";
-
-Then("that Utility can not be used by Furniture in the Space", function () {
- // Write code here that turns the phrase above into concrete actions
- return "pending";
-});
diff --git a/features/support/CustomWorld.js b/features/support/CustomWorld.js
deleted file mode 100644
index 44d03417f..000000000
--- a/features/support/CustomWorld.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import crypto from "crypto";
-import { Api } from "../lib/Api.js";
-import appUrl from "../lib/appUrl.js";
-import { driver } from "./driver.js";
-class CustomWorld {
- constructor() {
- this.driver = driver;
- }
- /**
- * @returns {Api}
- */
- api() {
- return (this._api =
- this._api || new Api(appUrl(), process.env.OPERATOR_API_KEY));
- }
- /**
- * @returns {String}
- */
- testId() {
- return (this._testId = this._testId || crypto.randomUUID());
- }
- /**
- * Ensures email addresses are all traceable back to the same test
- * This isolates our tests, eliminates race conditions, and makes things easier to diagnose
- * @param {string} email
- * @returns string
- */
- upsertTestId(email) {
- if (!email) {
- return email;
- }
- return email.replace("@", `-${this.testId()}@`);
- }
-}
-export { CustomWorld };
diff --git a/features/support/assertDisplayed.js b/features/support/assertDisplayed.js
deleted file mode 100644
index 8d24fe9a1..000000000
--- a/features/support/assertDisplayed.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import assert$0 from "assert";
-const assert = assert$0.strict;
-function assertDisplayed(component) {
- return component.isDisplayed().then((result) => {
- assert(result, `${component.selector}`);
- });
-}
-function refuteDisplayed(component) {
- return component
- .isDisplayed()
- .then((result) => assert(!result, `${component.selector}`));
-}
-export { assertDisplayed };
-export { refuteDisplayed };
diff --git a/features/support/driver.js b/features/support/driver.js
index 748b61ee6..a9cbadec8 100644
--- a/features/support/driver.js
+++ b/features/support/driver.js
@@ -8,7 +8,7 @@ driver = new Builder()
driver.manage().setTimeouts({ implicit: 1000 });
function firefoxOption() {
return process.env.HEADLESS
- ? new firefox.Options().headless()
+ ? new firefox.Options().addArguments("--headless")
: new firefox.Options();
}
export { driver };
diff --git a/features/support/env.js b/features/support/env.js
deleted file mode 100644
index d79e440a5..000000000
--- a/features/support/env.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import { config } from "dotenv";
-import fse from "fs-extra";
-import {
- setWorldConstructor,
- BeforeAll,
- AfterAll,
- After,
- setDefaultTimeout,
- Status,
-} from "@cucumber/cucumber";
-import appUrl from "../lib/appUrl.js";
-import { CustomWorld } from "./CustomWorld.js";
-import { driver } from "./driver.js";
-({ config }).config();
-setWorldConstructor(CustomWorld);
-After(function (testCase) {
- if (testCase.result.status == Status.FAILED) {
- return driver.takeScreenshot().then((screenShot) => {
- const filePath = `features/test_reports/${testCase.pickle.name
- .split(" ")
- .join("_")}.png`;
- fse.outputFile(filePath, screenShot, { encoding: "base64" }, (err) => {
- if (err) console.log(err);
- console.log("Screenshot created: ", filePath);
- });
- });
- }
-});
-BeforeAll(function () {
- return driver.get(appUrl());
-});
-AfterAll(function () {
- driver.quit();
-});
-/**
- * Sometimes booting Selenium or Webpack takes a while.
- * This should reduce test failures from that.
- */
-setDefaultTimeout(30000);
diff --git a/features/support/linkParameters.js b/features/support/linkParameters.js
deleted file mode 100644
index e69de29bb..000000000
diff --git a/features/support/parameter-types/README.md b/features/support/parameter-types/README.md
deleted file mode 100644
index abc09aba1..000000000
--- a/features/support/parameter-types/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Convene::Features::ParameterTypes
-
-We use [Cucumber Parameter Types] to help keep our phrasing consistent when
-describing the different adjectives and nouns within our domain model, as well
-as to provide [affordances] for adding behavior specific to those nouns.
-
-Parameter Types are automatically detected from a feature files Steps, and can
-be transformed into JavaScript objects before being passed into step
-definitions. This gives us a [seam] for customizing behavior within a step based
-upon a feature definition without changing the step implementation.
-
-For more information, see the [Cucumber parameter types] documentation, as well
-as the [cucumber-js parameter types API reference].
-
-[affordances]: https://www.interaction-design.org/literature/topics/affordances
-[seam]: https://wiki.c2.com/?SoftwareSeam
-[cucumber parameter types]: https://cucumber.io/docs/cucumber/cucumber-expressions/#custom-parameter-types
-[cucumber-js parameter types api reference]: https://github.com/cucumber/cucumber-js/blob/master/docs/support_files/api_reference.md#defineparametertypename-preferforregexpmatch-regexp-transformer-useforsnippets
-
-## Core Parameter Types
-
-The core nouns in Convene are:
-
-1. [Actors], the person or program performing a Step.
-2. [Rooms], where people congregate to work together.
-3. [Spaces], which group Rooms and People for access and discoverability
- purposes.
-4. [Furniture] for human/computer interaction within a space.
-
-Note: `Room/Rooms` has been renamed to `Section/Sections`.
-
-Note: `Furniture` has been renamed to `Gizmo/Gizmos`.
-
-[actors]: ./actors.js
-[rooms]: ./rooms.js
-[spaces]: ./spaces.js
-[furniture]: ./furniture.js
diff --git a/features/support/parameter-types/accessLevel.js b/features/support/parameter-types/accessLevel.js
deleted file mode 100644
index 6862e2d3a..000000000
--- a/features/support/parameter-types/accessLevel.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { AccessLevel } from "../../lib/index.js";
-import { defineParameterType } from "@cucumber/cucumber";
-// This matches steps based on the access control model
-// See: https://github.com/zinc-collective/convene/issues/40
-// See: https://github.com/zinc-collective/convene/issues/41
-defineParameterType({
- name: "accessLevel",
- regexp: /(Public|Internal)/,
- transformer: (level) => new AccessLevel(level),
-});
diff --git a/features/support/parameter-types/actor.js b/features/support/parameter-types/actor.js
deleted file mode 100644
index 5bb4f8dbc..000000000
--- a/features/support/parameter-types/actor.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import { defineParameterType } from "@cucumber/cucumber";
-import Actor from "../../lib/Actor.js";
-// Actors are the people or sytems our test suite emulates as it
-// interacts with Convene.
-// We have several Actor types:
-// - Guest (Someone who is not authenticated within Convene)
-// - Neighbor (Someone who is authenticated within Convene, but not a Member of the Space)
-// - Space Member (Someone who is authenticated and is a Member of the Space)
-// - Space Owner (Someone who is authenticated and has moderator rights within the Space)
-defineParameterType({
- name: "actor",
- regexp: /(Guest|Space Member|Space Owner|Neighbor)( "[^"]*")?/,
- transformer: function (actorType, email) {
- email = formatEmail(actorType, email);
- if (email !== "guest@example.com") {
- email = this.upsertTestId(email);
- }
- return new Actor(actorType, email);
- },
-});
-/**
- * Infers the email from the actorType if necessary; then removes the string matching regex slop.
- * @param {String} actorType
- * @param {undefined|String} email
- * @returns {String} the email
- */
-function formatEmail(actorType, email = undefined) {
- email = email || `${actorType.toLowerCase()}@example.com`;
- return email.trim().replace(/\s/, "-").replace(/"/g, "");
-}
diff --git a/features/support/parameter-types/articleAdjective.js b/features/support/parameter-types/articleAdjective.js
deleted file mode 100644
index 35b8ea7a8..000000000
--- a/features/support/parameter-types/articleAdjective.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import { defineParameterType } from "@cucumber/cucumber";
-defineParameterType({
- name: "a",
- regexp: /(a|an|the)/,
-});
diff --git a/features/support/parameter-types/furniture.js b/features/support/parameter-types/furniture.js
deleted file mode 100644
index aed97251c..000000000
--- a/features/support/parameter-types/furniture.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { defineParameterType } from "@cucumber/cucumber";
-import Furniture from "../../lib/Furniture.js";
-defineParameterType({
- name: "furniture",
- regexp: /"(.*)" Furniture/,
- transformer: function (type) {
- return new Furniture({ type });
- },
-});
diff --git a/features/support/parameter-types/invitation.js b/features/support/parameter-types/invitation.js
deleted file mode 100644
index 83a226365..000000000
--- a/features/support/parameter-types/invitation.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { defineParameterType } from "@cucumber/cucumber";
-import Invitation from "../../lib/Invitation.js";
-defineParameterType({
- name: "invitation",
- regexp: /Invitation( to "[^"]*")?/,
- transformer: function (a, b, c) {
- let emailAddress = this.upsertTestId(
- a ? a.match(/to "([^"]*)"/)[1] : undefined,
- );
- return new Invitation(emailAddress);
- },
-});
diff --git a/features/support/parameter-types/room.js b/features/support/parameter-types/room.js
deleted file mode 100644
index 9b025d1fc..000000000
--- a/features/support/parameter-types/room.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { defineParameterType } from "@cucumber/cucumber";
-import { Room } from "../../lib/index.js";
-// This injects a Room class into steps with named rooms (i.e.) `the "Ada" Room` and
-// steps that mention `Room` in isolation.
-defineParameterType({
- name: "room",
- // To make the Room Name optional, we had to capture two things, otherwise
- // Cucumber will discard the "room" value. This appears to be because the
- // `Group` class assumes that if there are capture-groups in a parameterType,
- // the rest of the match should be discarded.
- // See: https://github.com/cucumber/cucumber/blob/5a3a3167958c45d708228d953a1d5b0f5625a633/cucumber-expressions/javascript/src/Group.ts#L11
- //
- // There are probably multiple ways to work around this. For example, instead of
- // adding a capture group, we could check if roomName is undefined in the Room
- // class, and default it to 'Room' or something.
- //
- // In the meantime, adding a capture-group around "Room" ensures that the Room
- // class has a string provided to it.
- regexp: /("[^"]*" )?(Room)/,
- transformer: (roomName = "") =>
- new Room({ name: roomName.trim().replace(/"/g, "") }),
-});
-defineParameterType({
- name: "entranceHall",
- regexp: /Entrance Hall/,
- transformer: () => new Room({ name: "Entrance Hall" }),
-});
diff --git a/features/support/parameter-types/space.js b/features/support/parameter-types/space.js
deleted file mode 100644
index adab54a1f..000000000
--- a/features/support/parameter-types/space.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import { defineParameterType } from "@cucumber/cucumber";
-import Space from "../../lib/Space.js";
-// This injects a Space class into steps with named Spaces (i.e.)
-// `the "Convene Demo" Space` and steps that mention `Space` in
-// isolation.
-defineParameterType({
- name: "space",
- regexp: /("[^"]*" )?Space/,
- transformer: function (name = "System Test") {
- const tidyName = name.trim().replace(/\"/g, "");
- this.spaces = this.spaces || {};
- return (this.spaces[tidyName] =
- this.spaces[tidyName] ||
- new Space({ name: `${this.testId()} ${tidyName}` }));
- },
-});
diff --git a/features/utilities.feature b/features/utilities.feature
deleted file mode 100644
index 2bf982e9f..000000000
--- a/features/utilities.feature
+++ /dev/null
@@ -1,83 +0,0 @@
-Feature: Utilities
-
-# Note: `Furniture` has been renamed to `Gizmo/Gizmos`.
-
-# Utilities connect a Space to the broader Internet, and allow Furniture
-# within the Space to leverage other Services or Websites. A Space connects
-# to Utilities via a Utility; which can be used by Furniture or
-# general Convene features.
-
-# Examples:
-# - A Stripe Utility, so Furniture that focuses on accepting payments or
-# managing billing or responding to payment events can take those actions
-# - A Jitsi Meet Utility, for Furniture that leverages JitsiMeet's APIs for
-# real-time video
-# - A Quickbooks Utility, so Furniture that wants to interact with the
-# Space Owners financials or send invoices can do that
-# - An AirTable Utility, for Furniture that wants to store data in AirTable
-
-
-# While Utilities can be added to a Space without constraint, they may
-# have different requirements before being usable; such as requiring a
-# payment, requiring the Space Owner to accept terms of service,
-# authenticating with an upstream service provider, having API keys or other
-# data entered, etc.
-
-# The particular requirements for each Utility will be defined in that
-# Utilities feature file.
-
- @unstarted @andromeda
- Scenario: Adding a Utility to a Space
- When a Space Owner adds an unconfigured Utility to their Space
- Then the Space Owner can further configure that Utility
- And that Utility can not be used by Furniture in the Space
-
- @unstarted @andromeda
- Scenario: Configuring a Utility
- Given an unconfigured Utility for a Space
- When the Space Owner configures that Utility
- Then that Utility can be used by Furniture in the Space
-
- # If a Utility is not used by any Furniture, it can be safely removed
- # from a Space.
- @unstarted @andromeda
- Scenario: Removing an unused Utility
- Given an unused Utility
- When the Space Owner removes that Utility
- Then the Utility can not be used by Furniture in the Space
-
- # A Utility that is being used by Furniture probably needs a bit more
- # thought put into it for removal. So we're going to... not let people do
- # that for Andromeda. Unless someone is eager to take it!
- #
- # See "Scenario: Removing an in-use Utility" for future plans.
- @unstarted @andromeda
- Scenario: In-use Utilities may not be removed
- Given a Utility with Furniture using it
- Then a Space Owner may not remove that Utility
-
- # I'm hopeful we can figure out a tight way to use this for checking
- # permissions end-to-end.
- @unstarted @andromeda
- Scenario: Only Operators and Space Owners may modify Utilities
- Then "Utility" resources have the following permissions:
- | group | permissions |
- | Operator | new, create, show, list, edit, update, destroy |
- | Space Owner | new, create, show, list, edit, update, destroy |
- | Space Member | show, list |
- | Neighbor | show, list |
- | Guest | show, list |
-
-
- @unstarted @milestone-b
- Scenario: Removing an in-use Utility
- Given an in-use Utility
- When the Space Owner removes that Utility
- Then that Utility can not be used by Furniture in the Space
- And the Furniture that was using that Utility is disabled
-
- @unstarted @milestone-b
- Scenario: Noticing a Utility with Missing Configuration
- Given a Space with a Utility that has missing configuration
- When a Space Owner visits the Space
- Then the Space Owner is prompted to complete the Utility's Configuration
diff --git a/features/utilities/jitsi-meet.feature b/features/utilities/jitsi-meet.feature
deleted file mode 100644
index 9c2fba820..000000000
--- a/features/utilities/jitsi-meet.feature
+++ /dev/null
@@ -1,15 +0,0 @@
-Feature: Utilities: Jitsi Meet
- In order to support audio/video calls
- I want to leverage Jitsi Meet in my Space
-
- # @see: https://jaas.8x8.vc
-
- @unstarted @milestone-a
- Scenario: Configuring the Jitsi Meet Utility
- Given a Space with a Jitsi Meet Utility
- When a Space Owner sets the following Configuration for that Utility
- | field | value |
- | url | https://jitsi-meet.example.com |
- | application_id | this-is-provided-by-jitsi-meet |
- | application_secret | secret-key-used-to-generate-tokens |
- Then the Jitsi Meet Utility is Ready For Use
diff --git a/features/utilities/plaid.feature b/features/utilities/plaid.feature
deleted file mode 100644
index 700ffc277..000000000
--- a/features/utilities/plaid.feature
+++ /dev/null
@@ -1,13 +0,0 @@
-Feature: Utilities: Plaid
- In order to support interactions with Financial Institutions
- I want to leverage Plaid within my Space
-
- @built @unimplemented-steps @milestone-a
- Scenario: Configuring the Plaid Utility
- Given a Space with a Plaid Utility
- When a Space Owner sets the following Configuration for that Utility
- | field | value |
- | client_id | plaid_sandbox_client_id |
- | plaid_secret | plaid_sandbox_secret |
- | env | sandbox |
- Then the Plaid Utility is Ready to Use
diff --git a/features/utilities/stripe.feature b/features/utilities/stripe.feature
deleted file mode 100644
index 042420a07..000000000
--- a/features/utilities/stripe.feature
+++ /dev/null
@@ -1,13 +0,0 @@
-Feature: Utilities: Stripe
- In order to sell things or acccept payments
- I want to leverage Stripe in my Space
-
- # @see https://stripe.com/
- @unstarted @milestone-a
- Scenario: Configuring the Stripe Utility
- Given a Space with a Stripe Utility
- When a Space Owner sets the following Configuration for that Utility
- | field | value |
- | publishable_key | a-publishjable-stripe-key |
- | secret_key | a-secret-stripe-key |
- Then the Stripe Utility is Ready FFor Use
diff --git a/features/vendor-affiliates.feature b/features/vendor-affiliates.feature
deleted file mode 100644
index 704f75815..000000000
--- a/features/vendor-affiliates.feature
+++ /dev/null
@@ -1 +0,0 @@
-# @todo Sketch this out
\ No newline at end of file
diff --git a/package.json b/package.json
index 79ad3548f..88bd3a4dd 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,6 @@
"scripts": {
"build": "webpack --config webpack.config.js",
"build:css": "postcss --config postcss.config.cjs ./app/assets/stylesheets/application.postcss.css -o ./app/assets/builds/application.css",
- "test": "cucumber-js --format @cucumber/pretty-formatter --tags 'not @unscheduled and not @wip and not @unimplemented-steps and not @unstarted' --import features/",
"autoformat": "prettier --write './**/*.{scss,css,js}'"
},
"repository": {
@@ -30,32 +29,19 @@
},
"homepage": "https://github.com/zinc-collective/convene#readme",
"devDependencies": {
- "@cucumber/cucumber": "^10.2.1",
- "@cucumber/pretty-formatter": "^1.0.0",
- "axios": "^1.6.5",
- "axios-case-converter": "^1.1.0",
- "change-case": "^5.4.1",
- "dotenv": "^16.3.1",
- "fs-extra": "^11.2.0",
- "geckodriver": "^4.3.0",
- "get-urls": "^12.1.0",
- "lodash": "^4.17.21",
- "prettier": "^3.2.1",
- "promise-retry": "^2.0.1",
- "selenium-webdriver": "^4.16.0",
- "webpack-dev-server": "^4.15.1"
+ "prettier": "^3.2.4"
},
"dependencies": {
"@hotwired/stimulus": "^3.2.2",
"@hotwired/stimulus-webpack-helpers": "^1.0.1",
"@hotwired/turbo-rails": "^7.3.0",
- "@rails/actioncable": "^7.1.2",
- "@rails/activestorage": "^7.1.2",
- "@sentry/browser": "^7.93.0",
+ "@rails/actioncable": "^7.1.3",
+ "@rails/activestorage": "^7.1.3",
+ "@sentry/browser": "^7.98.0",
"@tailwindcss/forms": "^0.5.7",
"@tailwindcss/typography": "^0.5.10",
"@webpack-cli/serve": "^2.0.5",
- "autoprefixer": "^10.4.16",
+ "autoprefixer": "^10.4.17",
"event-target-shim": "^6.0.2",
"postcss": "^8.4.33",
"postcss-cli": "^11.0.0",
diff --git a/spec/factories/media.rb b/spec/factories/media.rb
new file mode 100644
index 000000000..56d30c914
--- /dev/null
+++ b/spec/factories/media.rb
@@ -0,0 +1,5 @@
+FactoryBot.define do
+ factory :media do
+ upload { Rack::Test::UploadedFile.new("spec/fixtures/files/cc-kitten.jpg", "image/jpeg") }
+ end
+end
diff --git a/spec/factories/room.rb b/spec/factories/room.rb
index 723452ba4..37d9b5c89 100644
--- a/spec/factories/room.rb
+++ b/spec/factories/room.rb
@@ -28,5 +28,9 @@
create_list(:furniture, evaluator.furniture_count, room: room)
end
end
+
+ trait :with_hero_image do
+ hero_image factory: :media
+ end
end
end
diff --git a/spec/furniture/marketplace/buying_products_system_spec.rb b/spec/furniture/marketplace/buying_products_system_spec.rb
index 2ac660d73..c809259c7 100644
--- a/spec/furniture/marketplace/buying_products_system_spec.rb
+++ b/spec/furniture/marketplace/buying_products_system_spec.rb
@@ -96,8 +96,8 @@ def url_options
end
def add_product_to_cart(product)
- within("##{dom_id(product).gsub("product", "cart_product")}") do
- click_link(t("marketplace.cart_product_component.add"))
+ within("##{dom_id(product)}") do
+ click_button("Add to Cart")
end
end
diff --git a/spec/furniture/marketplace/cart_product_component_spec.rb b/spec/furniture/marketplace/cart_product_component_spec.rb
index a98bb4195..d80fe778a 100644
--- a/spec/furniture/marketplace/cart_product_component_spec.rb
+++ b/spec/furniture/marketplace/cart_product_component_spec.rb
@@ -8,20 +8,27 @@
let(:cart) { create(:marketplace_cart) }
let(:marketplace) { cart.marketplace }
let(:product) { create(:marketplace_product, :with_description, :with_photo) }
- let(:cart_product) { create(:marketplace_cart_product, cart: cart, product: product) }
+ let(:cart_product) { create(:marketplace_cart_product, cart:, product:, quantity: 5) }
let(:component) { described_class.new(cart_product: cart_product, current_person: operator) }
it { is_expected.to have_content(product.name) }
it { is_expected.to have_content(product.description) }
it { is_expected.to have_content(helpers.humanized_money_with_symbol(product.price)) }
- it { is_expected.to have_link(I18n.t("marketplace.cart_product_component.add")) }
- it { is_expected.to have_link(I18n.t("marketplace.cart_product_component.remove")) }
- it { is_expected.to have_css("img[src*='#{product.photo.filename}']") }
+ it { is_expected.to have_button("➕") }
+ it { is_expected.to have_button("➖") }
- context "when the product is not yet in the cart" do
- let(:cart_product) { build(:marketplace_cart_product, cart: cart, product: product, quantity: 0) }
+ context "when the quantity is 0" do
+ let(:cart_product) { build(:marketplace_cart_product, cart:, product:, quantity: 0) }
- it { is_expected.to have_no_link(I18n.t("marketplace.cart_product_component.remove")) }
+ it { is_expected.to have_no_button("➖") }
+ it { is_expected.to have_button("Add to Cart") }
+ end
+
+ context "when the quantity is 1" do
+ let(:cart_product) { build(:marketplace_cart_product, cart:, product:, quantity: 1) }
+
+ it { is_expected.to have_button("➕") }
+ it { is_expected.to have_button("🗑️") }
end
end
diff --git a/spec/furniture/marketplace/cart_products_controller_request_spec.rb b/spec/furniture/marketplace/cart_products_controller_request_spec.rb
index 99bbdebd2..390c4bc12 100644
--- a/spec/furniture/marketplace/cart_products_controller_request_spec.rb
+++ b/spec/furniture/marketplace/cart_products_controller_request_spec.rb
@@ -20,30 +20,7 @@
it "Add a Product to the Cart" do
perform_request
- expect(response).to redirect_to([space, room])
- end
-
- context "when a turbo stream" do
- subject(:perform_request) do
- post path, as: :turbo_stream, params: {cart_product: {product_id: product.id, quantity: 1}}
- response
- end
-
- it "Replaces the cart product, cart footer and cart total" do
- perform_request && cart.reload
-
- assert_select("turbo-stream[action='replace'][target='cart_product_#{product.id}']") do
- assert_select("*[data-cart-product-quantity]", text: "1")
- end
-
- assert_select("turbo-stream[action='replace'][target='cart-footer-#{cart.id}']")
- assert_select("turbo-stream[action='replace'][target='cart-total-#{cart.id}'] *[data-cart-total]", text: "Total: #{controller.helpers.humanized_money_with_symbol(cart.price_total)}")
-
- assert_select("turbo-stream[action='replace'][target='cart-total-#{cart.id}']") do
- assert_select("*[data-cart-total]", text: "Total: #{controller.helpers.humanized_money_with_symbol(cart.price_total)}")
- assert_select("*[data-cart-product-total]", text: "Products: #{controller.helpers.humanized_money_with_symbol(cart.product_total)}")
- end
- end
+ expect(response).to redirect_to(marketplace.location)
end
end
@@ -62,29 +39,7 @@
perform_request
cart_product.reload
expect(cart_product.quantity).to eq(5)
- expect(response).to redirect_to([space, room])
- end
-
- context "when a turbo stream" do
- subject(:perform_request) do
- put path, as: :turbo_stream, params: params
- end
-
- it "Replaces the cart product, cart footer and cart total" do
- perform_request && cart.reload
-
- assert_select("turbo-stream[action='replace'][target='cart_product_#{product.id}']") do
- assert_select("*[data-cart-product-quantity]", text: "5")
- end
-
- assert_select("turbo-stream[action='replace'][target='cart-footer-#{cart.id}']")
- assert_select("turbo-stream[action='replace'][target='cart-total-#{cart.id}'] *[data-cart-total]", text: "Total: #{controller.helpers.humanized_money_with_symbol(cart.price_total)}")
-
- assert_select("turbo-stream[action='replace'][target='cart-total-#{cart.id}']") do
- assert_select("*[data-cart-total]", text: "Total: #{controller.helpers.humanized_money_with_symbol(cart.price_total)}")
- assert_select("*[data-cart-product-total]", text: "Products: #{controller.helpers.humanized_money_with_symbol(cart.product_total)}")
- end
- end
+ expect(response).to redirect_to(marketplace.location)
end
end
@@ -99,30 +54,7 @@
let(:product) { create(:marketplace_product, marketplace: marketplace) }
let(:cart_product) { create(:marketplace_cart_product, cart: cart, product: product) }
- it { is_expected.to redirect_to([space, room]) }
+ it { is_expected.to redirect_to(marketplace.location) }
specify { expect { perform_request }.to change { Marketplace::CartProduct.exists?(cart_product.id) }.to(false) }
-
- context "when a turbo stream" do
- subject(:perform_request) do
- delete path, as: :turbo_stream
- response
- end
-
- it "Replaces the cart product, cart footer and cart total" do
- perform_request
-
- assert_select("turbo-stream[action='replace'][target='cart_product_#{cart_product.product_id}']") do
- assert_select("*[data-cart-product-quantity]", text: "0")
- end
-
- assert_select("turbo-stream[action='replace'][target='cart-footer-#{cart.id}']")
- assert_select("turbo-stream[action='replace'][target='cart-total-#{cart.id}'] *[data-cart-total]", text: "Total: $0.00")
-
- assert_select("turbo-stream[action='replace'][target='cart-total-#{cart.id}']") do
- assert_select("*[data-cart-total]", text: "Total: $0.00")
- assert_select("*[data-cart-product-total]", text: "Products: $0.00")
- end
- end
- end
end
end
diff --git a/spec/furniture/marketplace/selling_products_system_spec.rb b/spec/furniture/marketplace/selling_products_system_spec.rb
index 7fb567b4c..c78cc761d 100644
--- a/spec/furniture/marketplace/selling_products_system_spec.rb
+++ b/spec/furniture/marketplace/selling_products_system_spec.rb
@@ -45,7 +45,6 @@
end
click_button(I18n.t("restore.link_to"))
-
expect(page).to have_content(product.name)
expect(product.reload).not_to be_archived
end
diff --git a/spec/models/media_spec.rb b/spec/models/media_spec.rb
new file mode 100644
index 000000000..4a1e187d6
--- /dev/null
+++ b/spec/models/media_spec.rb
@@ -0,0 +1,5 @@
+require "rails_helper"
+
+RSpec.describe Media do
+ it { is_expected.to have_one_attached(:upload) }
+end
diff --git a/yarn.lock b/yarn.lock
index b70b00a56..d6c8333d2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7,33 +7,6 @@
resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
-"@babel/code-frame@^7.0.0":
- 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/helper-validator-identifier@^7.22.20":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
- integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
-
-"@babel/highlight@^7.22.13":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54"
- integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==
- dependencies:
- "@babel/helper-validator-identifier" "^7.22.20"
- chalk "^2.4.2"
- js-tokens "^4.0.0"
-
-"@colors/colors@1.5.0":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
- integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
-
"@csstools/cascade-layer-name-parser@^1.0.5":
version "1.0.5"
resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.5.tgz#c4d276e32787651df0007af22c9fa70d9c9ca3c2"
@@ -297,143 +270,6 @@
resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247"
integrity sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==
-"@cucumber/ci-environment@10.0.0":
- version "10.0.0"
- resolved "https://registry.yarnpkg.com/@cucumber/ci-environment/-/ci-environment-10.0.0.tgz#1ad66cc20cad9aefcfe92f4db3553680de2dd365"
- integrity sha512-lRkiehckosIOdc7p1L44nZsttO5dVHFjpwKKWZ07x8SeoAdV/sPuGe1PISe0AmAowFGza62nMOgG4KaroGzwFQ==
-
-"@cucumber/cucumber-expressions@17.0.1":
- version "17.0.1"
- resolved "https://registry.yarnpkg.com/@cucumber/cucumber-expressions/-/cucumber-expressions-17.0.1.tgz#d41a7fe298740badc22c02d424092223c5b5f6a1"
- integrity sha512-reR7/sNRmDWgdz8BtFuHEwpksPnAkHty7gxUC2n0iaUPmckv9G5I5i+Vonc6xwUHDb/hmHPz/DyUL+Iv4Ao96w==
- dependencies:
- regexp-match-indices "1.0.2"
-
-"@cucumber/cucumber@^10.2.1":
- version "10.2.1"
- resolved "https://registry.yarnpkg.com/@cucumber/cucumber/-/cucumber-10.2.1.tgz#f24a33793f8ef409adf75bb8bfa3f323328c29ba"
- integrity sha512-jpJPhngRDHkPkTYQ4dtDHM30dhyM7OJJTMqp0ZoImeX2t7zwlVErfhPD5NlVnXL2yor6AJG6QFe/GwwI7IXc2w==
- dependencies:
- "@cucumber/ci-environment" "10.0.0"
- "@cucumber/cucumber-expressions" "17.0.1"
- "@cucumber/gherkin" "27.0.0"
- "@cucumber/gherkin-streams" "5.0.1"
- "@cucumber/gherkin-utils" "8.0.5"
- "@cucumber/html-formatter" "21.2.0"
- "@cucumber/message-streams" "4.0.1"
- "@cucumber/messages" "24.0.1"
- "@cucumber/tag-expressions" "6.0.0"
- assertion-error-formatter "^3.0.0"
- capital-case "^1.0.4"
- chalk "^4.1.2"
- cli-table3 "0.6.3"
- commander "^10.0.0"
- debug "^4.3.4"
- error-stack-parser "^2.1.4"
- figures "^3.2.0"
- glob "^10.3.10"
- has-ansi "^4.0.1"
- indent-string "^4.0.0"
- is-installed-globally "^0.4.0"
- is-stream "^2.0.0"
- knuth-shuffle-seeded "^1.0.6"
- lodash.merge "^4.6.2"
- lodash.mergewith "^4.6.2"
- luxon "3.2.1"
- mkdirp "^2.1.5"
- mz "^2.7.0"
- progress "^2.0.3"
- read-pkg-up "^7.0.1"
- resolve-pkg "^2.0.0"
- semver "7.5.3"
- string-argv "0.3.1"
- strip-ansi "6.0.1"
- supports-color "^8.1.1"
- tmp "^0.2.1"
- type-fest "^4.8.3"
- util-arity "^1.1.0"
- xmlbuilder "^15.1.1"
- yaml "^2.2.2"
- yup "1.2.0"
-
-"@cucumber/gherkin-streams@5.0.1":
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/@cucumber/gherkin-streams/-/gherkin-streams-5.0.1.tgz#8c2142d295cd05644456be7282b4bd756c95c4cd"
- integrity sha512-/7VkIE/ASxIP/jd4Crlp4JHXqdNFxPGQokqWqsaCCiqBiu5qHoKMxcWNlp9njVL/n9yN4S08OmY3ZR8uC5x74Q==
- dependencies:
- commander "9.1.0"
- source-map-support "0.5.21"
-
-"@cucumber/gherkin-utils@8.0.5":
- version "8.0.5"
- resolved "https://registry.yarnpkg.com/@cucumber/gherkin-utils/-/gherkin-utils-8.0.5.tgz#28042173cf7009cd9607c9104962133b1c927e24"
- integrity sha512-kxM1OCDjYddF26VKc892PF0GokW4wUIl1PUz3TIXsPZgS39ExM1pF8oww8mlGFD2B0+4op/cSE3SSIME5H3aNw==
- dependencies:
- "@cucumber/gherkin" "^26.0.0"
- "@cucumber/messages" "^22.0.0"
- "@teppeis/multimaps" "3.0.0"
- commander "10.0.1"
- source-map-support "^0.5.21"
-
-"@cucumber/gherkin@27.0.0":
- version "27.0.0"
- resolved "https://registry.yarnpkg.com/@cucumber/gherkin/-/gherkin-27.0.0.tgz#792b7c1b9eb91dd6fba5aca889ac27a6ceaaf794"
- integrity sha512-j5rCsjqzRiC3iVTier3sa0kzyNbkcAmF7xr7jKnyO7qDeK3Z8Ye1P3KSVpeQRMY+KCDJ3WbTDdyxH0FwfA/fIw==
- dependencies:
- "@cucumber/messages" ">=19.1.4 <=22"
-
-"@cucumber/gherkin@^26.0.0":
- version "26.2.0"
- resolved "https://registry.yarnpkg.com/@cucumber/gherkin/-/gherkin-26.2.0.tgz#256129ef5e4d1cba87a673ce78d7296809d1e4c9"
- integrity sha512-iRSiK8YAIHAmLrn/mUfpAx7OXZ7LyNlh1zT89RoziSVCbqSVDxJS6ckEzW8loxs+EEXl0dKPQOXiDmbHV+C/fA==
- dependencies:
- "@cucumber/messages" ">=19.1.4 <=22"
-
-"@cucumber/html-formatter@21.2.0":
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/@cucumber/html-formatter/-/html-formatter-21.2.0.tgz#bb66e34a556959b178ffa4de7508a01cb79eb262"
- integrity sha512-4OcSa12Y0v5e4ySDl67+QFTxCG/Y9fxGSkFqvm98ggpTvS7b75whwzupu+lM2lMBw+h3H6P8ZURQr0xQIAwE2A==
-
-"@cucumber/message-streams@4.0.1":
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/@cucumber/message-streams/-/message-streams-4.0.1.tgz#a5339d3504594bb2edb5732aaae94dddb24d0970"
- integrity sha512-Kxap9uP5jD8tHUZVjTWgzxemi/0uOsbGjd4LBOSxcJoOCRbESFwemUzilJuzNTB8pcTQUh8D5oudUyxfkJOKmA==
-
-"@cucumber/messages@24.0.1":
- version "24.0.1"
- resolved "https://registry.yarnpkg.com/@cucumber/messages/-/messages-24.0.1.tgz#b13646c41d6d64f9af1c1a79acbc0160d796ed9c"
- integrity sha512-dKfNkvgc6stSQIyeHk7p/221iqEZe1BP+e/Js8XKtSmc0sS8khKMvbSBwYVeonn/67/vYKiAyo6Eo0SzXd5Plw==
- dependencies:
- "@types/uuid" "9.0.7"
- class-transformer "0.5.1"
- reflect-metadata "0.2.1"
- uuid "9.0.1"
-
-"@cucumber/messages@>=19.1.4 <=22", "@cucumber/messages@^22.0.0":
- version "22.0.0"
- resolved "https://registry.yarnpkg.com/@cucumber/messages/-/messages-22.0.0.tgz#2d86974ebd73046f66d217334c2245365c7990d4"
- integrity sha512-EuaUtYte9ilkxcKmfqGF9pJsHRUU0jwie5ukuZ/1NPTuHS1LxHPsGEODK17RPRbZHOFhqybNzG2rHAwThxEymg==
- dependencies:
- "@types/uuid" "9.0.1"
- class-transformer "0.5.1"
- reflect-metadata "0.1.13"
- uuid "9.0.0"
-
-"@cucumber/pretty-formatter@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@cucumber/pretty-formatter/-/pretty-formatter-1.0.0.tgz#911014c8fb7472a4c54d00e60e819a7200fd9da3"
- integrity sha512-wcnIMN94HyaHGsfq72dgCvr1d8q6VGH4Y6Gl5weJ2TNZw1qn2UY85Iki4c9VdaLUONYnyYH3+178YB+9RFe/Hw==
- dependencies:
- ansi-styles "^5.0.0"
- cli-table3 "^0.6.0"
- figures "^3.2.0"
- ts-dedent "^2.0.0"
-
-"@cucumber/tag-expressions@6.0.0":
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/@cucumber/tag-expressions/-/tag-expressions-6.0.0.tgz#f17ece58c5a78c2aa65098f9905e63e2abd7895d"
- integrity sha512-JbNb/254Wn6b8cfrIJoqR0NekHXvoB/eMvSY4RK11H8k+YZfm7mZesu/3yVX67nkW+Y+PGjZFcgTMcfjwFRsRw==
-
"@discoveryjs/json-ext@^0.5.0":
version "0.5.5"
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz#9283c9ce5b289a3c4f61c12757469e59377f81f3"
@@ -462,18 +298,6 @@
resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.3.0.tgz#2226000fff1aabda9fd9587474565c9929dbf15d"
integrity sha512-Dcu+NaSvHLT7EjrDrkEmH4qET2ZJZ5IcCWmNXxNQTBwlnE5tBZfN6WxZ842n5cHV52DH/AKNirbPBtcEXDLW4g==
-"@isaacs/cliui@^8.0.2":
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
- integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
- dependencies:
- string-width "^5.1.2"
- string-width-cjs "npm:string-width@^4.2.0"
- strip-ansi "^7.0.1"
- strip-ansi-cjs "npm:strip-ansi@^6.0.1"
- wrap-ansi "^8.1.0"
- wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
-
"@jridgewell/gen-mapping@^0.3.0":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
@@ -523,11 +347,6 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
-"@leichtgewicht/ip-codec@^2.0.1":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz#0300943770e04231041a51bd39f0439b5c7ab4f0"
- integrity sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==
-
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -549,82 +368,88 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
-"@pkgjs/parseargs@^0.11.0":
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
- integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-
-"@rails/actioncable@^7.0", "@rails/actioncable@^7.1.2":
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.1.2.tgz#d261ff4b72844f5af496671346ec478798f4ac2c"
- integrity sha512-KGziTZfbmGm8/fHOpj515xupbYU+49hsp4etfdpoDJ/CEY2bRZR0cyFcJkpK6n0t/sxOHNWY6bo9vSgXZvT7Mg==
+"@rails/actioncable@^7.0", "@rails/actioncable@^7.1.3":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.1.3.tgz#4db480347775aeecd4dde2405659eef74a458881"
+ integrity sha512-ojNvnoZtPN0pYvVFtlO7dyEN9Oml1B6IDM+whGKVak69MMYW99lC2NOWXWeE3bmwEydbP/nn6ERcpfjHVjYQjA==
-"@rails/activestorage@^7.1.2":
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/@rails/activestorage/-/activestorage-7.1.2.tgz#088dce680fa1e0a4f8e0c5ac91073f729204ed06"
- integrity sha512-evC/xGlpq5XGpcNJina3oNVVB8pUp1GpnN3a84SVA+UNuB6O91OdNRl9BGHNAOo6/jxmFtLb73PIjWqQyVE14w==
+"@rails/activestorage@^7.1.3":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@rails/activestorage/-/activestorage-7.1.3.tgz#e83ece6c5fd94b3ddf30a8cf3b8f78cad049e596"
+ integrity sha512-B+RFYAU8vdTPFg0IJcRp2ey0Qw9hpcUOqHHcWqftDJ76ZMBi9+m/UUeMJlNsSd0l9eD+1HLlFSo1X//cY4yiDw==
dependencies:
spark-md5 "^3.0.1"
-"@sentry-internal/feedback@7.93.0":
- version "7.93.0"
- resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.93.0.tgz#c6648ce625792c72d7afdbee8f5db878c7f16fee"
- integrity sha512-4G7rMeQbYGfCHxEoFroABX+UREYc2BSbFqjLmLbIcWowSpgzcwweLLphWHKOciqK6f7DnNDK0jZzx3u7NrkWHw==
- dependencies:
- "@sentry/core" "7.93.0"
- "@sentry/types" "7.93.0"
- "@sentry/utils" "7.93.0"
-
-"@sentry-internal/tracing@7.93.0":
- version "7.93.0"
- resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.93.0.tgz#8cee8b610695d828af75edd2929b64b7caf0385d"
- integrity sha512-DjuhmQNywPp+8fxC9dvhGrqgsUb6wI/HQp25lS2Re7VxL1swCasvpkg8EOYP4iBniVQ86QK0uITkOIRc5tdY1w==
- dependencies:
- "@sentry/core" "7.93.0"
- "@sentry/types" "7.93.0"
- "@sentry/utils" "7.93.0"
-
-"@sentry/browser@^7.93.0":
- version "7.93.0"
- resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.93.0.tgz#acb559125ab0576091a3fc9718e520ba9b2eb1b9"
- integrity sha512-MtLTcQ7y3rfk+aIvnnwCfSJvYhTJnIJi+Mf6y/ap6SKObdlsKMbQoJLlRViglGLq+nKxHLAvU0fONiCEmKfV6A==
- dependencies:
- "@sentry-internal/feedback" "7.93.0"
- "@sentry-internal/tracing" "7.93.0"
- "@sentry/core" "7.93.0"
- "@sentry/replay" "7.93.0"
- "@sentry/types" "7.93.0"
- "@sentry/utils" "7.93.0"
-
-"@sentry/core@7.93.0":
- version "7.93.0"
- resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.93.0.tgz#50a14bf305130dfef51810e4c97fcba4972a57ef"
- integrity sha512-vZQSUiDn73n+yu2fEcH+Wpm4GbRmtxmnXnYCPgM6IjnXqkVm3awWAkzrheADblx3kmxrRiOlTXYHw9NTWs56fg==
- dependencies:
- "@sentry/types" "7.93.0"
- "@sentry/utils" "7.93.0"
-
-"@sentry/replay@7.93.0":
- version "7.93.0"
- resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.93.0.tgz#55e3c424cd5529041fbc987e4c2e74e30a94b1b8"
- integrity sha512-dMlLU8v+OkUeGCrPvTu5NriH7BGj3el4rGHWWAYicfJ2QXqTTq50vfasQBP1JeVNcFqnf1y653TdEIvo4RH4tw==
- dependencies:
- "@sentry-internal/tracing" "7.93.0"
- "@sentry/core" "7.93.0"
- "@sentry/types" "7.93.0"
- "@sentry/utils" "7.93.0"
-
-"@sentry/types@7.93.0":
- version "7.93.0"
- resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.93.0.tgz#d76d26259b40cd0688e1d634462fbff31476c1ec"
- integrity sha512-UnzUccNakhFRA/esWBWP+0v7cjNg+RilFBQC03Mv9OEMaZaS29zSbcOGtRzuFOXXLBdbr44BWADqpz3VW0XaNw==
-
-"@sentry/utils@7.93.0":
- version "7.93.0"
- resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.93.0.tgz#36225038661fe977baf01e4695ef84794d591e45"
- integrity sha512-Iovj7tUnbgSkh/WrAaMrd5UuYjW7AzyzZlFDIUrwidsyIdUficjCG2OIxYzh76H6nYIx9SxewW0R54Q6XoB4uA==
- dependencies:
- "@sentry/types" "7.93.0"
+"@sentry-internal/feedback@7.98.0":
+ version "7.98.0"
+ resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.98.0.tgz#2dabbdc060dca49e79536ae99a9bd55f9c6f806f"
+ integrity sha512-t/mATvwkLcQLKRlx8SO5vlUjaadF6sT3lfR0PdWYyBy8qglbMTHDW4KP6JKh1gdzTVQGnwMByy+/4h9gy4AVzw==
+ dependencies:
+ "@sentry/core" "7.98.0"
+ "@sentry/types" "7.98.0"
+ "@sentry/utils" "7.98.0"
+
+"@sentry-internal/replay-canvas@7.98.0":
+ version "7.98.0"
+ resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.98.0.tgz#108160c49f714a6021368fd60e08b7291fe44450"
+ integrity sha512-vAR6KIycyazaY9HwxG5UONrPTe8jeKtZr6k04svPC8OvcoI0xF+l1jMEYcarffuzKpZlPfssYb5ChHtKuXCB+Q==
+ dependencies:
+ "@sentry/core" "7.98.0"
+ "@sentry/replay" "7.98.0"
+ "@sentry/types" "7.98.0"
+ "@sentry/utils" "7.98.0"
+
+"@sentry-internal/tracing@7.98.0":
+ version "7.98.0"
+ resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.98.0.tgz#812ef7fce6b64794784f3279c66bc6b5cfd29d7f"
+ integrity sha512-FnhD2uMLIAJvv4XsYPv3qsTTtxrImyLxiZacudJyaWFhxoeVQ8bKKbWJ/Ar68FAwqTtjXMeY5evnEBbRMcQlaA==
+ dependencies:
+ "@sentry/core" "7.98.0"
+ "@sentry/types" "7.98.0"
+ "@sentry/utils" "7.98.0"
+
+"@sentry/browser@^7.98.0":
+ version "7.98.0"
+ resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.98.0.tgz#f249e6e38351de4cea1142f498e1169006e5dd76"
+ integrity sha512-/MzTS31N2iM6Qwyh4PSpHihgmkVD5xdfE5qi1mTlwQZz5Yz8t7MdMriX8bEDPlLB8sNxl7+D6/+KUJO8akX0nQ==
+ dependencies:
+ "@sentry-internal/feedback" "7.98.0"
+ "@sentry-internal/replay-canvas" "7.98.0"
+ "@sentry-internal/tracing" "7.98.0"
+ "@sentry/core" "7.98.0"
+ "@sentry/replay" "7.98.0"
+ "@sentry/types" "7.98.0"
+ "@sentry/utils" "7.98.0"
+
+"@sentry/core@7.98.0":
+ version "7.98.0"
+ resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.98.0.tgz#e4f5353bc3986e510b8dd2507355787440d6e25d"
+ integrity sha512-baRUcpCNGyk7cApQHMfqEZJkXdvAKK+z/dVWiMqWc5T5uhzMnPE8/gjP1JZsMtJSQ8g5nHimBdI5TwOyZtxPaA==
+ dependencies:
+ "@sentry/types" "7.98.0"
+ "@sentry/utils" "7.98.0"
+
+"@sentry/replay@7.98.0":
+ version "7.98.0"
+ resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.98.0.tgz#21ba96d501260c1a33bc1af445f5cfbe02d0ba30"
+ integrity sha512-CQabv/3KnpMkpc2TzIquPu5krpjeMRAaDIO0OpTj5SQeH2RqSq3fVWNZkHa8tLsADxcfLFINxqOg2jd1NxvwxA==
+ dependencies:
+ "@sentry-internal/tracing" "7.98.0"
+ "@sentry/core" "7.98.0"
+ "@sentry/types" "7.98.0"
+ "@sentry/utils" "7.98.0"
+
+"@sentry/types@7.98.0":
+ version "7.98.0"
+ resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.98.0.tgz#6a88bf60679aea88ac6cba4d1517958726c2bafb"
+ integrity sha512-pc034ziM0VTETue4bfBcBqTWGy4w0okidtoZJjGVrYAfE95ObZnUGVj/XYIQ3FeCYWIa7NFN2MvdsCS0buwivQ==
+
+"@sentry/utils@7.98.0":
+ version "7.98.0"
+ resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.98.0.tgz#54355a197f7f71a6d17354a3d043022df402b502"
+ integrity sha512-0/LY+kpHxItVRY0xPDXPXVsKRb95cXsGSQf8sVMtfSjz++0bLL1U4k7PFz1c5s2/Vk0B8hS6duRrgMv6dMIZDw==
+ dependencies:
+ "@sentry/types" "7.98.0"
"@sindresorhus/merge-streams@^1.0.0":
version "1.0.0"
@@ -648,41 +473,6 @@
lodash.merge "^4.6.2"
postcss-selector-parser "6.0.10"
-"@teppeis/multimaps@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@teppeis/multimaps/-/multimaps-3.0.0.tgz#bb9c3f8d569f589e548586fa0bbf423010ddfdc5"
- integrity sha512-ID7fosbc50TbT0MK0EG12O+gAP3W3Aa/Pz4DaTtQtEvlc9Odaqi0de+xuZ7Li2GtK4HzEX7IuRWS/JmZLksR3Q==
-
-"@types/body-parser@*":
- version "1.19.2"
- resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0"
- integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==
- dependencies:
- "@types/connect" "*"
- "@types/node" "*"
-
-"@types/bonjour@^3.5.9":
- version "3.5.9"
- resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.9.tgz#3cc4e5135dbb5940fc6051604809234612f89cb4"
- integrity sha512-VkZUiYevvtPyFu5XtpYw9a8moCSzxgjs5PAFF4yXjA7eYHvzBlXe+eJdqBBNWWVzI1r7Ki0KxMYvaQuhm+6f5A==
- dependencies:
- "@types/node" "*"
-
-"@types/connect-history-api-fallback@^1.3.5":
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae"
- integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==
- dependencies:
- "@types/express-serve-static-core" "*"
- "@types/node" "*"
-
-"@types/connect@*":
- version "3.4.35"
- resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
- integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
- dependencies:
- "@types/node" "*"
-
"@types/eslint-scope@^3.7.3":
version "3.7.4"
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
@@ -709,116 +499,16 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40"
integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==
-"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18":
- version "4.17.26"
- resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz#5d9a8eeecb9d5f9d7fc1d85f541512a84638ae88"
- integrity sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==
- dependencies:
- "@types/node" "*"
- "@types/qs" "*"
- "@types/range-parser" "*"
-
-"@types/express@*", "@types/express@^4.17.13":
- version "4.17.13"
- resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034"
- integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==
- dependencies:
- "@types/body-parser" "*"
- "@types/express-serve-static-core" "^4.17.18"
- "@types/qs" "*"
- "@types/serve-static" "*"
-
-"@types/http-proxy@^1.17.8":
- version "1.17.8"
- resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.8.tgz#968c66903e7e42b483608030ee85800f22d03f55"
- integrity sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==
- dependencies:
- "@types/node" "*"
-
-"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
+"@types/json-schema@*", "@types/json-schema@^7.0.8":
version "7.0.9"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
-"@types/mime@^1":
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
- integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
-
"@types/node@*":
version "15.12.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26"
integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==
-"@types/normalize-package-data@^2.4.0":
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz#9b0e3e8533fe5024ad32d6637eb9589988b6fdca"
- integrity sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==
-
-"@types/qs@*":
- version "6.9.7"
- resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
- integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
-
-"@types/range-parser@*":
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
- integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
-
-"@types/retry@^0.12.0":
- version "0.12.1"
- resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065"
- integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==
-
-"@types/serve-index@^1.9.1":
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278"
- integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==
- dependencies:
- "@types/express" "*"
-
-"@types/serve-static@*", "@types/serve-static@^1.13.10":
- version "1.13.10"
- resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9"
- integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==
- dependencies:
- "@types/mime" "^1"
- "@types/node" "*"
-
-"@types/sockjs@^0.3.33":
- version "0.3.33"
- resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f"
- integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==
- dependencies:
- "@types/node" "*"
-
-"@types/uuid@9.0.1":
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.1.tgz#98586dc36aee8dacc98cc396dbca8d0429647aa6"
- integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==
-
-"@types/uuid@9.0.7":
- version "9.0.7"
- resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.7.tgz#b14cebc75455eeeb160d5fe23c2fcc0c64f724d8"
- integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==
-
-"@types/ws@^8.5.5":
- version "8.5.5"
- resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb"
- integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==
- dependencies:
- "@types/node" "*"
-
-"@wdio/logger@^8.24.12":
- version "8.24.12"
- resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-8.24.12.tgz#03cb8bb7ce7ee443e1dcd200a3b44270ae16a1f9"
- integrity sha512-QisOiVIWKTUCf1H7S+DOtC+gruhlpimQrUXfWMTeeh672PvAJYnTpOJDWA+BtXfsikkUYFAzAaq8SeMJk8rqKg==
- dependencies:
- chalk "^5.1.2"
- loglevel "^1.6.0"
- loglevel-plugin-prefix "^0.8.4"
- strip-ansi "^7.1.0"
-
"@webassemblyjs/ast@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
@@ -965,22 +655,6 @@
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
-accepts@~1.3.4, accepts@~1.3.5:
- version "1.3.7"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
- integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
- dependencies:
- mime-types "~2.1.24"
- negotiator "0.6.2"
-
-accepts@~1.3.8:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
- integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
- dependencies:
- mime-types "~2.1.34"
- negotiator "0.6.3"
-
acorn-import-assertions@^1.7.6:
version "1.8.0"
resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9"
@@ -996,32 +670,11 @@ acorn@^8.7.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
-agent-base@^7.0.2, agent-base@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434"
- integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==
- dependencies:
- debug "^4.3.4"
-
-ajv-formats@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
- integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
- dependencies:
- ajv "^8.0.0"
-
ajv-keywords@^3.5.2:
version "3.5.2"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
-ajv-keywords@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
- integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
- dependencies:
- fast-deep-equal "^3.1.3"
-
ajv@^6.12.5:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
@@ -1032,60 +685,18 @@ ajv@^6.12.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ajv@^8.0.0, ajv@^8.8.0:
- version "8.8.2"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb"
- integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==
- dependencies:
- fast-deep-equal "^3.1.1"
- json-schema-traverse "^1.0.0"
- require-from-string "^2.0.2"
- uri-js "^4.2.2"
-
-ansi-html-community@^0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41"
- integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==
-
-ansi-regex@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
- integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
-
ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-ansi-regex@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
- integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ansi-styles@^4.0.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
dependencies:
color-convert "^2.0.1"
-ansi-styles@^5.0.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
- integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-
-ansi-styles@^6.1.0:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
- integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
-
any-promise@^1.0.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
@@ -1104,125 +715,28 @@ arg@^5.0.2:
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
-array-flatten@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
- integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
-
-array-flatten@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
- integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
-
-assertion-error-formatter@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz#be9c8825dee6a8a6c72183d915912d9b57d5d265"
- integrity sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==
- dependencies:
- diff "^4.0.1"
- pad-right "^0.2.2"
- repeat-string "^1.6.1"
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-
-autoprefixer@^10.4.16:
- version "10.4.16"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8"
- integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==
- dependencies:
- browserslist "^4.21.10"
- caniuse-lite "^1.0.30001538"
- fraction.js "^4.3.6"
+autoprefixer@^10.4.16, autoprefixer@^10.4.17:
+ version "10.4.17"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.17.tgz#35cd5695cbbe82f536a50fa025d561b01fdec8be"
+ integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==
+ dependencies:
+ browserslist "^4.22.2"
+ caniuse-lite "^1.0.30001578"
+ fraction.js "^4.3.7"
normalize-range "^0.1.2"
picocolors "^1.0.0"
postcss-value-parser "^4.2.0"
-axios-case-converter@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/axios-case-converter/-/axios-case-converter-1.1.0.tgz#7306943cf5608769794c6072b89eacb1e289f178"
- integrity sha512-XmeffqomjVRhYRXQdw7FaeJhFUvsqt0oXMzfPDaZE1ibBkZ8zeAdgMYBGYlMegXUjpzg48pKZ+SLkz6RH2yYkA==
- dependencies:
- camel-case "^4.1.1"
- header-case "^2.0.3"
- snake-case "^3.0.3"
- tslib "^2.3.0"
-
-axios@^1.6.5:
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8"
- integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==
- dependencies:
- follow-redirects "^1.15.4"
- form-data "^4.0.0"
- proxy-from-env "^1.1.0"
-
-b4a@^1.6.4:
- version "1.6.4"
- resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9"
- integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==
-
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-batch@0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
- integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
-
-big-integer@^1.6.17:
- version "1.6.51"
- resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
- integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
-
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-binary@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79"
- integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==
- dependencies:
- buffers "~0.1.1"
- chainsaw "~0.1.0"
-
-bluebird@~3.4.1:
- version "3.4.7"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3"
- integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==
-
-body-parser@1.19.2:
- version "1.19.2"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e"
- integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==
- dependencies:
- bytes "3.1.2"
- content-type "~1.0.4"
- debug "2.6.9"
- depd "~1.1.2"
- http-errors "1.8.1"
- iconv-lite "0.4.24"
- on-finished "~2.3.0"
- qs "6.9.7"
- raw-body "2.4.3"
- type-is "~1.6.18"
-
-bonjour-service@^1.0.11:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.11.tgz#5418e5c1ac91c89a406f853a942e7892829c0d89"
- integrity sha512-drMprzr2rDTCtgEE3VgdA9uUFaUHF+jXduwYSThHJnKMYM+FhI9Z3ph+TX3xy0LtgYHae6CHYPJ/2UnK8nQHcA==
- dependencies:
- array-flatten "^2.1.2"
- dns-equal "^1.0.0"
- fast-deep-equal "^3.1.3"
- multicast-dns "^7.2.4"
-
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -1231,13 +745,6 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
-brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
- dependencies:
- balanced-match "^1.0.0"
-
braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
@@ -1245,14 +752,14 @@ braces@^3.0.2, braces@~3.0.2:
dependencies:
fill-range "^7.0.1"
-browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.22.1:
- version "4.22.1"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619"
- integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==
+browserslist@^4.14.5, browserslist@^4.22.1, browserslist@^4.22.2:
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b"
+ integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==
dependencies:
- caniuse-lite "^1.0.30001541"
- electron-to-chromium "^1.4.535"
- node-releases "^2.0.13"
+ caniuse-lite "^1.0.30001565"
+ electron-to-chromium "^1.4.601"
+ node-releases "^2.0.14"
update-browserslist-db "^1.0.13"
buffer-from@^1.0.0:
@@ -1260,91 +767,15 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-buffer-indexof-polyfill@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c"
- integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==
-
-buffers@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb"
- integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==
-
-bytes@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
- integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
-
-bytes@3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
- integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
-
-camel-case@^4.1.1:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
- integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
- dependencies:
- pascal-case "^3.1.2"
- tslib "^2.0.3"
-
camelcase-css@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
-caniuse-lite@^1.0.30001538:
- version "1.0.30001538"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz#9dbc6b9af1ff06b5eb12350c2012b3af56744f3f"
- integrity sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==
-
-caniuse-lite@^1.0.30001541:
- version "1.0.30001546"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz#10fdad03436cfe3cc632d3af7a99a0fb497407f0"
- integrity sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==
-
-capital-case@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669"
- integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==
- dependencies:
- no-case "^3.0.4"
- tslib "^2.0.3"
- upper-case-first "^2.0.2"
-
-chainsaw@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98"
- integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==
- dependencies:
- traverse ">=0.3.0 <0.4"
-
-chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chalk@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
- integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
-chalk@^5.1.2:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3"
- integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==
-
-change-case@^5.4.1:
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/change-case/-/change-case-5.4.1.tgz#edec6c906a8a1db8c5bdefcd4e4f49e7b21eaf9c"
- integrity sha512-Agf3w7rZRy4aLy0gQ0M/fhufTIxN17rFfUuQ8OxETDJhB8QdoxgDpd9FbbFOMocR7+3wiSv8KKrFVL6HfM1Ylw==
+caniuse-lite@^1.0.30001565, caniuse-lite@^1.0.30001578:
+ version "1.0.30001579"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz#45c065216110f46d6274311a4b3fcf6278e0852a"
+ integrity sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==
chokidar@^3.3.0, chokidar@^3.5.3:
version "3.5.3"
@@ -1366,20 +797,6 @@ chrome-trace-event@^1.0.2:
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
-class-transformer@0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.5.1.tgz#24147d5dffd2a6cea930a3250a677addf96ab336"
- integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==
-
-cli-table3@0.6.3, cli-table3@^0.6.0:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2"
- integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==
- dependencies:
- string-width "^4.2.0"
- optionalDependencies:
- "@colors/colors" "1.5.0"
-
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
@@ -1398,20 +815,6 @@ clone-deep@^4.0.1:
kind-of "^6.0.2"
shallow-clone "^3.0.0"
-clone-regexp@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-3.0.0.tgz#c6dd5c6b85482306778f3dc4ac2bb967079069c2"
- integrity sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==
- dependencies:
- is-regexp "^3.0.0"
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
color-convert@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
@@ -1419,38 +822,21 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-colorette@^2.0.10, colorette@^2.0.14:
+colorette@^2.0.14:
version "2.0.16"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
-combined-stream@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
- integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
- dependencies:
- delayed-stream "~1.0.0"
-
-commander@10.0.1, commander@^10.0.0, commander@^10.0.1:
+commander@^10.0.1:
version "10.0.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
-commander@9.1.0:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-9.1.0.tgz#a6b263b2327f2e188c6402c42623327909f2dbec"
- integrity sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==
-
commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@@ -1461,69 +847,12 @@ commander@^4.0.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
-compressible@~2.0.16:
- version "2.0.18"
- resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
- integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
- dependencies:
- mime-db ">= 1.43.0 < 2"
-
-compression@^1.7.4:
- version "1.7.4"
- resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
- integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
- dependencies:
- accepts "~1.3.5"
- bytes "3.0.0"
- compressible "~2.0.16"
- debug "2.6.9"
- on-headers "~1.0.2"
- safe-buffer "5.1.2"
- vary "~1.1.2"
-
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
-connect-history-api-fallback@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8"
- integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==
-
-content-disposition@0.5.4:
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
- integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
- dependencies:
- safe-buffer "5.2.1"
-
-content-type@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
- integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
-
-convert-hrtime@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/convert-hrtime/-/convert-hrtime-5.0.0.tgz#f2131236d4598b95de856926a67100a0a97e9fa3"
- integrity sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==
-
-cookie-signature@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
- integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
-
-cookie@0.4.2:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
- integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
-
-core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-cross-spawn@^7.0.0, cross-spawn@^7.0.3:
+cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -1563,151 +892,31 @@ cssesc@^3.0.0:
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
-data-uri-to-buffer@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e"
- integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==
-
-debug@2.6.9:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-debug@4, debug@^4.1.0, debug@^4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
- integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
- dependencies:
- ms "2.1.2"
-
-decamelize@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-6.0.0.tgz#8cad4d916fde5c41a264a43d0ecc56fe3d31749e"
- integrity sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==
-
-default-gateway@^6.0.3:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71"
- integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==
- dependencies:
- execa "^5.0.0"
-
-define-lazy-prop@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
- integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-
-depd@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
- integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
-
dependency-graph@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27"
integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==
-destroy@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
- integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
-
-detect-node@^2.0.4:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
- integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
-
didyoumean@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
-diff@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
- integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
-
dlv@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
-dns-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
- integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
-
-dns-packet@^5.2.2:
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b"
- integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==
- dependencies:
- "@leichtgewicht/ip-codec" "^2.0.1"
-
-dot-case@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
- integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
- dependencies:
- no-case "^3.0.4"
- tslib "^2.0.3"
-
-dotenv@^16.3.1:
- version "16.3.1"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e"
- integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==
-
-duplexer2@~0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
- integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==
- dependencies:
- readable-stream "^2.0.2"
-
-eastasianwidth@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
- integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
-
-ee-first@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
- integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-
-electron-to-chromium@^1.4.535:
- version "1.4.546"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.546.tgz#673ff64862859b1593cebfbacc5fb6aebef7c457"
- integrity sha512-cz9bBM26ZqoEmGHkdHXU3LP7OofVyEzRoMqfALQ9Au9WlB4rogAHzqj/NkNvw2JJjy4xuxS1me+pP2lbCD5Mfw==
+electron-to-chromium@^1.4.601:
+ version "1.4.639"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.639.tgz#c6f9cc685f9efb2980d2cfc95a27f8142c9adf28"
+ integrity sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg==
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-emoji-regex@^9.2.2:
- version "9.2.2"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
- integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
-
-encodeurl@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
- integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-
-end-of-stream@^1.1.0:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
- dependencies:
- once "^1.4.0"
-
enhanced-resolve@^5.10.0:
version "5.12.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634"
@@ -1721,25 +930,6 @@ envinfo@^7.7.3:
resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
-err-code@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
- integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
-
-error-ex@^1.3.1:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
- integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
- dependencies:
- is-arrayish "^0.2.1"
-
-error-stack-parser@^2.1.4:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286"
- integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==
- dependencies:
- stackframe "^1.3.4"
-
es-module-lexer@^0.9.0:
version "0.9.3"
resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19"
@@ -1750,16 +940,6 @@ escalade@^3.1.1:
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
-escape-html@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
- integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
-
-escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
eslint-scope@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
@@ -1785,87 +965,21 @@ estraverse@^5.2.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
-etag@~1.8.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
- integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
-
event-target-shim@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-6.0.2.tgz#ea5348c3618ee8b62ff1d344f01908ee2b8a2b71"
integrity sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==
-eventemitter3@^4.0.0:
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
- integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
-
events@^3.2.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
-execa@^5.0.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
- integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
- dependencies:
- cross-spawn "^7.0.3"
- get-stream "^6.0.0"
- human-signals "^2.1.0"
- is-stream "^2.0.0"
- merge-stream "^2.0.0"
- npm-run-path "^4.0.1"
- onetime "^5.1.2"
- signal-exit "^3.0.3"
- strip-final-newline "^2.0.0"
-
-express@^4.17.3:
- version "4.17.3"
- resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1"
- integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==
- dependencies:
- accepts "~1.3.8"
- array-flatten "1.1.1"
- body-parser "1.19.2"
- content-disposition "0.5.4"
- content-type "~1.0.4"
- cookie "0.4.2"
- cookie-signature "1.0.6"
- debug "2.6.9"
- depd "~1.1.2"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- finalhandler "~1.1.2"
- fresh "0.5.2"
- merge-descriptors "1.0.1"
- methods "~1.1.2"
- on-finished "~2.3.0"
- parseurl "~1.3.3"
- path-to-regexp "0.1.7"
- proxy-addr "~2.0.7"
- qs "6.9.7"
- range-parser "~1.2.1"
- safe-buffer "5.2.1"
- send "0.17.2"
- serve-static "1.14.2"
- setprototypeof "1.2.0"
- statuses "~1.5.0"
- type-is "~1.6.18"
- utils-merge "1.0.1"
- vary "~1.1.2"
-
-fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+fast-deep-equal@^3.1.1:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-fifo@^1.1.0, fast-fifo@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.0.tgz#03e381bcbfb29932d7c3afde6e15e83e05ab4d8b"
- integrity sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw==
-
fast-glob@^3.3.0, fast-glob@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
@@ -1894,28 +1008,6 @@ fastq@^1.6.0:
dependencies:
reusify "^1.0.4"
-faye-websocket@^0.11.3:
- version "0.11.4"
- resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
- integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
- dependencies:
- websocket-driver ">=0.5.1"
-
-fetch-blob@^3.1.2, fetch-blob@^3.1.4:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9"
- integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==
- dependencies:
- node-domexception "^1.0.0"
- web-streams-polyfill "^3.0.3"
-
-figures@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
- integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
- dependencies:
- escape-string-regexp "^1.0.5"
-
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
@@ -1923,20 +1015,7 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
-finalhandler@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
- integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
- dependencies:
- debug "2.6.9"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- on-finished "~2.3.0"
- parseurl "~1.3.3"
- statuses "~1.5.0"
- unpipe "~1.0.0"
-
-find-up@^4.0.0, find-up@^4.1.0:
+find-up@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
@@ -1944,51 +1023,12 @@ find-up@^4.0.0, find-up@^4.1.0:
locate-path "^5.0.0"
path-exists "^4.0.0"
-follow-redirects@^1.0.0, follow-redirects@^1.15.4:
- version "1.15.4"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf"
- integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==
-
-foreground-child@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
- integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
- dependencies:
- cross-spawn "^7.0.0"
- signal-exit "^4.0.1"
-
-form-data@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
- integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.8"
- mime-types "^2.1.12"
-
-formdata-polyfill@^4.0.10:
- version "4.0.10"
- resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423"
- integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==
- dependencies:
- fetch-blob "^3.1.2"
-
-forwarded@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
- integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
-
-fraction.js@^4.3.6:
- version "4.3.6"
- resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.6.tgz#e9e3acec6c9a28cf7bc36cbe35eea4ceb2c5c92d"
- integrity sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==
+fraction.js@^4.3.7:
+ version "4.3.7"
+ resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
+ integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
-fresh@0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
- integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
-
-fs-extra@^11.0.0, fs-extra@^11.2.0:
+fs-extra@^11.0.0:
version "11.2.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
@@ -1997,11 +1037,6 @@ fs-extra@^11.0.0, fs-extra@^11.2.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
-fs-monkey@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
- integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==
-
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -2012,40 +1047,11 @@ fsevents@~2.3.2:
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-fstream@^1.0.12:
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
- integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
- dependencies:
- graceful-fs "^4.1.2"
- inherits "~2.0.0"
- mkdirp ">=0.5 0"
- rimraf "2"
-
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-function-timeout@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/function-timeout/-/function-timeout-0.1.1.tgz#6bf71d3d24c894d43b2bec312cabb8c5add2e9da"
- integrity sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==
-
-geckodriver@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/geckodriver/-/geckodriver-4.3.0.tgz#8586e80ddd23e5d5cd47382d9f6897051ca12ea3"
- integrity sha512-QfpvxFsMORwKpvnLslkHCr3NTCczHAvkte6+pQGsiUZXKBe6mO4TTb727b+9KMVSK6XZqhR6ZwImKdP+F5vS6A==
- dependencies:
- "@wdio/logger" "^8.24.12"
- decamelize "^6.0.0"
- http-proxy-agent "^7.0.0"
- https-proxy-agent "^7.0.2"
- node-fetch "^3.3.2"
- tar-fs "^3.0.4"
- unzipper "^0.10.14"
- which "^4.0.0"
-
get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
@@ -2056,20 +1062,6 @@ get-stdin@^9.0.0:
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575"
integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==
-get-stream@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
- integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-
-get-urls@^12.1.0:
- version "12.1.0"
- resolved "https://registry.yarnpkg.com/get-urls/-/get-urls-12.1.0.tgz#dde64806ed42f18a3c1a9b8e7e6673f6eb89801a"
- integrity sha512-qHO+QmPiI1bEw0Y/m+WMAAx/UoEEXLZwEx0DVaKMtlHNrKbMeV960LryIpd+E2Ykb9XkVHmVtpbCsmul3GhR0g==
- dependencies:
- normalize-url "^8.0.0"
- super-regex "^0.2.0"
- url-regex-safe "^4.0.0"
-
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -2101,36 +1093,6 @@ glob@7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^10.3.10:
- version "10.3.10"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
- integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^2.3.5"
- minimatch "^9.0.1"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
- path-scurry "^1.10.1"
-
-glob@^7.1.3:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
- integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-global-dirs@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686"
- integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==
- dependencies:
- ini "2.0.0"
-
globby@^14.0.0:
version "14.0.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.0.tgz#ea9c062a3614e33f516804e778590fcf055256b9"
@@ -2143,28 +1105,11 @@ globby@^14.0.0:
slash "^5.1.0"
unicorn-magic "^0.1.0"
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-handle-thing@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
- integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
-
-has-ansi@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-4.0.1.tgz#f216a8c8d7b129e490dc15f4a62cc1cdb9603ce8"
- integrity sha512-Qr4RtTm30xvEdqUXbSBVWDu+PrTokJOwe/FU+VdfJPk+MXAPoeOzKpRyrDTnZIJwAkQ4oBLTU53nu0HrkF/Z2A==
- dependencies:
- ansi-regex "^4.1.0"
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
-
has-flag@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
@@ -2177,123 +1122,11 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
-header-case@^2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063"
- integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==
- dependencies:
- capital-case "^1.0.4"
- tslib "^2.0.3"
-
-hosted-git-info@^2.1.4:
- version "2.8.9"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
- integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
-
-hpack.js@^2.1.6:
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
- integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=
- dependencies:
- inherits "^2.0.1"
- obuf "^1.0.0"
- readable-stream "^2.0.1"
- wbuf "^1.1.0"
-
-html-entities@^2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488"
- integrity sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==
-
-http-deceiver@^1.2.7:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
- integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
-
-http-errors@1.8.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c"
- integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==
- dependencies:
- depd "~1.1.2"
- inherits "2.0.4"
- setprototypeof "1.2.0"
- statuses ">= 1.5.0 < 2"
- toidentifier "1.0.1"
-
-http-errors@~1.6.2:
- version "1.6.3"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
- integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
- dependencies:
- depd "~1.1.2"
- inherits "2.0.3"
- setprototypeof "1.1.0"
- statuses ">= 1.4.0 < 2"
-
-http-parser-js@>=0.5.1:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9"
- integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==
-
-http-proxy-agent@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673"
- integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==
- dependencies:
- agent-base "^7.1.0"
- debug "^4.3.4"
-
-http-proxy-middleware@^2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz#03af0f4676d172ae775cb5c33f592f40e1a4e07a"
- integrity sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg==
- dependencies:
- "@types/http-proxy" "^1.17.8"
- http-proxy "^1.18.1"
- is-glob "^4.0.1"
- is-plain-obj "^3.0.0"
- micromatch "^4.0.2"
-
-http-proxy@^1.18.1:
- version "1.18.1"
- resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
- integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
- dependencies:
- eventemitter3 "^4.0.0"
- follow-redirects "^1.0.0"
- requires-port "^1.0.0"
-
-https-proxy-agent@^7.0.2:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b"
- integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==
- dependencies:
- agent-base "^7.0.2"
- debug "4"
-
-human-signals@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
- integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-
-iconv-lite@0.4.24:
- version "0.4.24"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
- integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
-
ignore@^5.2.4:
version "5.3.0"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78"
integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==
-immediate@~3.0.5:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
- integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
-
import-local@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0"
@@ -2302,11 +1135,6 @@ import-local@^3.0.2:
pkg-dir "^4.2.0"
resolve-cwd "^3.0.0"
-indent-string@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
- integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
-
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -2315,46 +1143,16 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3:
+inherits@2:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-inherits@2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-
-ini@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
- integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
-
interpret@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4"
integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==
-ip-regex@4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5"
- integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==
-
-ipaddr.js@1.9.1:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
- integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
-
-ipaddr.js@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0"
- integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
- integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
-
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
@@ -2369,11 +1167,6 @@ is-core-module@^2.13.0:
dependencies:
has "^1.0.3"
-is-docker@^2.0.0, is-docker@^2.1.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
- integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -2391,29 +1184,11 @@ is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
-is-installed-globally@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
- integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==
- dependencies:
- global-dirs "^3.0.0"
- is-path-inside "^3.0.2"
-
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-is-path-inside@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
- integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
-
-is-plain-obj@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
- integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
-
is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
@@ -2421,52 +1196,16 @@ is-plain-object@^2.0.4:
dependencies:
isobject "^3.0.1"
-is-regexp@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-3.1.0.tgz#0235eab9cda5b83f96ac4a263d8c32c9d5ad7422"
- integrity sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==
-
-is-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
- integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
-
-is-wsl@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
- integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
- dependencies:
- is-docker "^2.0.0"
-
-isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-isexe@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d"
- integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==
-
isobject@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
-jackspeak@^2.3.5:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
- integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
- dependencies:
- "@isaacs/cliui" "^8.0.2"
- optionalDependencies:
- "@pkgjs/parseargs" "^0.11.0"
-
jest-worker@^27.0.6:
version "27.4.4"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.4.tgz#9390a97c013a54d07f5c2ad2b5f6109f30c4966d"
@@ -2481,12 +1220,7 @@ jiti@^1.19.1:
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.20.0.tgz#2d823b5852ee8963585c8dd8b7992ffc1ae83b42"
integrity sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==
-js-tokens@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
- integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
+json-parse-even-better-errors@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
@@ -2496,11 +1230,6 @@ json-schema-traverse@^0.4.1:
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-json-schema-traverse@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
- integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
-
jsonfile@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
@@ -2510,43 +1239,11 @@ jsonfile@^6.0.1:
optionalDependencies:
graceful-fs "^4.1.6"
-jszip@^3.10.1:
- version "3.10.1"
- resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2"
- integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==
- dependencies:
- lie "~3.3.0"
- pako "~1.0.2"
- readable-stream "~2.3.6"
- setimmediate "^1.0.5"
-
kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-knuth-shuffle-seeded@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz#01f1b65733aa7540ee08d8b0174164d22081e4e1"
- integrity sha1-AfG2VzOqdUDuCNiwF0Fk0iCB5OE=
- dependencies:
- seed-random "~2.2.0"
-
-launch-editor@^2.6.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7"
- integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==
- dependencies:
- picocolors "^1.0.0"
- shell-quote "^1.7.3"
-
-lie@~3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
- integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==
- dependencies:
- immediate "~3.0.5"
-
lilconfig@^2.0.5, lilconfig@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
@@ -2562,11 +1259,6 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-listenercount@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937"
- integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==
-
loader-runner@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384"
@@ -2614,72 +1306,11 @@ lodash.merge@^4.6.2:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
-lodash.mergewith@^4.6.2:
- version "4.6.2"
- resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55"
- integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==
-
lodash.sortby@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
-lodash@^4.17.21:
- version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
- integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-loglevel-plugin-prefix@^0.8.4:
- version "0.8.4"
- resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644"
- integrity sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==
-
-loglevel@^1.6.0:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4"
- integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==
-
-lower-case@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
- integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
- dependencies:
- tslib "^2.0.3"
-
-lru-cache@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
- integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
- dependencies:
- yallist "^4.0.0"
-
-"lru-cache@^9.1.1 || ^10.0.0":
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a"
- integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==
-
-luxon@3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.2.1.tgz#14f1af209188ad61212578ea7e3d518d18cee45f"
- integrity sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==
-
-media-typer@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
- integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
-
-memfs@^3.4.1:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.1.tgz#b78092f466a0dce054d63d39275b24c71d3f1305"
- integrity sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==
- dependencies:
- fs-monkey "1.0.3"
-
-merge-descriptors@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
- integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
-
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
@@ -2690,12 +1321,7 @@ merge2@^1.3.0:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
-methods@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
- integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
-
-micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
+micromatch@^4.0.4, micromatch@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
@@ -2703,28 +1329,11 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
braces "^3.0.2"
picomatch "^2.3.1"
-mime-db@1.50.0, "mime-db@>= 1.43.0 < 2":
- version "1.50.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f"
- integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==
-
mime-db@1.51.0:
version "1.51.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
-mime-db@1.52.0:
- version "1.52.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
- integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-
-mime-types@^2.1.12, mime-types@~2.1.34:
- version "2.1.35"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
- integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
- dependencies:
- mime-db "1.52.0"
-
mime-types@^2.1.27:
version "2.1.34"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
@@ -2732,33 +1341,11 @@ mime-types@^2.1.27:
dependencies:
mime-db "1.51.0"
-mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24:
- version "2.1.33"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb"
- integrity sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==
- dependencies:
- mime-db "1.50.0"
-
-mime@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
- integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-
-mimic-fn@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
- integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
mini-svg-data-uri@^1.2.3:
version "1.4.4"
resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz#8ab0aabcdf8c29ad5693ca595af19dd2ead09939"
integrity sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==
-minimalistic-assert@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
- integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-
minimatch@^3.0.4:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@@ -2766,63 +1353,6 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
-minimatch@^9.0.1:
- version "9.0.3"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
- integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
- dependencies:
- brace-expansion "^2.0.1"
-
-minimist@^1.2.6:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
- integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
- integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
-
-mkdirp-classic@^0.5.2:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
- integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
-
-"mkdirp@>=0.5 0":
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
- integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
- dependencies:
- minimist "^1.2.6"
-
-mkdirp@^2.1.5:
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19"
- integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-ms@2.1.3:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
- integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
-multicast-dns@^7.2.4:
- version "7.2.4"
- resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.4.tgz#cf0b115c31e922aeb20b64e6556cbeb34cf0dd19"
- integrity sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw==
- dependencies:
- dns-packet "^5.2.2"
- thunky "^1.0.2"
-
mz@^2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
@@ -2837,62 +1367,15 @@ nanoid@^3.3.7:
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
-negotiator@0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
- integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
-
-negotiator@0.6.3:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
- integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
-
neo-async@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
-no-case@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
- integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
- dependencies:
- lower-case "^2.0.2"
- tslib "^2.0.3"
-
-node-domexception@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
- integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
-
-node-fetch@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b"
- integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==
- dependencies:
- data-uri-to-buffer "^4.0.0"
- fetch-blob "^3.1.4"
- formdata-polyfill "^4.0.10"
-
-node-forge@^1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
- integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
-
-node-releases@^2.0.13:
- version "2.0.13"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
- integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==
-
-normalize-package-data@^2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
- integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
- dependencies:
- hosted-git-info "^2.1.4"
- resolve "^1.10.0"
- semver "2 || 3 || 4 || 5"
- validate-npm-package-license "^3.0.1"
+node-releases@^2.0.14:
+ version "2.0.14"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
+ integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
@@ -2904,18 +1387,6 @@ normalize-range@^0.1.2:
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
-normalize-url@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a"
- integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==
-
-npm-run-path@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
- integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
- dependencies:
- path-key "^3.0.0"
-
object-assign@^4.0.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -2926,46 +1397,13 @@ object-hash@^3.0.0:
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
-obuf@^1.0.0, obuf@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
- integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
-
-on-finished@~2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
- integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
- dependencies:
- ee-first "1.1.1"
-
-on-headers@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
- integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
-
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
+once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
-onetime@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
- integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
- dependencies:
- mimic-fn "^2.1.0"
-
-open@^8.0.9:
- version "8.4.0"
- resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8"
- integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==
- dependencies:
- define-lazy-prop "^2.0.0"
- is-docker "^2.1.1"
- is-wsl "^2.2.0"
-
p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
@@ -2980,54 +1418,11 @@ p-locate@^4.1.0:
dependencies:
p-limit "^2.2.0"
-p-retry@^4.5.0:
- version "4.6.1"
- resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.1.tgz#8fcddd5cdf7a67a0911a9cf2ef0e5df7f602316c"
- integrity sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==
- dependencies:
- "@types/retry" "^0.12.0"
- retry "^0.13.1"
-
p-try@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-pad-right@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/pad-right/-/pad-right-0.2.2.tgz#6fbc924045d244f2a2a244503060d3bfc6009774"
- integrity sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q=
- dependencies:
- repeat-string "^1.5.2"
-
-pako@~1.0.2:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
- integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
-
-parse-json@^5.0.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
- integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
- dependencies:
- "@babel/code-frame" "^7.0.0"
- error-ex "^1.3.1"
- json-parse-even-better-errors "^2.3.0"
- lines-and-columns "^1.1.6"
-
-parseurl@~1.3.2, parseurl@~1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
- integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
-
-pascal-case@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
- integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
- dependencies:
- no-case "^3.0.4"
- tslib "^2.0.3"
-
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
@@ -3038,7 +1433,7 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-path-key@^3.0.0, path-key@^3.1.0:
+path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
@@ -3048,19 +1443,6 @@ path-parse@^1.0.7:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-path-scurry@^1.10.1:
- version "1.10.1"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
- integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
- dependencies:
- lru-cache "^9.1.1 || ^10.0.0"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-
-path-to-regexp@0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
- integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
-
path-type@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-5.0.0.tgz#14b01ed7aea7ddf9c7c3f46181d4d04f9c785bb8"
@@ -3457,80 +1839,26 @@ postcss@^8.4.23, postcss@^8.4.33:
picocolors "^1.0.0"
source-map-js "^1.0.2"
-prettier@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.1.tgz#babf33580e16c796a9740b9fae551624f7bfeaab"
- integrity sha512-qSUWshj1IobVbKc226Gw2pync27t0Kf0EdufZa9j7uBSJay1CC+B3K5lAAZoqgX3ASiKuWsk6OmzKRetXNObWg==
+prettier@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.4.tgz#4723cadeac2ce7c9227de758e5ff9b14e075f283"
+ integrity sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==
pretty-hrtime@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=
-process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-progress@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
- integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
-
-promise-retry@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
- integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
- dependencies:
- err-code "^2.0.2"
- retry "^0.12.0"
-
-property-expr@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.5.tgz#278bdb15308ae16af3e3b9640024524f4dc02cb4"
- integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==
-
-proxy-addr@~2.0.7:
- version "2.0.7"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
- integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
- dependencies:
- forwarded "0.2.0"
- ipaddr.js "1.9.1"
-
-proxy-from-env@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
- integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
-
-pump@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
punycode@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-qs@6.9.7:
- version "6.9.7"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe"
- integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==
-
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
-queue-tick@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142"
- integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==
-
randombytes@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -3538,21 +1866,6 @@ randombytes@^2.1.0:
dependencies:
safe-buffer "^5.1.0"
-range-parser@^1.2.1, range-parser@~1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
- integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
-
-raw-body@2.4.3:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c"
- integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==
- dependencies:
- bytes "3.1.2"
- http-errors "1.8.1"
- iconv-lite "0.4.24"
- unpipe "1.0.0"
-
read-cache@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
@@ -3560,60 +1873,6 @@ read-cache@^1.0.0:
dependencies:
pify "^2.3.0"
-read-pkg-up@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
- integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
- dependencies:
- find-up "^4.1.0"
- read-pkg "^5.2.0"
- type-fest "^0.8.1"
-
-read-pkg@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
- integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
- dependencies:
- "@types/normalize-package-data" "^2.4.0"
- normalize-package-data "^2.5.0"
- parse-json "^5.0.0"
- type-fest "^0.6.0"
-
-readable-stream@^2.0.1, readable-stream@~2.3.6:
- version "2.3.7"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
- integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readable-stream@^2.0.2:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
- integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readable-stream@^3.0.6:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
- integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
@@ -3628,48 +1887,11 @@ rechoir@^0.8.0:
dependencies:
resolve "^1.20.0"
-reflect-metadata@0.1.13:
- version "0.1.13"
- resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
- integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
-
-reflect-metadata@0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.1.tgz#8d5513c0f5ef2b4b9c3865287f3c0940c1f67f74"
- integrity sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==
-
-regexp-match-indices@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz#cf20054a6f7d5b3e116a701a7b00f82889d10da6"
- integrity sha512-DwZuAkt8NF5mKwGGER1EGh2PRqyvhRhhLviH+R8y8dIuaQROlUfXjt4s9ZTXstIsSkptf06BSvwcEmmfheJJWQ==
- dependencies:
- regexp-tree "^0.1.11"
-
-regexp-tree@^0.1.11:
- version "0.1.24"
- resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d"
- integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==
-
-repeat-string@^1.5.2, repeat-string@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
- integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
-require-from-string@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
- integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
-
-requires-port@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
- integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
-
resolve-cwd@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
@@ -3682,14 +1904,7 @@ resolve-from@^5.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
-resolve-pkg@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve-pkg/-/resolve-pkg-2.0.0.tgz#ac06991418a7623edc119084edc98b0e6bf05a41"
- integrity sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==
- dependencies:
- resolve-from "^5.0.0"
-
-resolve@^1.1.7, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.2:
+resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.2:
version "1.22.8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -3698,35 +1913,11 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.2:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
-retry@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
- integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
-
-retry@^0.13.1:
- version "0.13.1"
- resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
- integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==
-
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
-rimraf@2:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
- integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
- dependencies:
- glob "^7.1.3"
-
-rimraf@^3.0.0, rimraf@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
- integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
- dependencies:
- glob "^7.1.3"
-
run-parallel@^1.1.9:
version "1.2.0"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
@@ -3734,21 +1925,11 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
-safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
+safe-buffer@^5.1.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-"safer-buffer@>= 2.1.2 < 3":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
schema-utils@^3.1.0, schema-utils@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281"
@@ -3758,73 +1939,6 @@ schema-utils@^3.1.0, schema-utils@^3.1.1:
ajv "^6.12.5"
ajv-keywords "^3.5.2"
-schema-utils@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7"
- integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==
- dependencies:
- "@types/json-schema" "^7.0.9"
- ajv "^8.8.0"
- ajv-formats "^2.1.1"
- ajv-keywords "^5.0.0"
-
-seed-random@~2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54"
- integrity sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=
-
-select-hose@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
- integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
-
-selenium-webdriver@^4.16.0:
- version "4.16.0"
- resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.16.0.tgz#2f1a2426d876aa389d1c937b00f034c2c7808360"
- integrity sha512-IbqpRpfGE7JDGgXHJeWuCqT/tUqnLvZ14csSwt+S8o4nJo3RtQoE9VR4jB47tP/A8ArkYsh/THuMY6kyRP6kuA==
- dependencies:
- jszip "^3.10.1"
- tmp "^0.2.1"
- ws ">=8.14.2"
-
-selfsigned@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61"
- integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==
- dependencies:
- node-forge "^1"
-
-"semver@2 || 3 || 4 || 5":
- version "5.7.2"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
- integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
-
-semver@7.5.3:
- version "7.5.3"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e"
- integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==
- dependencies:
- lru-cache "^6.0.0"
-
-send@0.17.2:
- version "0.17.2"
- resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820"
- integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==
- dependencies:
- debug "2.6.9"
- depd "~1.1.2"
- destroy "~1.0.4"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- fresh "0.5.2"
- http-errors "1.8.1"
- mime "1.6.0"
- ms "2.1.3"
- on-finished "~2.3.0"
- range-parser "~1.2.1"
- statuses "~1.5.0"
-
serialize-javascript@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
@@ -3832,44 +1946,6 @@ serialize-javascript@^6.0.0:
dependencies:
randombytes "^2.1.0"
-serve-index@^1.9.1:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
- integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
- dependencies:
- accepts "~1.3.4"
- batch "0.6.1"
- debug "2.6.9"
- escape-html "~1.0.3"
- http-errors "~1.6.2"
- mime-types "~2.1.17"
- parseurl "~1.3.2"
-
-serve-static@1.14.2:
- version "1.14.2"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa"
- integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==
- dependencies:
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- parseurl "~1.3.3"
- send "0.17.2"
-
-setimmediate@^1.0.5, setimmediate@~1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
- integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
-
-setprototypeof@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
- integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
-
-setprototypeof@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
- integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
-
shallow-clone@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
@@ -3889,49 +1965,17 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-shell-quote@^1.7.3:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba"
- integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==
-
-signal-exit@^3.0.3:
- version "3.0.5"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f"
- integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==
-
-signal-exit@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
- integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-
slash@^5.0.0, slash@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce"
integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==
-snake-case@^3.0.3:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
- integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
- dependencies:
- dot-case "^3.0.4"
- tslib "^2.0.3"
-
-sockjs@^0.3.24:
- version "0.3.24"
- resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
- integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==
- dependencies:
- faye-websocket "^0.11.3"
- uuid "^8.3.2"
- websocket-driver "^0.7.4"
-
source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
-source-map-support@0.5.21, source-map-support@^0.5.21, source-map-support@~0.5.20:
+source-map-support@~0.5.20:
version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
@@ -3949,79 +1993,7 @@ spark-md5@^3.0.1:
resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc"
integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==
-spdx-correct@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c"
- integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==
- dependencies:
- spdx-expression-parse "^3.0.0"
- spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
- integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
-
-spdx-expression-parse@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
- integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
- dependencies:
- spdx-exceptions "^2.1.0"
- spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
- version "3.0.16"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f"
- integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==
-
-spdy-transport@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
- integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
- dependencies:
- debug "^4.1.0"
- detect-node "^2.0.4"
- hpack.js "^2.1.6"
- obuf "^1.1.2"
- readable-stream "^3.0.6"
- wbuf "^1.7.3"
-
-spdy@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b"
- integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==
- dependencies:
- debug "^4.1.0"
- handle-thing "^2.0.0"
- http-deceiver "^1.2.7"
- select-hose "^2.0.0"
- spdy-transport "^3.0.0"
-
-stackframe@^1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
- integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
-
-"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
- integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
-
-streamx@^2.15.0:
- version "2.15.0"
- resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.0.tgz#f58c92e6f726b5390dcabd6dd9094d29a854d698"
- integrity sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg==
- dependencies:
- fast-fifo "^1.1.0"
- queue-tick "^1.0.1"
-
-string-argv@0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
- integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==
-
-"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -4030,48 +2002,13 @@ string-argv@0.3.1:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
-string-width@^5.0.1, string-width@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
- integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
- dependencies:
- eastasianwidth "^0.2.0"
- emoji-regex "^9.2.2"
- strip-ansi "^7.0.1"
-
-string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
dependencies:
ansi-regex "^5.0.1"
-strip-ansi@^7.0.1, strip-ansi@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
- integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
- dependencies:
- ansi-regex "^6.0.1"
-
-strip-final-newline@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
- integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-
sucrase@^3.32.0:
version "3.32.0"
resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7"
@@ -4085,30 +2022,7 @@ sucrase@^3.32.0:
pirates "^4.0.1"
ts-interface-checker "^0.1.9"
-super-regex@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/super-regex/-/super-regex-0.2.0.tgz#dc1e071e55cdcf56930eb6271f73653a655b2642"
- integrity sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==
- dependencies:
- clone-regexp "^3.0.0"
- function-timeout "^0.1.0"
- time-span "^5.1.0"
-
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
-supports-color@^7.1.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
- integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
- dependencies:
- has-flag "^4.0.0"
-
-supports-color@^8.0.0, supports-color@^8.1.1:
+supports-color@^8.0.0:
version "8.1.1"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
@@ -4153,24 +2067,6 @@ tapable@^2.1.1, tapable@^2.2.0:
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
-tar-fs@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf"
- integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==
- dependencies:
- mkdirp-classic "^0.5.2"
- pump "^3.0.0"
- tar-stream "^3.1.5"
-
-tar-stream@^3.1.5:
- version "3.1.6"
- resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab"
- integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==
- dependencies:
- b4a "^1.6.4"
- fast-fifo "^1.2.0"
- streamx "^2.15.0"
-
terser-webpack-plugin@^5.1.3:
version "5.2.5"
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz#ce65b9880a0c36872555c4874f45bbdb02ee32c9"
@@ -4206,35 +2102,6 @@ thenify-all@^1.0.0:
dependencies:
any-promise "^1.0.0"
-thunky@^1.0.2:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
- integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
-
-time-span@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/time-span/-/time-span-5.1.0.tgz#80c76cf5a0ca28e0842d3f10a4e99034ce94b90d"
- integrity sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==
- dependencies:
- convert-hrtime "^5.0.0"
-
-tiny-case@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03"
- integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==
-
-tlds@^1.242.0:
- version "1.242.0"
- resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.242.0.tgz#da136a9c95b0efa1a4cd57dca8ef240c08ada4b7"
- integrity sha512-aP3dXawgmbfU94mA32CJGHmJUE1E58HCB1KmlKRhBNtqBL27mSQcAEmcaMaQ1Za9kIVvOdbxJD3U5ycDy7nJ3w==
-
-tmp@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
- integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
- dependencies:
- rimraf "^3.0.0"
-
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -4242,64 +2109,11 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
-toidentifier@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
- integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
-
-toposort@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
- integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=
-
-"traverse@>=0.3.0 <0.4":
- version "0.3.9"
- resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9"
- integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==
-
-ts-dedent@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5"
- integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==
-
ts-interface-checker@^0.1.9:
version "0.1.13"
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
-tslib@^2.0.3, tslib@^2.3.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
- integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
-
-type-fest@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
- integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
-
-type-fest@^0.8.1:
- version "0.8.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
- integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
-
-type-fest@^2.19.0:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
- integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
-
-type-fest@^4.8.3:
- version "4.8.3"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.8.3.tgz#6db08d9f44d596cd953f83020c7c56310c368d1c"
- integrity sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==
-
-type-is@~1.6.18:
- version "1.6.18"
- resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
- integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
- dependencies:
- media-typer "0.3.0"
- mime-types "~2.1.24"
-
unicorn-magic@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4"
@@ -4310,27 +2124,6 @@ universalify@^2.0.0:
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
-unpipe@1.0.0, unpipe@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
- integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
-
-unzipper@^0.10.14:
- version "0.10.14"
- resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.14.tgz#d2b33c977714da0fbc0f82774ad35470a7c962b1"
- integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==
- dependencies:
- big-integer "^1.6.17"
- binary "~0.3.0"
- bluebird "~3.4.1"
- buffer-indexof-polyfill "~1.0.0"
- duplexer2 "~0.1.4"
- fstream "^1.0.12"
- graceful-fs "^4.2.2"
- listenercount "~1.0.1"
- readable-stream "~2.3.6"
- setimmediate "~1.0.4"
-
update-browserslist-db@^1.0.13:
version "1.0.13"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
@@ -4339,13 +2132,6 @@ update-browserslist-db@^1.0.13:
escalade "^3.1.1"
picocolors "^1.0.0"
-upper-case-first@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324"
- integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==
- dependencies:
- tslib "^2.0.3"
-
uri-js@^4.2.2:
version "4.4.1"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
@@ -4353,57 +2139,11 @@ uri-js@^4.2.2:
dependencies:
punycode "^2.1.0"
-url-regex-safe@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/url-regex-safe/-/url-regex-safe-4.0.0.tgz#2ac972bfc012e6ab1363d8f3f1c540145b64e15e"
- integrity sha512-BrnFCWKNFrFnRzKD66NtJqQepfJrUHNPvPxE5y5NSAhXBb4OlobQjt7907Jm4ItPiXaeX+dDWMkcnOd4jR9N8A==
- dependencies:
- ip-regex "4.3.0"
- tlds "^1.242.0"
-
-util-arity@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/util-arity/-/util-arity-1.1.0.tgz#59d01af1fdb3fede0ac4e632b0ab5f6ce97c9330"
- integrity sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=
-
-util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+util-deprecate@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-utils-merge@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
- integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
-
-uuid@9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
- integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
-
-uuid@9.0.1:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
- integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
-
-uuid@^8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
- integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
-
-validate-npm-package-license@^3.0.1:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
- integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
- dependencies:
- spdx-correct "^3.0.0"
- spdx-expression-parse "^3.0.0"
-
-vary@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
- integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
-
watchpack@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
@@ -4412,18 +2152,6 @@ watchpack@^2.4.0:
glob-to-regexp "^0.4.1"
graceful-fs "^4.1.2"
-wbuf@^1.1.0, wbuf@^1.7.3:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
- integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
- dependencies:
- minimalistic-assert "^1.0.0"
-
-web-streams-polyfill@^3.0.3:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6"
- integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==
-
webpack-cli@^5.1.4:
version "5.1.4"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b"
@@ -4443,53 +2171,6 @@ webpack-cli@^5.1.4:
rechoir "^0.8.0"
webpack-merge "^5.7.3"
-webpack-dev-middleware@^5.3.1:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz#aa079a8dedd7e58bfeab358a9af7dab304cee57f"
- integrity sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==
- dependencies:
- colorette "^2.0.10"
- memfs "^3.4.1"
- mime-types "^2.1.31"
- range-parser "^1.2.1"
- schema-utils "^4.0.0"
-
-webpack-dev-server@^4.15.1:
- version "4.15.1"
- resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7"
- integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==
- dependencies:
- "@types/bonjour" "^3.5.9"
- "@types/connect-history-api-fallback" "^1.3.5"
- "@types/express" "^4.17.13"
- "@types/serve-index" "^1.9.1"
- "@types/serve-static" "^1.13.10"
- "@types/sockjs" "^0.3.33"
- "@types/ws" "^8.5.5"
- ansi-html-community "^0.0.8"
- bonjour-service "^1.0.11"
- chokidar "^3.5.3"
- colorette "^2.0.10"
- compression "^1.7.4"
- connect-history-api-fallback "^2.0.0"
- default-gateway "^6.0.3"
- express "^4.17.3"
- graceful-fs "^4.2.6"
- html-entities "^2.3.2"
- http-proxy-middleware "^2.0.3"
- ipaddr.js "^2.0.1"
- launch-editor "^2.6.0"
- open "^8.0.9"
- p-retry "^4.5.0"
- rimraf "^3.0.2"
- schema-utils "^4.0.0"
- selfsigned "^2.1.1"
- serve-index "^1.9.1"
- sockjs "^0.3.24"
- spdy "^4.0.2"
- webpack-dev-middleware "^5.3.1"
- ws "^8.13.0"
-
webpack-merge@^5.7.3:
version "5.8.0"
resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61"
@@ -4533,20 +2214,6 @@ webpack@^5.76.0:
watchpack "^2.4.0"
webpack-sources "^3.2.3"
-websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
- integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
- dependencies:
- http-parser-js ">=0.5.1"
- safe-buffer ">=5.1.0"
- websocket-extensions ">=0.1.1"
-
-websocket-extensions@>=0.1.1:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
- integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
-
which@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
@@ -4554,19 +2221,12 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
-which@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a"
- integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==
- dependencies:
- isexe "^3.1.1"
-
wildcard@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+wrap-ansi@^7.0.0:
name wrap-ansi-cjs
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
@@ -4576,41 +2236,17 @@ wildcard@^2.0.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
-wrap-ansi@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
- integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
- dependencies:
- ansi-styles "^6.1.0"
- string-width "^5.0.1"
- strip-ansi "^7.0.1"
-
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-ws@>=8.14.2, ws@^8.13.0:
- version "8.14.2"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f"
- integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==
-
-xmlbuilder@^15.1.1:
- version "15.1.1"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
- integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
-
y18n@^5.0.5:
version "5.0.8"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-
-yaml@^2.1.1, yaml@^2.2.2, yaml@^2.3.4:
+yaml@^2.1.1, yaml@^2.3.4:
version "2.3.4"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2"
integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==
@@ -4632,13 +2268,3 @@ yargs@^17.0.0:
string-width "^4.2.3"
y18n "^5.0.5"
yargs-parser "^21.0.0"
-
-yup@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/yup/-/yup-1.2.0.tgz#9e51af0c63bdfc9be0fdc6c10aa0710899d8aff6"
- integrity sha512-PPqYKSAXjpRCgLgLKVGPA33v5c/WgEx3wi6NFjIiegz90zSwyMpvTFp/uGcVnnbx6to28pgnzp/q8ih3QRjLMQ==
- dependencies:
- property-expr "^2.0.5"
- tiny-case "^1.0.3"
- toposort "^2.0.2"
- type-fest "^2.19.0"