diff --git a/.rubocop.yml b/.rubocop.yml index afd543bc..df0ae68f 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -21,7 +21,7 @@ Documentation: Enabled: false AllCops: - TargetRubyVersion: 2.6 + TargetRubyVersion: 3.1 Exclude: - 'bin/*' - 'coverage/**/*' diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz index 04e47cb8..bedf0dba 100644 Binary files a/.yarn/install-state.gz and b/.yarn/install-state.gz differ diff --git a/Gemfile.lock b/Gemfile.lock index b73babd4..f5efb323 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -104,6 +104,7 @@ GEM factory_bot_rails (6.2.0) factory_bot (~> 6.2.0) railties (>= 5.0.0) + ffi (1.17.0-arm64-darwin) ffi (1.17.0-x86_64-darwin) ffi (1.17.0-x86_64-linux-gnu) generator_spec (0.10.0) @@ -161,6 +162,8 @@ GEM net-smtp (0.5.0) net-protocol nio4r (2.7.3) + nokogiri (1.16.6-arm64-darwin) + racc (~> 1.4) nokogiri (1.16.6-x86_64-darwin) racc (~> 1.4) nokogiri (1.16.6-x86_64-linux) @@ -315,6 +318,7 @@ GEM zeitwerk (2.6.18) PLATFORMS + arm64-darwin-23 x86_64-darwin-22 x86_64-linux diff --git a/app/components/maglev/content/builder.rb b/app/components/maglev/content/builder.rb index 39ab8124..51b1102e 100644 --- a/app/components/maglev/content/builder.rb +++ b/app/components/maglev/content/builder.rb @@ -3,25 +3,8 @@ module Maglev module Content module Builder - TYPES = { - text: Maglev::Content::Text, - image: Maglev::Content::Image, - link: Maglev::Content::Link, - checkbox: Maglev::Content::Checkbox, - color: Maglev::Content::Color, - select: Maglev::Content::Select, - collection_item: Maglev::Content::CollectionItem, - icon: Maglev::Content::Icon, - divider: Maglev::Content::Void, - hint: Maglev::Content::Void - }.freeze - def build(scope, content, setting) - klass = TYPES[setting.type.to_sym] - - raise "[Maglev] Unknown setting type: #{setting.type}" unless klass - - klass.new(scope, content, setting) + setting.content_class.new(scope, content, setting) end module_function :build diff --git a/app/components/maglev/page_component.rb b/app/components/maglev/page_component.rb index 9d2b5f90..bc06dcb7 100644 --- a/app/components/maglev/page_component.rb +++ b/app/components/maglev/page_component.rb @@ -36,10 +36,10 @@ def build_section(definition, attributes) build( SectionComponent, parent: self, - definition: definition, + definition:, attributes: attributes.deep_transform_keys! { |k| k.to_s.underscore.to_sym }, - templates_root_path: templates_root_path, - rendering_mode: rendering_mode + templates_root_path:, + rendering_mode: ) end end diff --git a/app/controllers/concerns/maglev/fetchers_concern.rb b/app/controllers/concerns/maglev/fetchers_concern.rb index 7fbd1a10..43b63164 100644 --- a/app/controllers/concerns/maglev/fetchers_concern.rb +++ b/app/controllers/concerns/maglev/fetchers_concern.rb @@ -30,7 +30,7 @@ def fetch_maglev_page path: maglev_page_path_from_params, locale: content_locale, default_locale: default_content_locale, - fallback_to_default_locale: fallback_to_default_locale, + fallback_to_default_locale:, only_visible: maglev_rendering_mode == :live ) end @@ -38,7 +38,7 @@ def fetch_maglev_page def fetch_maglev_page_sections(page_sections = nil) @fetch_maglev_page_sections ||= maglev_services.get_page_sections.call( page: fetch_maglev_page, - page_sections: page_sections, + page_sections:, locale: content_locale ) end @@ -106,7 +106,7 @@ def maglev_page_fullpaths maglev_site.locale_prefixes.inject({}) do |memo, locale| memo.merge(locale => maglev_services.get_page_fullpath.call( page: maglev_page, - locale: locale, + locale:, preview_mode: maglev_rendering_mode != :live )) end diff --git a/app/controllers/maglev/api/page_clones_controller.rb b/app/controllers/maglev/api/page_clones_controller.rb index 8553d3c4..def284c4 100644 --- a/app/controllers/maglev/api/page_clones_controller.rb +++ b/app/controllers/maglev/api/page_clones_controller.rb @@ -11,7 +11,7 @@ def create private def clone_page(page) - services.clone_page.call(page: page) + services.clone_page.call(page:) end def resources diff --git a/app/controllers/maglev/api/pages_controller.rb b/app/controllers/maglev/api/pages_controller.rb index fe0b0ac3..f15111db 100644 --- a/app/controllers/maglev/api/pages_controller.rb +++ b/app/controllers/maglev/api/pages_controller.rb @@ -4,12 +4,12 @@ module Maglev module Api class PagesController < ::Maglev::ApiController def index - @pages = services.search_pages.call(q: params[:q], content_locale: content_locale, + @pages = services.search_pages.call(q: params[:q], content_locale:, default_locale: default_content_locale) end def show - @page = services.search_pages.call(id: params[:id], content_locale: content_locale, + @page = services.search_pages.call(id: params[:id], content_locale:, default_locale: default_content_locale) head :not_found if @page.nil? end @@ -45,12 +45,12 @@ def site_params lock_version = params.dig(:site, :lock_version) sections = params[:site].to_unsafe_hash[:sections] unless params.dig(:site, :sections).nil? style = params.dig(:site, :style) - (lock_version && sections ? { lock_version: lock_version, sections: sections } : {}).merge(style: style) + (lock_version && sections ? { lock_version:, sections: } : {}).merge(style:) end def persist!(page) services.persist_page.call( - page: page, + page:, page_attributes: page_params, site: maglev_site, site_attributes: site_params diff --git a/app/controllers/maglev/page_preview_controller.rb b/app/controllers/maglev/page_preview_controller.rb index 52ed7bec..2355757a 100644 --- a/app/controllers/maglev/page_preview_controller.rb +++ b/app/controllers/maglev/page_preview_controller.rb @@ -44,7 +44,7 @@ def use_engine_vite? end def extract_content_locale - _, locale = maglev_services.extract_locale.call(params: params, locales: maglev_site.locale_prefixes) + _, locale = maglev_services.extract_locale.call(params:, locales: maglev_site.locale_prefixes) ::I18n.locale = locale end diff --git a/app/frontend/editor/components/dynamic-form/dynamic-input.vue b/app/frontend/editor/components/dynamic-form/dynamic-input.vue index 2a7a37c4..d6c0f6f8 100644 --- a/app/frontend/editor/components/dynamic-form/dynamic-input.vue +++ b/app/frontend/editor/components/dynamic-form/dynamic-input.vue @@ -1,100 +1,16 @@ diff --git a/app/frontend/editor/initializers/dynamic-inputs.js b/app/frontend/editor/initializers/dynamic-inputs.js new file mode 100644 index 00000000..9611c8fb --- /dev/null +++ b/app/frontend/editor/initializers/dynamic-inputs.js @@ -0,0 +1,23 @@ +import { registerInput, getInputs } from '@/misc/dynamic-inputs' + +import TextInput from '@/components/kit/polymorphic-text-input.vue' +import ImageInput from '@/components/kit/image-input.vue' +import LinkInput from '@/components/kit/link-input.vue' +import SimpleSelect from '@/components/kit/simple-select.vue' +import CollectionItemInput from '@/components/kit/collection-item-input.vue' +import CheckboxInput from '@/components/kit/checkbox-input.vue' +import ColorInput from '@/components/kit/color-input.vue' +import IconInput from '@/components/kit/icon-input.vue' +import Divider from '@/components/kit/divider.vue' +import Hint from '@/components/kit/hint.vue' + +registerInput('text', TextInput, (props, options) => ({ ...props, options })) +registerInput('image', ImageInput) +registerInput('link', LinkInput, (props, options) => ({ ...props, withText: options.withText })) +registerInput('select', SimpleSelect, (props, options) => ({ ...props, selectOptions: options.selectOptions })) +registerInput('collection_item', CollectionItemInput, (props, options) => ({ ...props, collectionId: options.collectionId })) +registerInput('checkbox', CheckboxInput) +registerInput('icon', IconInput) +registerInput('color', ColorInput, (props, options) => ({ ...props, presets: options.presets })) +registerInput('divider', Divider, (props, options) => ({ text: props.label, withHint: options.withHint })) +registerInput('hint', Hint, (props, options) => ({ text: props.label })) \ No newline at end of file diff --git a/app/frontend/editor/plugins/event-bus.js b/app/frontend/editor/initializers/event-bus.js similarity index 100% rename from app/frontend/editor/plugins/event-bus.js rename to app/frontend/editor/initializers/event-bus.js diff --git a/app/frontend/editor/plugins/filters.js b/app/frontend/editor/initializers/filters.js similarity index 84% rename from app/frontend/editor/plugins/filters.js rename to app/frontend/editor/initializers/filters.js index fb993cb5..1cfccea3 100644 --- a/app/frontend/editor/plugins/filters.js +++ b/app/frontend/editor/initializers/filters.js @@ -1,5 +1,5 @@ import Vue from 'vue' -import i18n from '@/plugins/i18n.js' +import i18n from '@/initializers/i18n.js' import { numberToHumanSize, truncate, formatPath } from '@/misc/utils' Vue.filter('numberToHumanSize', (size) => numberToHumanSize(size, i18n)) diff --git a/app/frontend/editor/plugins/i18n.js b/app/frontend/editor/initializers/i18n.js similarity index 100% rename from app/frontend/editor/plugins/i18n.js rename to app/frontend/editor/initializers/i18n.js diff --git a/app/frontend/editor/plugins/index.js b/app/frontend/editor/initializers/index.js similarity index 54% rename from app/frontend/editor/plugins/index.js rename to app/frontend/editor/initializers/index.js index 76c29d14..1cac41e2 100644 --- a/app/frontend/editor/plugins/index.js +++ b/app/frontend/editor/initializers/index.js @@ -1,3 +1,5 @@ import './i18n' import './tooltip' import './filters' +import './dynamic-inputs' +import './plugins' diff --git a/app/frontend/editor/initializers/plugins.js b/app/frontend/editor/initializers/plugins.js new file mode 100644 index 00000000..3d34f2ed --- /dev/null +++ b/app/frontend/editor/initializers/plugins.js @@ -0,0 +1,5 @@ +const modules = import.meta.glob('@/plugins/*.js') + +for (const path in modules) { + modules[path]() +} diff --git a/app/frontend/editor/plugins/tooltip.js b/app/frontend/editor/initializers/tooltip.js similarity index 100% rename from app/frontend/editor/plugins/tooltip.js rename to app/frontend/editor/initializers/tooltip.js diff --git a/app/frontend/editor/main.js b/app/frontend/editor/main.js index eca1dd6e..fe8df802 100644 --- a/app/frontend/editor/main.js +++ b/app/frontend/editor/main.js @@ -1,10 +1,10 @@ import Vue from 'vue' import App from './App.vue' import store from '@/store' -import i18n from '@/plugins/i18n' +import i18n from '@/initializers/i18n' import router from '@/router' import '@/mixins' -import '@/plugins' +import '@/initializers' import '@/components/kit' Vue.config.productionTip = false diff --git a/app/frontend/editor/misc/__tests__/utils.spec.js b/app/frontend/editor/misc/__tests__/utils.spec.js index c95f112a..9968e42a 100644 --- a/app/frontend/editor/misc/__tests__/utils.spec.js +++ b/app/frontend/editor/misc/__tests__/utils.spec.js @@ -1,5 +1,5 @@ import * as utils from '../utils' -import i18n from '@/plugins/i18n.js' +import i18n from '@/initializers/i18n.js' describe('numberToHumanSize', () => { it('takes a number and converts it into a human string', () => { diff --git a/app/frontend/editor/misc/dynamic-inputs.js b/app/frontend/editor/misc/dynamic-inputs.js new file mode 100644 index 00000000..6f1900f8 --- /dev/null +++ b/app/frontend/editor/misc/dynamic-inputs.js @@ -0,0 +1,22 @@ +const dynamicInputs = {} + +const defaultTransformProps = (props, options) => props + +export const registerInput = function(name, component, transformProps = null) { + dynamicInputs[name] = { + component, + transformProps: transformProps ?? defaultTransformProps + } +} + +export const getInput = function(name) { + const input = dynamicInputs[name] + + if (!input) console.log(`🚨 [Maglev ERROR] Unable to find the ${name} type input. Are you sure you registered it correctly?`) + + return dynamicInputs[name] +} + +export const getInputs = function() { + return dynamicInputs +} diff --git a/app/frontend/editor/mixins/global.js b/app/frontend/editor/mixins/global.js index 3f4347f4..b2e7bcca 100644 --- a/app/frontend/editor/mixins/global.js +++ b/app/frontend/editor/mixins/global.js @@ -1,6 +1,6 @@ import Vue from 'vue' import { mapState, mapActions } from 'vuex' -import { ModalBus } from '@/plugins/event-bus' +import { ModalBus } from '@/initializers/event-bus' import services from '@/services' import { isBlank } from '@/misc/utils' @@ -106,6 +106,9 @@ Vue.mixin({ tablet: 1024, } }, + modalBus() { + return ModalBus + } }, methods: { ...mapActions([ diff --git a/app/frontend/editor/plugins/.keep b/app/frontend/editor/plugins/.keep new file mode 100644 index 00000000..4f07f1ca --- /dev/null +++ b/app/frontend/editor/plugins/.keep @@ -0,0 +1 @@ +.keep \ No newline at end of file diff --git a/app/helpers/maglev/admin/themes_helper.rb b/app/helpers/maglev/admin/themes_helper.rb index 208772dc..626f69cd 100644 --- a/app/helpers/maglev/admin/themes_helper.rb +++ b/app/helpers/maglev/admin/themes_helper.rb @@ -20,7 +20,7 @@ def section_template_path(section) end def section_screenshot_path(section) - services.fetch_section_screenshot_path.call(section: section) + services.fetch_section_screenshot_path.call(section:) end end end diff --git a/app/helpers/maglev/editor_helper.rb b/app/helpers/maglev/editor_helper.rb index 0e62d2c0..2048a0da 100644 --- a/app/helpers/maglev/editor_helper.rb +++ b/app/helpers/maglev/editor_helper.rb @@ -81,7 +81,7 @@ def editor_asset_path(source, default_source) def editor_custom_translations I18n.available_locales.index_with do |locale| - ::I18n.t('maglev', locale: locale, default: nil) + ::I18n.t('maglev', locale:, default: nil) end end end diff --git a/app/helpers/maglev/page_preview_helper.rb b/app/helpers/maglev/page_preview_helper.rb index 985bd463..16cafedf 100644 --- a/app/helpers/maglev/page_preview_helper.rb +++ b/app/helpers/maglev/page_preview_helper.rb @@ -20,9 +20,9 @@ def render_maglev_section(type, site: nil, theme: nil, page: nil, page_sections: end render_maglev_sections( - site: site, - theme: theme, - page: page, + site:, + theme:, + page:, page_sections: sections ) end diff --git a/app/helpers/maglev/sitemap_helper.rb b/app/helpers/maglev/sitemap_helper.rb index 15bba249..387dff37 100644 --- a/app/helpers/maglev/sitemap_helper.rb +++ b/app/helpers/maglev/sitemap_helper.rb @@ -3,7 +3,7 @@ module Maglev module SitemapHelper def sitemap_url(host, page, locale = nil) - path = maglev_services.get_page_fullpath.call(page: page, locale: locale) + path = maglev_services.get_page_fullpath.call(page:, locale:) return path if path =~ %r{^https?://} diff --git a/app/models/concerns/maglev/sections_concern.rb b/app/models/concerns/maglev/sections_concern.rb index 462db56b..6ace8594 100644 --- a/app/models/concerns/maglev/sections_concern.rb +++ b/app/models/concerns/maglev/sections_concern.rb @@ -47,7 +47,7 @@ def prepare_block(theme, section_type, block) def prepare_settings(theme, section_type, block_type, settings) # NOTE: in the theme definition file, we allow developers to declare # default content like this: { : , ..., : } - settings = settings.map { |key, value| { id: key, value: value } } unless settings.is_a?(Array) + settings = settings.map { |key, value| { id: key, value: } } unless settings.is_a?(Array) settings.map do |setting| setting = setting.with_indifferent_access diff --git a/app/models/maglev/page/path_concern.rb b/app/models/maglev/page/path_concern.rb index 89a564ec..c76fa92e 100644 --- a/app/models/maglev/page/path_concern.rb +++ b/app/models/maglev/page/path_concern.rb @@ -40,7 +40,7 @@ def path=(value) def current_path locale = Maglev::I18n.current_locale.to_sym @memoized_paths ||= {} - @memoized_paths[locale] ||= paths.canonical.find_or_initialize_by(locale: locale, canonical: true) + @memoized_paths[locale] ||= paths.canonical.find_or_initialize_by(locale:, canonical: true) end def path_hash diff --git a/app/models/maglev/page_path.rb b/app/models/maglev/page_path.rb index c85d2ff9..70af2538 100644 --- a/app/models/maglev/page_path.rb +++ b/app/models/maglev/page_path.rb @@ -8,7 +8,7 @@ class PagePath < ApplicationRecord ## scopes ## scope :canonical, -> { where(canonical: true) } scope :not_canonical, -> { where(canonical: false) } - scope :by_value, ->(value, locale = nil) { where(value: value, locale: locale || Maglev::I18n.current_locale) } + scope :by_value, ->(value, locale = nil) { where(value:, locale: locale || Maglev::I18n.current_locale) } ## validations ## validates :value, presence: true, exclusion: { in: Maglev.config.reserved_paths } diff --git a/app/models/maglev/section/content_concern.rb b/app/models/maglev/section/content_concern.rb index 7fc88f8b..00a3f12f 100644 --- a/app/models/maglev/section/content_concern.rb +++ b/app/models/maglev/section/content_concern.rb @@ -19,7 +19,7 @@ def build_default_settings_content(source = nil, custom_settings = nil) (custom_settings || settings).map do |definition| source ||= sample[:settings] value = definition.build_default_content(source[definition.id.to_sym]) - { id: definition.id, value: value } + { id: definition.id, value: } end end diff --git a/app/models/maglev/section/setting.rb b/app/models/maglev/section/setting.rb index 0ffdfc2c..3b2abd4a 100644 --- a/app/models/maglev/section/setting.rb +++ b/app/models/maglev/section/setting.rb @@ -5,55 +5,46 @@ class Maglev::Section::Setting ## concerns ## include ActiveModel::Model - ## constants ## - REGISTERED_TYPES = %w[text image checkbox link color select collection_item icon divider hint].freeze - ## attributes ## attr_accessor :id, :label, :type, :default, :options ## validations ## validates :id, :label, :type, :default, 'maglev/presence': true - validates :type, inclusion: { in: REGISTERED_TYPES } + validates :type, inclusion: { in: ->(_setting) { Maglev::SettingTypeRegistry.types.map(&:to_s) } } ## methods ## - # shortcuts - REGISTERED_TYPES.each do |type| - define_method(:"#{type}_type?") do - self.type.to_s == type - end - end - - def cast_value(value) - self.class.registered_types[type.to_s].cast_value(value) - end - # NOTE: any modification to that method must be reflected in the JS editor def build_default_content(custom_default = nil) - default = custom_default.nil? ? self.default : custom_default - - # special case: text type - default ||= label if text_type? + default = setting_type.default_for( + label:, + default: custom_default.nil? ? self.default : custom_default + ) cast_value(default) end + delegate :cast_value, to: :setting_type + + delegate :content_class, to: :setting_type + ## class methods ## + def self.build(hash) attributes = hash.slice('id', 'label', 'type', 'default') options = hash.except('id', 'label', 'type', 'default') - new(attributes.merge(options: options)) + new(attributes.merge(options:)) end def self.build_many(list) list.map { |hash| build(hash) } end - def self.registered_types - @registered_types ||= REGISTERED_TYPES.index_with do |type| - "Maglev::SettingTypes::#{type.camelize}".constantize.new - end + private + + def setting_type + Maglev::SettingTypeRegistry[type] end end # rubocop:enable Style/ClassAndModuleChildren diff --git a/app/models/maglev/setting_type_registry.rb b/app/models/maglev/setting_type_registry.rb new file mode 100644 index 00000000..614750ff --- /dev/null +++ b/app/models/maglev/setting_type_registry.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'forwardable' + +module Maglev + class SettingTypeRegistry + CORE_TYPES = %w[text image checkbox link color select collection_item icon divider hint].freeze + + class << self + extend Forwardable + def_delegators :@instance, :types, :register, :[] + end + + def initialize + @setting_types = {} + end + + def types + @setting_types.keys + end + + def register(id:, klass: nil) + klass ||= "Maglev::SettingTypes::#{id.to_s.camelize}".constantize + @setting_types[id.to_sym] = klass.new + end + + def [](type) + @setting_types[type.to_sym].tap do |setting| + raise UnknownSettingTypeError, "Unknown #{type} setting type" if setting.nil? + end + end + + # register once all the core setting types + @instance = new.tap do |registry| + CORE_TYPES.each do |id| + registry.register(id:) + end + end + end + + class UnknownSettingTypeError < StandardError; end +end diff --git a/app/models/maglev/setting_types/base.rb b/app/models/maglev/setting_types/base.rb index 437e70f1..f5eb0896 100644 --- a/app/models/maglev/setting_types/base.rb +++ b/app/models/maglev/setting_types/base.rb @@ -1,10 +1,21 @@ # frozen_string_literal: true -# rubocop:disable Style/ClassAndModuleChildren -class Maglev::SettingTypes::Base - def cast_value(value) - value +module Maglev + module SettingTypes + class Base + def cast_value(value) + value + end + + # rubocop:disable Lint/UnusedMethodArgument + def default_for(label:, default:) + default + end + # rubocop:enable Lint/UnusedMethodArgument + + def content_class + @content_class ||= "Maglev::Content::#{self.class.name.demodulize}".constantize + end + end end end - -# rubocop:enable Style/ClassAndModuleChildren diff --git a/app/models/maglev/setting_types/text.rb b/app/models/maglev/setting_types/text.rb index 766f23ae..9cdfe0ba 100644 --- a/app/models/maglev/setting_types/text.rb +++ b/app/models/maglev/setting_types/text.rb @@ -2,5 +2,8 @@ # rubocop:disable Style/ClassAndModuleChildren class Maglev::SettingTypes::Text < Maglev::SettingTypes::Base + def default_for(label:, default:) + default.presence || label + end end # rubocop:enable Style/ClassAndModuleChildren diff --git a/app/models/maglev/site/locale.rb b/app/models/maglev/site/locale.rb index 4444dd2d..e74c1576 100644 --- a/app/models/maglev/site/locale.rb +++ b/app/models/maglev/site/locale.rb @@ -13,7 +13,7 @@ class Maglev::Site::Locale ## methods ## def as_json(_options = nil) - { label: label, prefix: prefix } + { label:, prefix: } end end # rubocop:enable Style/ClassAndModuleChildren diff --git a/app/models/maglev/theme/style_setting.rb b/app/models/maglev/theme/style_setting.rb index 750d2ca9..b438ec33 100644 --- a/app/models/maglev/theme/style_setting.rb +++ b/app/models/maglev/theme/style_setting.rb @@ -33,7 +33,7 @@ def self.build(hash) attributes = hash.slice('id', 'label', 'type', 'default') options = hash.except('id', 'label', 'type', 'default') - new(attributes.merge(options: options)) + new(attributes.merge(options:)) end def self.build_many(list) diff --git a/app/services/concerns/maglev/get_page_sections/transform_link_concern.rb b/app/services/concerns/maglev/get_page_sections/transform_link_concern.rb index 99d437e9..d1ffc277 100644 --- a/app/services/concerns/maglev/get_page_sections/transform_link_concern.rb +++ b/app/services/concerns/maglev/get_page_sections/transform_link_concern.rb @@ -28,7 +28,7 @@ def get_fullpath_from_link(link) page = fetch_static_pages.call.find { |static_page| static_page.id == page_id } page&.path else - get_page_fullpath.call(page: page_id, locale: locale) + get_page_fullpath.call(page: page_id, locale:) end end end diff --git a/app/services/maglev/change_site_locales.rb b/app/services/maglev/change_site_locales.rb index bfc6a743..a5047310 100644 --- a/app/services/maglev/change_site_locales.rb +++ b/app/services/maglev/change_site_locales.rb @@ -16,7 +16,7 @@ def call raise 'The translations for the new default locale are incomplete' end - site.update(locales: locales) + site.update(locales:) end protected diff --git a/app/services/maglev/clone_page.rb b/app/services/maglev/clone_page.rb index f8de5949..ae586e4c 100644 --- a/app/services/maglev/clone_page.rb +++ b/app/services/maglev/clone_page.rb @@ -41,7 +41,7 @@ def cloned_attributes def clone_title page.title_translations.transform_values do |title| - ::I18n.t('activerecord.attributes.maglev/page.cloned_title', title: title) + ::I18n.t('activerecord.attributes.maglev/page.cloned_title', title:) end end diff --git a/app/services/maglev/fetch_collection_items.rb b/app/services/maglev/fetch_collection_items.rb index ac82c07a..bc977275 100644 --- a/app/services/maglev/fetch_collection_items.rb +++ b/app/services/maglev/fetch_collection_items.rb @@ -33,7 +33,7 @@ def fetch_items def fetch_item build_item( - id == 'any' ? fetch_original_items.first : fetch_original_items.find_by(id: id) + id == 'any' ? fetch_original_items.first : fetch_original_items.find_by(id:) ) end @@ -42,8 +42,8 @@ def fetch_original_items model_class.public_send(fetch_method_name, site: fetch_site.call, - keyword: keyword, - max_items: max_items) + keyword:, + max_items:) end def default_fetch_original_items diff --git a/app/services/maglev/fetch_section_screenshot_path.rb b/app/services/maglev/fetch_section_screenshot_path.rb index 07cba0be..986534f2 100644 --- a/app/services/maglev/fetch_section_screenshot_path.rb +++ b/app/services/maglev/fetch_section_screenshot_path.rb @@ -10,7 +10,7 @@ class FetchSectionScreenshotPath argument :absolute, default: false def call - path = "#{fetch_sections_path.call(theme: theme)}/#{section.category}/#{section.id}.jpg" + path = "#{fetch_sections_path.call(theme:)}/#{section.category}/#{section.id}.jpg" absolute ? Rails.root.join("public/#{path}").to_s : "/#{path}" end end diff --git a/app/services/maglev/fetch_section_screenshot_url.rb b/app/services/maglev/fetch_section_screenshot_url.rb index e621f736..51dad775 100644 --- a/app/services/maglev/fetch_section_screenshot_url.rb +++ b/app/services/maglev/fetch_section_screenshot_url.rb @@ -8,7 +8,7 @@ class FetchSectionScreenshotUrl argument :section def call - fetch_section_screenshot_path.call(section: section) + "?#{section.screenshot_timestamp}" + fetch_section_screenshot_path.call(section:) + "?#{section.screenshot_timestamp}" end end end diff --git a/app/services/maglev/generate_site.rb b/app/services/maglev/generate_site.rb index 948469d0..89293c44 100644 --- a/app/services/maglev/generate_site.rb +++ b/app/services/maglev/generate_site.rb @@ -17,7 +17,7 @@ def call Maglev::Site.create(name: 'Default', locales: config.default_site_locales).tap do |site| Maglev::I18n.available_locales = site.locale_prefixes Maglev::I18n.with_locale(site.default_locale_prefix) do - setup_pages.call(site: site, theme: theme) if site.errors.empty? + setup_pages.call(site:, theme:) if site.errors.empty? end end end diff --git a/app/services/maglev/get_page_fullpath.rb b/app/services/maglev/get_page_fullpath.rb index 7bf916da..3a12ca13 100644 --- a/app/services/maglev/get_page_fullpath.rb +++ b/app/services/maglev/get_page_fullpath.rb @@ -15,7 +15,7 @@ class GetPageFullpath argument :locale def call - base_url = get_base_url.call(preview_mode: preview_mode) + base_url = get_base_url.call(preview_mode:) safe_path = path || fetch_path return unless safe_path diff --git a/app/services/maglev/persist_section_screenshot.rb b/app/services/maglev/persist_section_screenshot.rb index 5a9787c9..1edf0eb0 100644 --- a/app/services/maglev/persist_section_screenshot.rb +++ b/app/services/maglev/persist_section_screenshot.rb @@ -48,7 +48,7 @@ def section end def screenshot_filepath - fetch_section_screenshot_path.call(section: section, absolute: true) + fetch_section_screenshot_path.call(section:, absolute: true) end def screenshots_dir diff --git a/app/services/maglev/setup_pages.rb b/app/services/maglev/setup_pages.rb index 5ad717e5..ad72c776 100644 --- a/app/services/maglev/setup_pages.rb +++ b/app/services/maglev/setup_pages.rb @@ -27,11 +27,11 @@ def pages def create_page(page_attributes) persist_page.call( - site: site, + site:, site_attributes: site_attributes_from(page_attributes), - theme: theme, + theme:, page: Maglev::Page.new, - page_attributes: page_attributes + page_attributes: ) end diff --git a/app/views/maglev/api/assets/index.json.jbuilder b/app/views/maglev/api/assets/index.json.jbuilder index f366aa12..307d8586 100644 --- a/app/views/maglev/api/assets/index.json.jbuilder +++ b/app/views/maglev/api/assets/index.json.jbuilder @@ -2,7 +2,7 @@ json.data do json.array! @assets do |asset| - json.partial!('show', asset: asset) + json.partial!('show', asset:) end end diff --git a/app/views/maglev/api/collection_items/index.json.jbuilder b/app/views/maglev/api/collection_items/index.json.jbuilder index 760650a5..5c2dfdbf 100644 --- a/app/views/maglev/api/collection_items/index.json.jbuilder +++ b/app/views/maglev/api/collection_items/index.json.jbuilder @@ -1,5 +1,5 @@ # frozen_string_literal: true json.array! @items do |item| - json.partial!('show', item: item) + json.partial!('show', item:) end diff --git a/app/views/maglev/api/pages/_show.json.jbuilder b/app/views/maglev/api/pages/_show.json.jbuilder index 39dbe9f3..edcf6654 100644 --- a/app/views/maglev/api/pages/_show.json.jbuilder +++ b/app/views/maglev/api/pages/_show.json.jbuilder @@ -15,9 +15,9 @@ json.og_title page.og_title json.og_description page.og_description json.og_image_url page.og_image_url -json.preview_url services.get_page_fullpath.call(page: page, preview_mode: true, locale: content_locale) -json.live_url services.get_page_fullpath.call(page: page, preview_mode: false, locale: content_locale) -json.section_names services.get_page_section_names.call(page: page) -json.sections services.get_page_sections.call(page: page) +json.preview_url services.get_page_fullpath.call(page:, preview_mode: true, locale: content_locale) +json.live_url services.get_page_fullpath.call(page:, preview_mode: false, locale: content_locale) +json.section_names services.get_page_section_names.call(page:) +json.sections services.get_page_sections.call(page:) json.lock_version page.lock_version json.translated page.path.present? diff --git a/app/views/maglev/api/pages/index.json.jbuilder b/app/views/maglev/api/pages/index.json.jbuilder index c26c0079..7945fe39 100644 --- a/app/views/maglev/api/pages/index.json.jbuilder +++ b/app/views/maglev/api/pages/index.json.jbuilder @@ -13,6 +13,6 @@ json.array! @pages do |page| json.og_description page.og_description json.og_image_url page.og_image_url - json.preview_url services.get_page_fullpath.call(page: page, preview_mode: true, locale: content_locale) - json.section_names services.get_page_section_names.call(page: page) + json.preview_url services.get_page_fullpath.call(page:, preview_mode: true, locale: content_locale) + json.section_names services.get_page_section_names.call(page:) end diff --git a/app/views/maglev/api/sites/_show.json.jbuilder b/app/views/maglev/api/sites/_show.json.jbuilder index e77dd05d..38146788 100644 --- a/app/views/maglev/api/sites/_show.json.jbuilder +++ b/app/views/maglev/api/sites/_show.json.jbuilder @@ -5,7 +5,7 @@ json.deep_format_keys! json.sections site.sections || [] -json.style services.fetch_style.call(site: site, theme: maglev_theme).as_json +json.style services.fetch_style.call(site:, theme: maglev_theme).as_json json.locales site.locales diff --git a/app/views/maglev/api/themes/_show.json.jbuilder b/app/views/maglev/api/themes/_show.json.jbuilder index d664630c..2e9ae835 100644 --- a/app/views/maglev/api/themes/_show.json.jbuilder +++ b/app/views/maglev/api/themes/_show.json.jbuilder @@ -10,7 +10,7 @@ json.sections theme.sections do |section| json.settings section.settings.as_json json.blocks section.blocks.as_json json.theme_id theme.id - json.screenshot_path services.fetch_section_screenshot_url.call(section: section) + json.screenshot_path services.fetch_section_screenshot_url.call(section:) end json.section_categories theme.section_categories.as_json json.icons theme.icons || [] diff --git a/config/vite.json b/config/vite.json index d1e27765..c781521c 100644 --- a/config/vite.json +++ b/config/vite.json @@ -1,7 +1,7 @@ { "all": { "sourceCodeDir": "app/frontend", - "watchAdditionalPaths": [], + "watchAdditionalPaths": ["plugins/**/*"], "publicOutputDir": "maglev-assets" }, "development": { diff --git a/lib/generators/maglev/install_generator.rb b/lib/generators/maglev/install_generator.rb index a581003d..00a60c6a 100644 --- a/lib/generators/maglev/install_generator.rb +++ b/lib/generators/maglev/install_generator.rb @@ -27,11 +27,11 @@ def generate_blank_theme def mount_engine inject_into_file 'config/routes.rb', before: /^end/ do - <<-CODE + <<-RUBY mount Maglev::Engine => '/maglev' get '/sitemap', to: 'maglev/sitemap#index', defaults: { format: 'xml' } get '(*path)', to: 'maglev/page_preview#index', defaults: { path: 'index' }, constraints: Maglev::PreviewConstraint.new - CODE + RUBY end end diff --git a/lib/generators/maglev/plugin_generator.rb b/lib/generators/maglev/plugin_generator.rb new file mode 100644 index 00000000..76c2c8f8 --- /dev/null +++ b/lib/generators/maglev/plugin_generator.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +module Maglev + class PluginGenerator < Rails::Generators::NamedBase + source_root File.expand_path('templates/plugin', __dir__) + + def create_plugin_package + directory 'packages' + end + + def add_plugin_javascript_setup_file + directory 'app' + end + + def add_plugin_gem + gem table_name, path: "./packages/#{table_name}" + end + + def instructions + $stdout.puts <<~INFO + + Done! 🎉 + + Next steps: + - bundle install + - bundle exec rails maglev:vite:install_dependencies + + ⚠️ Don't forget to restart your application server + + Alright, now, you can start coding your plugin at `packages/#{name}`. + + 👉 Please visit our documentation site to know more about Maglev plugins. + INFO + end + + private + + def pluralize_table_names? + false + end + end +end diff --git a/lib/generators/maglev/setting_type_generator.rb b/lib/generators/maglev/setting_type_generator.rb new file mode 100644 index 00000000..3c4d8466 --- /dev/null +++ b/lib/generators/maglev/setting_type_generator.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +module Maglev + class SettingTypeGenerator < Rails::Generators::NamedBase + source_root File.expand_path('templates/setting_type', __dir__) + + class_option :plugin, type: :string, default: nil + + def plugin_name + (@plugin_name ||= options[:plugin]).tap do + if @plugin_name.blank? + puts '🚨 You need to pass the id of a Maglev plugin' + exit 0 + end + end + end + + def component_name + @component_name ||= table_name.dasherize + end + + def generate + directory 'packages' + end + + def register_setting_type_in_ruby + inject_into_file "packages/#{plugin_name}/lib/#{plugin_name}/engine.rb", before: / end\n^end/ do + <<-RUBY + config.to_prepare do + Maglev.register_setting_type(id: :#{table_name}) + end + + RUBY + end + end + + def register_setting_type_in_javascript + prepend_to_file "packages/#{plugin_name}/index.js" do + <<-JAVASCRIPT +import { registerInput } from '@/misc/dynamic-inputs' +import UIKit#{class_name}Input from './app/frontend/editor/components/kit/#{table_name}-input.vue' + JAVASCRIPT + end + + inject_into_file "packages/#{plugin_name}/index.js", before: /^}/ do + <<-JAVASCRIPT + registerInput('#{table_name}', UIKit#{class_name}Input, (props, _options) => props) + JAVASCRIPT + end + end + + private + + def pluralize_table_names? + false + end + end +end diff --git a/lib/generators/maglev/templates/plugin/app/frontend/editor/plugins/%table_name%.js.tt b/lib/generators/maglev/templates/plugin/app/frontend/editor/plugins/%table_name%.js.tt new file mode 100644 index 00000000..864392c0 --- /dev/null +++ b/lib/generators/maglev/templates/plugin/app/frontend/editor/plugins/%table_name%.js.tt @@ -0,0 +1,2 @@ + import setup from '<%= table_name %>' + setup() diff --git a/lib/generators/maglev/templates/plugin/packages/%table_name%/%table_name%.gemspec.tt b/lib/generators/maglev/templates/plugin/packages/%table_name%/%table_name%.gemspec.tt new file mode 100644 index 00000000..17788d1f --- /dev/null +++ b/lib/generators/maglev/templates/plugin/packages/%table_name%/%table_name%.gemspec.tt @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +$LOAD_PATH.push File.expand_path('lib', __dir__) + +# Maintain your gem's version: +require '<%= table_name %>/version' + +# rubocop:disable Metrics/BlockLength +# Describe your gem and declare its dependencies: +Gem::Specification.new do |spec| + spec.name = '<%= table_name %>' + spec.version = <%= class_name %>::VERSION + spec.authors = ['Maglev'] + spec.email = ['contact@maglev.dev'] + spec.homepage = 'https://www.maglev.dev' + spec.summary = '<%= human_name %> Maglev plugin' + spec.description = <<-DOC + <%= name.humanize %> Maglev plugin + DOC + spec.required_ruby_version = '>= 3' + + spec.files = Dir[ + '{app,config,db,lib}/**/*', + 'package.json', + 'yarn.lock', + 'index.js' + ] +end +# rubocop:enable Metrics/BlockLength diff --git a/lib/generators/maglev/templates/plugin/packages/%table_name%/index.js.tt b/lib/generators/maglev/templates/plugin/packages/%table_name%/index.js.tt new file mode 100644 index 00000000..31d74445 --- /dev/null +++ b/lib/generators/maglev/templates/plugin/packages/%table_name%/index.js.tt @@ -0,0 +1,3 @@ +export default function() { + console.log('👋 Hello from the <%= human_name %> plugin v0.0.1') +} \ No newline at end of file diff --git a/lib/generators/maglev/templates/plugin/packages/%table_name%/lib/%table_name%.rb.tt b/lib/generators/maglev/templates/plugin/packages/%table_name%/lib/%table_name%.rb.tt new file mode 100644 index 00000000..4a0efa3a --- /dev/null +++ b/lib/generators/maglev/templates/plugin/packages/%table_name%/lib/%table_name%.rb.tt @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +require_relative '<%= table_name %>/version' +require_relative '<%= table_name %>/engine' + +module <%= class_name %> +end \ No newline at end of file diff --git a/lib/generators/maglev/templates/plugin/packages/%table_name%/lib/%table_name%/engine.rb.tt b/lib/generators/maglev/templates/plugin/packages/%table_name%/lib/%table_name%/engine.rb.tt new file mode 100644 index 00000000..0a10587b --- /dev/null +++ b/lib/generators/maglev/templates/plugin/packages/%table_name%/lib/%table_name%/engine.rb.tt @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module <%= class_name %> + class Engine < ::Rails::Engine + isolate_namespace <%= class_name %> + + initializer 'maglev.plugins.<%= table_name %>' do + Maglev.register_plugin( + id: '<%= name %>', + name: '<%= human_name %>', + version: <%= class_name %>::VERSION, + root_path: root + ) + end + end +end \ No newline at end of file diff --git a/lib/generators/maglev/templates/plugin/packages/%table_name%/lib/%table_name%/version.rb.tt b/lib/generators/maglev/templates/plugin/packages/%table_name%/lib/%table_name%/version.rb.tt new file mode 100644 index 00000000..bf97e50a --- /dev/null +++ b/lib/generators/maglev/templates/plugin/packages/%table_name%/lib/%table_name%/version.rb.tt @@ -0,0 +1,3 @@ +module <%= class_name %> + VERSION = '0.0.1' +end \ No newline at end of file diff --git a/lib/generators/maglev/templates/plugin/packages/%table_name%/package.json.tt b/lib/generators/maglev/templates/plugin/packages/%table_name%/package.json.tt new file mode 100644 index 00000000..058c158f --- /dev/null +++ b/lib/generators/maglev/templates/plugin/packages/%table_name%/package.json.tt @@ -0,0 +1,8 @@ +{ + "name": "<%= table_name %>", + "version": "0.0.1", + "author": "Maglev", + "packageManager": "yarn@4.5.0", + "main": "./index.js", + "devDependencies": {} +} diff --git a/lib/generators/maglev/templates/setting_type/packages/%plugin_name%/app/components/maglev/content/%table_name%.rb.tt b/lib/generators/maglev/templates/setting_type/packages/%plugin_name%/app/components/maglev/content/%table_name%.rb.tt new file mode 100644 index 00000000..f5aee405 --- /dev/null +++ b/lib/generators/maglev/templates/setting_type/packages/%plugin_name%/app/components/maglev/content/%table_name%.rb.tt @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +module Maglev + module Content + class <%= class_name %> < Maglev::Content::Base + # TODO: write methods here that will be exposed to the section template + end + end \ No newline at end of file diff --git a/lib/generators/maglev/templates/setting_type/packages/%plugin_name%/app/frontend/editor/components/kit/%component_name%-input.vue.tt b/lib/generators/maglev/templates/setting_type/packages/%plugin_name%/app/frontend/editor/components/kit/%component_name%-input.vue.tt new file mode 100644 index 00000000..d1075bb2 --- /dev/null +++ b/lib/generators/maglev/templates/setting_type/packages/%plugin_name%/app/frontend/editor/components/kit/%component_name%-input.vue.tt @@ -0,0 +1,31 @@ + + + diff --git a/lib/generators/maglev/templates/setting_type/packages/%plugin_name%/app/models/maglev/setting_types/%table_name%.rb.tt b/lib/generators/maglev/templates/setting_type/packages/%plugin_name%/app/models/maglev/setting_types/%table_name%.rb.tt new file mode 100644 index 00000000..f8c59962 --- /dev/null +++ b/lib/generators/maglev/templates/setting_type/packages/%plugin_name%/app/models/maglev/setting_types/%table_name%.rb.tt @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +# rubocop:disable Style/ClassAndModuleChildren +class Maglev::SettingTypes::<%= class_name %> < Maglev::SettingTypes::Base + # def cast_value(value) + # value + # end + + # # rubocop:disable Lint/UnusedMethodArgument + # def default_for(label:, default:) + # default + # end + # # rubocop:enable Lint/UnusedMethodArgument + + # def content_class + # @content_class ||= "Maglev::Content::#{self.class.name.demodulize}".constantize + # end +end +# rubocop:enable Style/ClassAndModuleChildren diff --git a/lib/maglev.rb b/lib/maglev.rb index a6b5a291..a8cecd57 100644 --- a/lib/maglev.rb +++ b/lib/maglev.rb @@ -3,6 +3,7 @@ require_relative 'maglev/version' require_relative 'maglev/engine' require_relative 'maglev/config' +require_relative 'maglev/plugins' require_relative 'maglev/errors' require_relative 'maglev/i18n' require_relative 'maglev/preview_constraint' @@ -69,5 +70,17 @@ def uuid_as_primary_key? def config_klass ::Maglev::Config end + + def plugins + @plugins ||= Maglev::Plugins.new + end + + def register_plugin(id:, root_path:, name: nil, version: nil) + plugins.register(id:, name:, root_path:, version:) + end + + def register_setting_type(id:, klass: nil) + ::Maglev::SettingTypeRegistry.register(id:, klass:) + end end end diff --git a/lib/maglev/engine.rb b/lib/maglev/engine.rb index f4acd5ac..2785bafa 100644 --- a/lib/maglev/engine.rb +++ b/lib/maglev/engine.rb @@ -39,10 +39,14 @@ class Engine < ::Rails::Engine Rails.application.config.i18n.load_path += Dir["#{config.root}/config/locales/**/*.yml"] end + initializer 'maglev.plugins' do + Maglev.plugins.install! + end + delegate :vite_ruby, to: :class def self.vite_ruby - @vite_ruby ||= ::ViteRuby.new(root: root, mode: Rails.env) + @vite_ruby ||= ::ViteRuby.new(root:, mode: Rails.env) end # Serves the engine's vite-ruby when requested @@ -78,7 +82,7 @@ def self.vite_ruby app.middleware.insert_before 0, ViteRuby::DevServerProxy, ssl_verify_none: true, - vite_ruby: vite_ruby + vite_ruby: end end diff --git a/lib/maglev/i18n.rb b/lib/maglev/i18n.rb index 58fa9745..66f5235c 100644 --- a/lib/maglev/i18n.rb +++ b/lib/maglev/i18n.rb @@ -33,7 +33,7 @@ def current_locale=(locale) end def with_locale(locale, &block) - Current.set(locale: locale, &block) + Current.set(locale:, &block) end end diff --git a/lib/maglev/plugins.rb b/lib/maglev/plugins.rb new file mode 100644 index 00000000..2d316abe --- /dev/null +++ b/lib/maglev/plugins.rb @@ -0,0 +1,130 @@ +# frozen_string_literal: true + +module Maglev + class Plugins + def initialize + @plugins = {} + end + + def empty? + @plugins.empty? + end + + def size + @plugins.size + end + + def find(id) + @plugins[id.to_sym] + end + + def each(&block) + @plugins.values.each(&block) + end + + def map(&block) + @plugins.values.map(&block) + end + + def register(id:, root_path:, name: nil, version: nil) + raise_if_already_registered_error!(id) + @plugins[id.to_sym] = Instance.new(id:, name:, root_path:, version:) + end + + def install! + each(&:install!) + end + + def uninstall! + each(&:uninstall!) + end + + def single_uninstall!(id) + raise_if_unknown_error!(id) + find(id).uninstall! + end + + private + + def raise_if_already_registered_error!(id) + return if find(id).nil? + + raise PluginAlreadyRegisteredError, "The #{id} Maglev plugin has been already registered." + end + + def raise_if_unknown_error!(id) + return unless find(id).nil? + + raise UnknownPluginError.new, "There is no #{id} registered Maglev plugin." + end + + class Instance + attr_reader :id, :name, :root_path, :version + + def initialize(id:, root_path:, name: nil, version: nil) + @id = id + @name = name || id + @root_path = root_path + @version = version + end + + def install! + return false if already_installed? + + Rails.logger.info "[Maglev] 😎 Installing the \"#{name}\" plugin (id: #{id})" + + # the package.json of the engine now will have access + # to the JS code of the plugin + File.symlink(root_path, yarn_workspace_path) + + write_frontend_setup_file + + true + end + + def uninstall! + return false unless already_installed? + + Rails.logger.info "[Maglev] 👋 Un-installing the \"#{name}\" plugin (id: #{id})" + + File.unlink(yarn_workspace_path) + File.delete(frontend_plugin_path) + + true + end + + def already_installed? + File.symlink?(yarn_workspace_path) + end + + private + + def write_frontend_setup_file + # Run the setup function of the plugin when the Editor UI starts + File.open(frontend_plugin_path, 'w+') do |f| + f.write( + <<-JAVASCRIPT + import setup from "#{id}.js" + setup() + JAVASCRIPT + ) + end + end + + def frontend_plugin_path + engine_path.join('app', 'frontend', 'editor', 'plugins', "#{id}.js") + end + + def yarn_workspace_path + engine_path.join('plugins', id) + end + + def engine_path + Maglev::Engine.root + end + end + + class UnknownPluginError < StandardError; end + class PluginAlreadyRegisteredError < StandardError; end + end +end diff --git a/lib/maglev/preview_constraint.rb b/lib/maglev/preview_constraint.rb index 2b394028..fb9756a5 100644 --- a/lib/maglev/preview_constraint.rb +++ b/lib/maglev/preview_constraint.rb @@ -4,7 +4,7 @@ module Maglev class PreviewConstraint - CRAWLER_USER_AGENTS = /Googlebot|Twitterbot|facebookexternalhit|LinkedInBot/o.freeze + CRAWLER_USER_AGENTS = /Googlebot|Twitterbot|facebookexternalhit|LinkedInBot/o attr_reader :preview_host diff --git a/lib/maglev/theme_filesystem_loader.rb b/lib/maglev/theme_filesystem_loader.rb index 1189e658..5911dc12 100644 --- a/lib/maglev/theme_filesystem_loader.rb +++ b/lib/maglev/theme_filesystem_loader.rb @@ -41,14 +41,14 @@ def load_sections(theme, source_path) def build_section(theme, section_id, attributes) section = Maglev::Section.build( - attributes.merge(id: section_id, theme: theme) + attributes.merge(id: section_id, theme:) ) section.screenshot_timestamp = find_section_screenshot_timestamp(theme, section) section end def find_section_screenshot_timestamp(theme, section) - path = fetch_section_screenshot_path.call(theme: theme, section: section, absolute: true) + path = fetch_section_screenshot_path.call(theme:, section:, absolute: true) File.exist?(path) ? File.mtime(path).to_i : nil end diff --git a/lib/tasks/maglev_tasks.rake b/lib/tasks/maglev_tasks.rake index 1cc17ad3..db53d4f7 100644 --- a/lib/tasks/maglev_tasks.rake +++ b/lib/tasks/maglev_tasks.rake @@ -6,6 +6,10 @@ def within_engine_folder(&block) Dir.chdir(File.join(__dir__, '..', '..'), &block) end +def within_plugin_folder(plugin, &block) + Dir.chdir(plugin.root_path, &block) +end + namespace :maglev do desc 'Create site' task create_site: :environment do @@ -31,7 +35,7 @@ namespace :maglev do locales = (ARGV[1..] || []).map do |arg| label, prefix = arg.split(':') - Maglev::Site::Locale.new(label: label, prefix: prefix) + Maglev::Site::Locale.new(label:, prefix:) end if !locales.empty? && locales.any? { |locale| !locale.valid? } @@ -48,13 +52,20 @@ namespace :maglev do service = Maglev::ChangeSiteLocales.new begin - service.call(site: site, locales: locales) + service.call(site:, locales:) puts 'Success! 🎉🎉🎉' rescue StandardError => e puts "[Error] #{e.message}" end end + namespace :plugins do + desc 'Uninstall all the registered plugins' + task uninstall_all: :environment do + Maglev.plugins.uninstall! + end + end + namespace :vite do desc 'Bundle frontend entrypoints using ViteRuby' task build: :'vite:verify_install' do @@ -71,20 +82,38 @@ namespace :maglev do end end - desc 'Ensure build dependencies like Vite are installed before bundling' - task install_dependencies: :environment do + desc 'Ensure build dependencies like Vite + Maglev core and plugins are installed before bundling' + task install_dependencies: %i[install_plugins_dependencies install_engine_dependencies] + + desc 'Ensure build dependencies like Vite + MaglevCore are installed before bundling' + task install_engine_dependencies: :environment do within_engine_folder do install_dev_dependencies = ENV['VITE_RUBY_SKIP_INSTALL_DEV_DEPENDENCIES'] == 'true' # rubocop:disable Style/StringHashKeys install_env_args = install_dev_dependencies ? {} : { 'NODE_ENV' => 'development' } # rubocop:enable Style/StringHashKeys cmd = Maglev::Engine.vite_ruby.commands.legacy_npm_version? ? 'npx ci --yes' : 'npx --yes ci' + cmd = 'yarn install' unless Maglev.plugins.empty? result = system(install_env_args, cmd) # Fallback to `yarn` if `npx` is not available. system(install_env_args, 'yarn install --frozen-lockfile') if result.nil? end end + desc 'Ensure plugin build dependencies are installed before bundling' + task install_plugins_dependencies: :environment do + install_dev_dependencies = ENV['VITE_RUBY_SKIP_INSTALL_DEV_DEPENDENCIES'] == 'true' + # rubocop:disable Style/StringHashKeys + install_env_args = install_dev_dependencies ? {} : { 'NODE_ENV' => 'development' } + # rubocop:enable Style/StringHashKeys + cmd = 'yarn install' + Maglev.plugins.each do |plugin| + within_plugin_folder(plugin) do + system(install_env_args, cmd) + end + end + end + desc 'Verify if ViteRuby is properly installed in the app' task verify_install: :environment do within_engine_folder do diff --git a/maglevcms.gemspec b/maglevcms.gemspec index 9af54a66..0e5969c5 100644 --- a/maglevcms.gemspec +++ b/maglevcms.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |spec| MaglevCMS integrates a powerful website/page builder with a polished UX/UI into your Ruby on Rails application, backed by a flexible and robust CMS engine. DOC spec.license = 'MIT' - spec.required_ruby_version = '>= 2.6' + spec.required_ruby_version = '>= 3.1' # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host' # to allow pushing to a single host or delete this section to allow pushing to any host. diff --git a/package.json b/package.json index 23d2f298..2717cfc4 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "jsdom": "^23.0.0", "postcss": "^8.4.40", "prettier": "^3.1.0", - "sass": "^1.69.5", + "sass": "^1.79.4", "tailwindcss": "^3.4.1", "vite": "^5.4.5", "vite-plugin-ruby": "^5.1.0", @@ -54,5 +54,8 @@ "async": "^2.6.4", "vite": "^5.4.5" }, + "workspaces": [ + "plugins/*" + ], "packageManager": "yarn@4.4.0" } diff --git a/plugins/.keep b/plugins/.keep new file mode 100644 index 00000000..4f07f1ca --- /dev/null +++ b/plugins/.keep @@ -0,0 +1 @@ +.keep \ No newline at end of file diff --git a/spec/components/maglev/content/collection_item_spec.rb b/spec/components/maglev/content/collection_item_spec.rb index 75d08e9e..be93bf29 100644 --- a/spec/components/maglev/content/collection_item_spec.rb +++ b/spec/components/maglev/content/collection_item_spec.rb @@ -21,7 +21,7 @@ end context 'the content references the model instance' do - let(:content) { { item: item } } + let(:content) { { item: } } it { is_expected.to eq(true) } end @@ -54,7 +54,7 @@ end context 'the content references the model instance' do - let(:content) { { item: item } } + let(:content) { { item: } } it { expect(subject).to eq(<<~HTML diff --git a/spec/components/maglev/content/image_spec.rb b/spec/components/maglev/content/image_spec.rb index 72340f16..7a96b826 100644 --- a/spec/components/maglev/content/image_spec.rb +++ b/spec/components/maglev/content/image_spec.rb @@ -4,9 +4,9 @@ describe Maglev::Content::Image do let(:asset_host) { nil } - let(:config) { instance_double('MaglevConfig', asset_host: asset_host) } + let(:config) { instance_double('MaglevConfig', asset_host:) } let(:site) { instance_double('MaglevSite') } - let(:section_component) { double('Maglev::SectionComponent', site: site, config: config) } + let(:section_component) { double('Maglev::SectionComponent', site:, config:) } let(:image) { described_class.new(section_component, content, setting) } context 'content is a string' do diff --git a/spec/components/maglev/section_component_spec.rb b/spec/components/maglev/section_component_spec.rb index b33fef2c..08d465ed 100644 --- a/spec/components/maglev/section_component_spec.rb +++ b/spec/components/maglev/section_component_spec.rb @@ -6,7 +6,7 @@ let(:theme) { build(:theme) } let(:page) { build(:page, :with_navbar).tap { |page| page.prepare_sections(theme) } } let(:config) { instance_double('MaglevConfig', asset_host: 'https://assets.maglev.local') } - let(:page_component) { instance_double('PageCommponent', page: page, config: config) } + let(:page_component) { instance_double('PageCommponent', page:, config:) } let(:attributes) { page.sections[1].deep_symbolize_keys } let(:definition) { build(:section, category: 'headers') } let(:view_context) { FooController.new.view_context } @@ -14,9 +14,9 @@ let(:component) do described_class.new( parent: page_component, - attributes: attributes, - definition: definition, - templates_root_path: templates_root_path, + attributes:, + definition:, + templates_root_path:, rendering_mode: :preview ).tap { |c| c.view_context = view_context } end diff --git a/spec/dummy/packages/bar/index.js b/spec/dummy/packages/bar/index.js new file mode 100644 index 00000000..84bf87c5 --- /dev/null +++ b/spec/dummy/packages/bar/index.js @@ -0,0 +1,3 @@ +export default function() { + console.log('👋 Hello from the Maglev Bar plugin v0.0.1') +} \ No newline at end of file diff --git a/spec/dummy/packages/foo/index.js b/spec/dummy/packages/foo/index.js new file mode 100644 index 00000000..7688b8f5 --- /dev/null +++ b/spec/dummy/packages/foo/index.js @@ -0,0 +1,3 @@ +export default function() { + console.log('👋 Hello from the Maglev Foo plugin v0.0.1') +} \ No newline at end of file diff --git a/spec/factories/maglev/themes.rb b/spec/factories/maglev/themes.rb index 937d1cd9..c47f4a54 100644 --- a/spec/factories/maglev/themes.rb +++ b/spec/factories/maglev/themes.rb @@ -18,7 +18,7 @@ ] theme.sections = Maglev::Section::Store.new([ Maglev::Section.build({ - theme: theme, + theme:, name: 'Navbar', id: 'navbar', category: 'headers', @@ -36,7 +36,7 @@ ] }.with_indifferent_access), Maglev::Section.build({ - theme: theme, + theme:, name: 'Jumbotron', id: 'jumbotron', category: 'headers', @@ -48,7 +48,7 @@ blocks: [] }.with_indifferent_access), Maglev::Section.build({ - theme: theme, + theme:, name: 'FeaturedProduct', id: 'featured_product', category: 'features', @@ -59,7 +59,7 @@ blocks: [] }.with_indifferent_access), Maglev::Section.build({ - theme: theme, + theme:, name: 'Showcase', id: 'showcase', category: 'features', @@ -79,7 +79,7 @@ ] }.with_indifferent_access), Maglev::Section.build({ - theme: theme, + theme:, name: 'Footer', id: 'footer', category: 'footers', diff --git a/spec/lib/generators/maglev/plugin_generator_spec.rb b/spec/lib/generators/maglev/plugin_generator_spec.rb new file mode 100644 index 00000000..5a97f754 --- /dev/null +++ b/spec/lib/generators/maglev/plugin_generator_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'rails_helper' +require 'generator_spec' +require 'generators/maglev/plugin_generator' + +destination_path = File.expand_path('../tmp', __dir__) + +describe Maglev::PluginGenerator, type: :generator do + destination destination_path + + arguments %w[maglev_dummy] + + before(:all) do + prepare_destination + FileUtils.touch(File.join(destination_path, 'Gemfile')) + run_generator + end + + it 'creates a new local Rails engine' do + assert_file 'packages/maglev_dummy/maglev_dummy.gemspec' + assert_file 'packages/maglev_dummy/index.js', /export default function\(\) \{/ + assert_file 'packages/maglev_dummy/package.json' + assert_file 'packages/maglev_dummy/lib/maglev_dummy.rb' + assert_file 'packages/maglev_dummy/lib/maglev_dummy/engine.rb', /register_plugin/ + assert_file 'packages/maglev_dummy/lib/maglev_dummy/version.rb', /0\.0\.1/ + assert_file 'app/frontend/editor/plugins/maglev_dummy.js', /from 'maglev_dummy'/ + end +end diff --git a/spec/lib/generators/maglev/setting_type_generator_spec.rb b/spec/lib/generators/maglev/setting_type_generator_spec.rb new file mode 100644 index 00000000..a4c41f0f --- /dev/null +++ b/spec/lib/generators/maglev/setting_type_generator_spec.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +require 'rails_helper' +require 'generator_spec' +require 'generators/maglev/setting_type_generator' + +destination_path = File.expand_path('../tmp', __dir__) + +describe Maglev::SettingTypeGenerator, type: :generator do + destination destination_path + + arguments %w[radio_button --plugin=maglev_dummy] + + before(:all) do + prepare_destination + plugin_path = File.join(destination_path, 'packages', 'maglev_dummy') + FileUtils.mkdir_p(File.join(plugin_path, 'lib', 'maglev_dummy')) + File.open(File.join(plugin_path, 'lib', 'maglev_dummy', 'engine.rb'), 'w+') do |f| + f.write( +<<-RUBY +module MaglevDummy + class Engine < ::Rails::Engine + isolate_namespace MaglevDummy + end +end +RUBY + ) + end + File.open(File.join(plugin_path, 'index.js'), 'w+') do |f| + f.write( +<<-JAVASCRIPT +export default function() { + console.log('👋 Hello from the <%= human_name %> plugin v0.0.1') +} +JAVASCRIPT + ) + end + run_generator + end + + it 'generates all the files required for a new custom setting type' do + assert_file 'packages/maglev_dummy/app/models/maglev/setting_types/radio_button.rb', /RadioButton < Maglev::SettingTypes::Base/ + assert_file 'packages/maglev_dummy/app/components/maglev/content/radio_button.rb', /class RadioButton < Maglev::Content::Base/ + + assert_file 'packages/maglev_dummy/lib/maglev_dummy/engine.rb', /Maglev\.register_setting_type\(id: :radio_button\)/ + + assert_file 'packages/maglev_dummy/app/frontend/editor/components/kit/radio-button.vue', /name: 'UIKitRadioButtonInput'/ + + assert_file 'packages/maglev_dummy/index.js', /registerInput('radio_button', UIKitRadioButtonInput, (props, _options) => props)/ + end +end diff --git a/spec/lib/i18n_spec.rb b/spec/lib/maglev/i18n_spec.rb similarity index 100% rename from spec/lib/i18n_spec.rb rename to spec/lib/maglev/i18n_spec.rb diff --git a/spec/lib/maglev/plugins_spec.rb b/spec/lib/maglev/plugins_spec.rb new file mode 100644 index 00000000..62f65abc --- /dev/null +++ b/spec/lib/maglev/plugins_spec.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Maglev::Plugins do + let(:plugins) { described_class.new } + let(:engine_path) { File.join(File.dirname(__FILE__), '../../..') } + let(:plugins_path) { File.join(engine_path, 'plugins') } + let(:fake_root_path) { File.dirname(__FILE__) } + + describe '#register' do + subject { plugins.register(id: 'foo', root_path: fake_root_path) } + + it 'adds a plugin into the list of plugins' do + expect { subject }.to change { plugins.size }.from(0).to(1) + end + + context 'a plugin with the same name has been registerd' do + it 'raises an PluginAlreadyRegisteredError error' do + subject + expect do + plugins.register(id: 'foo', root_path: fake_root_path) + end.to raise_error(Maglev::Plugins::PluginAlreadyRegisteredError) + end + end + end + + describe '#empty?' do + subject { plugins.empty? } + + it { is_expected.to eq true } + + context 'a plugin has been registered' do + before { plugins.register(id: 'foo', root_path: fake_root_path) } + + it { is_expected.to eq false } + end + end + + describe '#install!' do + before do + plugins.register(id: 'foo', root_path: Rails.root.join('packages/foo')) + plugins.register(id: 'bar', root_path: Rails.root.join('packages/bar')) + end + + subject { plugins.install! } + + after { plugins.uninstall! } + + it 'installs all the plugins' do + subject + expect(File.symlink?(File.join(plugins_path, 'foo'))).to eq true + expect(File.symlink?(File.join(plugins_path, 'bar'))).to eq true + expect(File.exist?(File.join(engine_path, 'app/frontend/editor/plugins/foo.js'))).to eq true + expect(File.exist?(File.join(engine_path, 'app/frontend/editor/plugins/bar.js'))).to eq true + end + end + + describe '#single_uninstall!' do + before do + plugins.register(id: 'foo', root_path: Rails.root.join('packages/foo')) + plugins.install! + end + + let(:plugin_id) { 'foo' } + + subject { plugins.single_uninstall!(plugin_id) } + + it 'uninstall the plugin' do + expect { subject }.to change { File.symlink?(File.join(plugins_path, 'foo')) }.from(true).to(false) + end + + context 'the plugin has never been registered' do + let(:plugin_id) { 'bar' } + + after { plugins.uninstall! } + + it 'raises an UnknownPluginError error' do + expect { subject }.to raise_error(Maglev::Plugins::UnknownPluginError) + end + end + end +end diff --git a/spec/lib/maglev_spec.rb b/spec/lib/maglev_spec.rb index 22f6d21f..fa72fe72 100644 --- a/spec/lib/maglev_spec.rb +++ b/spec/lib/maglev_spec.rb @@ -36,4 +36,15 @@ expect(described_class.config.favicon).to eq('someicon.ico') end end + + describe '#plugins' do + let!(:original) { described_class.plugins } + + after { described_class.instance_variable_set(:@plugins, original) } + + it 'registers a new plugin' do + described_class.register_plugin(id: 'foo', name: 'Foo', root_path: File.dirname(__FILE__), version: '0.0.1') + expect(described_class.plugins.map(&:id)).to eq(['foo']) + end + end end diff --git a/spec/models/maglev/page/path_spec.rb b/spec/models/maglev/page/path_spec.rb index 7e8eb34f..86db29ab 100644 --- a/spec/models/maglev/page/path_spec.rb +++ b/spec/models/maglev/page/path_spec.rb @@ -29,7 +29,7 @@ describe 'cleaning path' do subject { path.value } - let(:path) { Maglev::PagePath.new(value: value) } + let(:path) { Maglev::PagePath.new(value:) } before { path.valid? } diff --git a/spec/models/maglev/page_path_spec.rb b/spec/models/maglev/page_path_spec.rb index 02df0cfa..094758b0 100644 --- a/spec/models/maglev/page_path_spec.rb +++ b/spec/models/maglev/page_path_spec.rb @@ -32,7 +32,7 @@ it 'allows same canonical in different locale' do Maglev::I18n.with_locale('es') do - expect(page.paths.build(canonical: true, value: value)).to be_valid + expect(page.paths.build(canonical: true, value:)).to be_valid end end end diff --git a/spec/models/maglev/section/setting_spec.rb b/spec/models/maglev/section/setting_spec.rb index be4b62ed..46263c11 100644 --- a/spec/models/maglev/section/setting_spec.rb +++ b/spec/models/maglev/section/setting_spec.rb @@ -34,10 +34,12 @@ it { is_expected.to eq false } end - context 'type must include [text, image, checkbox, link, color, select, collection_item]' do + context 'type is one of the registered types' do %w[text image checkbox link color select collection_item].each do |type| - let(:setting) { build(:section_setting, type: type) } - it { is_expected.to eq true } + describe "#{type} is accepted" do + let(:setting) { build(:section_setting, type:) } + it { is_expected.to eq true } + end end end end diff --git a/spec/models/maglev/setting_type_registry_spec.rb b/spec/models/maglev/setting_type_registry_spec.rb new file mode 100644 index 00000000..ef3127fb --- /dev/null +++ b/spec/models/maglev/setting_type_registry_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Maglev::SettingTypeRegistry do + describe '#types' do + it 'includes core types' do + expect(described_class.types).to eq %i[text image checkbox link color select collection_item icon divider hint] + end + end + + describe '#[]' do + let(:type) { 'text' } + + subject { described_class[type] } + + it 'returns the instance of the setting' do + expect(subject.class).to eq Maglev::SettingTypes::Text + end + + context 'the type doesn\'t exist' do + let(:type) { 'foo' } + + it 'raises an error' do + expect { subject }.to raise_error(Maglev::UnknownSettingTypeError) + end + end + end +end diff --git a/spec/requests/maglev/api/assets_spec.rb b/spec/requests/maglev/api/assets_spec.rb index 2c85e656..b235ac6d 100644 --- a/spec/requests/maglev/api/assets_spec.rb +++ b/spec/requests/maglev/api/assets_spec.rb @@ -74,7 +74,7 @@ it 'work as expected' do expect do - post '/maglev/api/assets', params: params + post '/maglev/api/assets', params: end.to change(Maglev::Asset, :count).by(1) expect(response).to have_http_status(:created) expect(response.location).to eq(maglev.api_asset_path(Maglev::Asset.first)) diff --git a/spec/requests/maglev/api/pages_spec.rb b/spec/requests/maglev/api/pages_spec.rb index 90de7271..da00bab3 100644 --- a/spec/requests/maglev/api/pages_spec.rb +++ b/spec/requests/maglev/api/pages_spec.rb @@ -158,7 +158,7 @@ context 'Given the site has been updated in the meantime' do let(:sections) { [attributes_for(:page, :with_navbar)[:sections][0]] } - let(:site_attributes) { { sections: sections, lock_version: 0 } } + let(:site_attributes) { { sections:, lock_version: 0 } } let(:page_attributes) { { title: 'New title', lock_version: 0 } } it "doesn't update the page in DB" do diff --git a/spec/requests/maglev/editor_spec.rb b/spec/requests/maglev/editor_spec.rb index e6ecec51..c1b77ec5 100644 --- a/spec/requests/maglev/editor_spec.rb +++ b/spec/requests/maglev/editor_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'Maglev::EditorController', type: :request do let(:theme) { build(:theme, :predefined_pages) } - let!(:site) { Maglev::GenerateSite.call(theme: theme) } + let!(:site) { Maglev::GenerateSite.call(theme:) } context 'the editor is not authenticated' do before do diff --git a/spec/requests/maglev/page_preview_spec.rb b/spec/requests/maglev/page_preview_spec.rb index 274fa952..67e30334 100644 --- a/spec/requests/maglev/page_preview_spec.rb +++ b/spec/requests/maglev/page_preview_spec.rb @@ -5,7 +5,7 @@ RSpec.describe 'Maglev::PagePreviewController', type: :request do let(:theme) { build(:theme, :predefined_pages) } let!(:site) do - Maglev::GenerateSite.call(theme: theme) + Maglev::GenerateSite.call(theme:) end let(:home_page) { Maglev::Page.first } @@ -46,7 +46,7 @@ describe 'Given Facebook crawls it' do let(:user_agent) { 'facebookexternalhit/1.1' } it 'renders the index page' do - get '/index', headers: headers + get('/index', headers:) expect(response.body).to include('Default - Home') end end @@ -54,7 +54,7 @@ describe 'Given Twitter crawls it' do let(:user_agent) { 'Twitterbot' } it 'renders the index page' do - get '/index', headers: headers + get('/index', headers:) expect(response.body).to include('Default - Home') end end @@ -62,7 +62,7 @@ describe 'Given Google crawls it' do let(:user_agent) { 'Googlebot/2.1' } it 'renders the index page' do - get '/index', headers: headers + get('/index', headers:) expect(response.body).to include('Default - Home') end end @@ -70,7 +70,7 @@ describe 'Given LinkedIn crawls it' do let(:user_agent) { 'LinkedInBot/1.0' } it 'renders the index page' do - get '/index', headers: headers + get('/index', headers:) expect(response.body).to include('Default - Home') end end diff --git a/spec/requests/maglev/sitemap_spec.rb b/spec/requests/maglev/sitemap_spec.rb index 72d6761e..ea070bd3 100644 --- a/spec/requests/maglev/sitemap_spec.rb +++ b/spec/requests/maglev/sitemap_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'Maglev::SitemapController', type: :request do let(:theme) { build(:theme, :predefined_pages) } - let!(:site) { Maglev::GenerateSite.call(theme: theme) } + let!(:site) { Maglev::GenerateSite.call(theme:) } describe 'GET /sitemap (HTML)' do it 'renders an error' do diff --git a/spec/requests/products_spec.rb b/spec/requests/products_spec.rb index 77cc749c..ff14162e 100644 --- a/spec/requests/products_spec.rb +++ b/spec/requests/products_spec.rb @@ -5,7 +5,7 @@ RSpec.describe 'Maglev::PagePreviewController', type: :request do let(:theme) { build(:theme, :predefined_pages) } let!(:site) do - Maglev::GenerateSite.call(theme: theme) + Maglev::GenerateSite.call(theme:) end describe 'rendering sections outside the theme layout' do diff --git a/spec/services/maglev/add_site_locale_spec.rb b/spec/services/maglev/add_site_locale_spec.rb index 9ad9105a..cfa4aca7 100644 --- a/spec/services/maglev/add_site_locale_spec.rb +++ b/spec/services/maglev/add_site_locale_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Maglev::AddSiteLocale do - subject { service.call(site: site, locale: new_locale) } + subject { service.call(site:, locale: new_locale) } let(:site) { create(:site, :with_navbar, locales: [{ label: 'English', prefix: 'en' }]) } let(:service) { described_class.new } @@ -37,6 +37,6 @@ end def build_locale(label, prefix) - Maglev::Site::Locale.new(label: label, prefix: prefix) + Maglev::Site::Locale.new(label:, prefix:) end end diff --git a/spec/services/maglev/app_container_spec.rb b/spec/services/maglev/app_container_spec.rb index 4d439ef5..4e09f25d 100644 --- a/spec/services/maglev/app_container_spec.rb +++ b/spec/services/maglev/app_container_spec.rb @@ -4,8 +4,8 @@ describe Maglev::AppContainer do let(:controller) { double('ApplicationController', site_preview_path: '/maglev/preview') } - let(:context) { Maglev::ServiceContext.new(controller: controller, rendering_mode: :editor) } - let(:container) { Maglev.services(context: context, config: 'Hello world') } + let(:context) { Maglev::ServiceContext.new(controller:, rendering_mode: :editor) } + let(:container) { Maglev.services(context:, config: 'Hello world') } it 'returns the base url' do expect(container.get_base_url.call).to eq '/maglev/preview' diff --git a/spec/services/maglev/change_site_locales_spec.rb b/spec/services/maglev/change_site_locales_spec.rb index df80ede4..bb2d83d5 100644 --- a/spec/services/maglev/change_site_locales_spec.rb +++ b/spec/services/maglev/change_site_locales_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Maglev::ChangeSiteLocales do - subject { service.call(site: site, locales: locales) } + subject { service.call(site:, locales:) } let(:site) { create(:site, locales: [{ label: 'English', prefix: 'en' }]) } let(:service) { described_class.new } @@ -52,6 +52,6 @@ end def build_locale(label, prefix) - Maglev::Site::Locale.new(label: label, prefix: prefix) + Maglev::Site::Locale.new(label:, prefix:) end end diff --git a/spec/services/maglev/clone_page_spec.rb b/spec/services/maglev/clone_page_spec.rb index 0b0dd311..d99fb456 100644 --- a/spec/services/maglev/clone_page_spec.rb +++ b/spec/services/maglev/clone_page_spec.rb @@ -3,11 +3,11 @@ require 'rails_helper' describe Maglev::ClonePage do - subject { service.call(page: page) } + subject { service.call(page:) } let(:site) { create(:site) } let(:fetch_site) { double('FetchSite', call: site) } - let(:service) { described_class.new(fetch_site: fetch_site) } + let(:service) { described_class.new(fetch_site:) } context "the original page doesn't exist yet" do let(:page) { build(:page) } diff --git a/spec/services/maglev/extract_locale_spec.rb b/spec/services/maglev/extract_locale_spec.rb index 5ed4289e..ed354608 100644 --- a/spec/services/maglev/extract_locale_spec.rb +++ b/spec/services/maglev/extract_locale_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Maglev::ExtractLocale do - subject { service.call(params: params, locales: locales) } + subject { service.call(params:, locales:) } let(:service) { described_class.new } let(:params) { { path: 'index' } } diff --git a/spec/services/maglev/fetch_collection_items_spec.rb b/spec/services/maglev/fetch_collection_items_spec.rb index b82796af..a2440b1b 100644 --- a/spec/services/maglev/fetch_collection_items_spec.rb +++ b/spec/services/maglev/fetch_collection_items_spec.rb @@ -9,7 +9,7 @@ config.collections = { products: { model: 'Product', - fetch_method_name: fetch_method_name, + fetch_method_name:, fields: { label: :name, image: :thumbnail_url @@ -18,7 +18,7 @@ } end end - let(:service) { described_class.new(config: config, fetch_site: instance_double('FetchSite', call: nil)) } + let(:service) { described_class.new(config:, fetch_site: instance_double('FetchSite', call: nil)) } describe 'fetching the first N items' do subject { service.call(collection_id: 'products') } diff --git a/spec/services/maglev/fetch_page_spec.rb b/spec/services/maglev/fetch_page_spec.rb index c9d94897..4582aa25 100644 --- a/spec/services/maglev/fetch_page_spec.rb +++ b/spec/services/maglev/fetch_page_spec.rb @@ -4,8 +4,8 @@ describe Maglev::FetchPage do subject do - service.call(path: path, locale: locale, default_locale: default_locale, - fallback_to_default_locale: fallback_to_default_locale) + service.call(path:, locale:, default_locale:, + fallback_to_default_locale:) end let!(:site) { create(:site) } diff --git a/spec/services/maglev/fetch_section_screenshot_url_spec.rb b/spec/services/maglev/fetch_section_screenshot_url_spec.rb index b9a08783..f4196b67 100644 --- a/spec/services/maglev/fetch_section_screenshot_url_spec.rb +++ b/spec/services/maglev/fetch_section_screenshot_url_spec.rb @@ -3,11 +3,11 @@ require 'rails_helper' describe Maglev::FetchSectionScreenshotUrl do - subject { service.call(section: section) } + subject { service.call(section:) } let(:screenshot_path) { '/theme/jumbotron.png' } let(:fetch_section_screenshot_path) { instance_double('FetchSectionScreenshotPath', call: screenshot_path) } - let(:service) { described_class.new(fetch_section_screenshot_path: fetch_section_screenshot_path) } + let(:service) { described_class.new(fetch_section_screenshot_path:) } let(:section) { instance_double('Section', id: 'jumbotron', screenshot_timestamp: 42) } it 'returns the url to the screenshot of the section' do diff --git a/spec/services/maglev/fetch_static_pages_spec.rb b/spec/services/maglev/fetch_static_pages_spec.rb index f78fab5e..f0589262 100644 --- a/spec/services/maglev/fetch_static_pages_spec.rb +++ b/spec/services/maglev/fetch_static_pages_spec.rb @@ -10,7 +10,7 @@ config.static_pages = static_pages end end - let(:service) { described_class.new(config: config) } + let(:service) { described_class.new(config:) } describe 'no static pages in the config' do let(:static_pages) { nil } diff --git a/spec/services/maglev/fetch_style_spec.rb b/spec/services/maglev/fetch_style_spec.rb index 35e1c0da..e1b6b109 100644 --- a/spec/services/maglev/fetch_style_spec.rb +++ b/spec/services/maglev/fetch_style_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Maglev::FetchStyle do - subject { service.call(site: site, theme: theme) } + subject { service.call(site:, theme:) } let!(:site) { create(:site) } let!(:theme) { build(:theme) } diff --git a/spec/services/maglev/generate_site_spec.rb b/spec/services/maglev/generate_site_spec.rb index 97362cef..3c94fa74 100644 --- a/spec/services/maglev/generate_site_spec.rb +++ b/spec/services/maglev/generate_site_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Maglev::GenerateSite do - subject { service.call(theme: theme) } + subject { service.call(theme:) } let(:theme) { build(:theme, :predefined_pages) } let(:service) { described_class.new } diff --git a/spec/services/maglev/get_base_url_spec.rb b/spec/services/maglev/get_base_url_spec.rb index 5ca2aa1c..a21d7179 100644 --- a/spec/services/maglev/get_base_url_spec.rb +++ b/spec/services/maglev/get_base_url_spec.rb @@ -3,13 +3,13 @@ require 'rails_helper' describe Maglev::GetBaseUrl do - subject { service.call(preview_mode: preview_mode) } + subject { service.call(preview_mode:) } let!(:site) { create(:site) } let(:service) do described_class.new( fetch_site: double('FetchSite', call: build(:site)), - context: double('Context', rendering_mode: rendering_mode, controller: controller) + context: double('Context', rendering_mode:, controller:) ) end diff --git a/spec/services/maglev/get_page_fullpath_spec.rb b/spec/services/maglev/get_page_fullpath_spec.rb index 831bb926..80357ac1 100644 --- a/spec/services/maglev/get_page_fullpath_spec.rb +++ b/spec/services/maglev/get_page_fullpath_spec.rb @@ -3,14 +3,14 @@ require 'rails_helper' describe Maglev::GetPageFullpath do - subject { service.call(page: page_or_id, locale: locale) } + subject { service.call(page: page_or_id, locale:) } let(:site) { create(:site) } let(:fetch_site) { double('FetchSite', call: site) } let(:get_base_url) { double('GetBaseUrl', call: '/maglev/preview') } let(:page_or_id) { page.id } let(:locale) { :en } - let(:service) { described_class.new(fetch_site: fetch_site, get_base_url: get_base_url) } + let(:service) { described_class.new(fetch_site:, get_base_url:) } context "the page doesn't exist yet" do let(:page_or_id) { 42 } @@ -21,7 +21,7 @@ end context 'we pass a path' do - subject { service.call(path: 'index', locale: locale) } + subject { service.call(path: 'index', locale:) } it 'returns the fullpath to the index page' do expect(subject).to eq '/maglev/preview' @@ -59,7 +59,7 @@ end context 'we pass the existing page itself' do - subject { service.call(page: create(:page, path: 'hello-world'), locale: locale) } + subject { service.call(page: create(:page, path: 'hello-world'), locale:) } it 'returns the fullpath to the page' do expect(subject).to eq '/maglev/preview/hello-world' @@ -67,7 +67,7 @@ end context 'we pass a static page' do - subject { service.call(page: page, locale: locale) } + subject { service.call(page:, locale:) } let(:page) do Maglev::StaticPage.new(id: '233456abcdef', path_translations: { fr: 'bonjour-le-monde', en: 'hello-world' }) diff --git a/spec/services/maglev/get_page_section_names_spec.rb b/spec/services/maglev/get_page_section_names_spec.rb index 7ec16ea0..66047244 100644 --- a/spec/services/maglev/get_page_section_names_spec.rb +++ b/spec/services/maglev/get_page_section_names_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Maglev::GetPageSectionNames do - subject { service.call(page: page) } + subject { service.call(page:) } let(:theme) { build(:theme) } let(:service) { described_class.new(fetch_theme: double('FetchTheme', call: theme)) } diff --git a/spec/services/maglev/get_page_sections_spec.rb b/spec/services/maglev/get_page_sections_spec.rb index 82169adc..aad9fc07 100644 --- a/spec/services/maglev/get_page_sections_spec.rb +++ b/spec/services/maglev/get_page_sections_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Maglev::GetPageSections do - subject { service.call(page: page, locale: :en) } + subject { service.call(page:, locale: :en) } let(:site) { create(:site, :with_navbar) } let(:get_page_fullpath) { double('GetPageFullPath', call: nil) } @@ -12,8 +12,8 @@ described_class.new( fetch_site: double('FetchSite', call: site), fetch_theme: double('FetchTheme', call: build(:theme)), - get_page_fullpath: get_page_fullpath, - fetch_collection_items: fetch_collection_items + get_page_fullpath:, + fetch_collection_items: ) end diff --git a/spec/services/maglev/persist_page_spec.rb b/spec/services/maglev/persist_page_spec.rb index 394f0522..6c7be872 100644 --- a/spec/services/maglev/persist_page_spec.rb +++ b/spec/services/maglev/persist_page_spec.rb @@ -3,11 +3,11 @@ require 'rails_helper' describe Maglev::PersistPage do - subject { service.call(page: page, page_attributes: page_attributes, site: site, site_attributes: site_attributes) } + subject { service.call(page:, page_attributes:, site:, site_attributes:) } let(:site) { create(:site) } let(:fetch_theme) { double('FetchTheme', call: build(:theme)) } - let(:service) { described_class.new(fetch_theme: fetch_theme) } + let(:service) { described_class.new(fetch_theme:) } let(:site_attributes) { nil } context 'brand new page' do diff --git a/spec/services/maglev/persist_section_screenshot_spec.rb b/spec/services/maglev/persist_section_screenshot_spec.rb index b2d084d0..4da9e182 100644 --- a/spec/services/maglev/persist_section_screenshot_spec.rb +++ b/spec/services/maglev/persist_section_screenshot_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Maglev::PersistSectionScreenshot do - subject { service.call(base64_image: base64_image, section_id: 'jumbotron') } + subject { service.call(base64_image:, section_id: 'jumbotron') } before { FileUtils.rm_rf(Rails.root.join('public/theme')) } @@ -15,7 +15,7 @@ let(:service) do described_class.new( fetch_theme: instance_double('FetchTheme', call: theme), - fetch_section_screenshot_path: fetch_section_screenshot_path + fetch_section_screenshot_path: ) end diff --git a/spec/services/maglev/search_pages_spec.rb b/spec/services/maglev/search_pages_spec.rb index 4311078c..53c0000d 100644 --- a/spec/services/maglev/search_pages_spec.rb +++ b/spec/services/maglev/search_pages_spec.rb @@ -3,14 +3,14 @@ require 'rails_helper' describe Maglev::SearchPages do - subject { service.call(id: page_id, q: q, content_locale: content_locale, default_locale: default_locale) } + subject { service.call(id: page_id, q:, content_locale:, default_locale:) } let(:site) { create(:site) } let(:fetch_site) { double('FetchSite', call: site) } let(:fetch_static_pages) { double('FetchStaticPages', call: [build(:static_page)]) } let(:content_locale) { 'en' } let(:default_locale) { 'en' } - let(:service) { described_class.new(fetch_site: fetch_site, fetch_static_pages: fetch_static_pages) } + let(:service) { described_class.new(fetch_site:, fetch_static_pages:) } let!(:persisted_pages) { [create(:page), create(:page, title: 'Features', path: 'features')] } diff --git a/spec/services/maglev/setup_pages_spec.rb b/spec/services/maglev/setup_pages_spec.rb index d694a8a4..2a1b03b1 100644 --- a/spec/services/maglev/setup_pages_spec.rb +++ b/spec/services/maglev/setup_pages_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Maglev::SetupPages do - subject { service.call(site: site, theme: theme) } + subject { service.call(site:, theme:) } let(:service) { described_class.new } let(:site) { build(:site) } diff --git a/tailwind.config.js b/tailwind.config.js index 30262c93..519fd52c 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -11,7 +11,8 @@ module.exports = { './**/*.html.erb', './app/helpers/**/*.rb', './app/javascript/**/*.{js,vue}', - './app/frontend/**/*.{js,vue}' + './app/frontend/**/*.{js,vue}', + './plugins/*/app/frontend/**/*.{js,vue}' ].concat(proConfig.content), theme: { extend: { diff --git a/yarn.lock b/yarn.lock index 15ac493d..0388ff62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,13 +5,6 @@ __metadata: version: 8 cacheKey: 10c0 -"@aashutoshrathi/word-wrap@npm:^1.2.3": - version: 1.2.6 - resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" - checksum: 10c0/53c2b231a61a46792b39a0d43bc4f4f776bb4542aa57ee04930676802e5501282c2fc8aac14e4cd1f1120ff8b52616b6ff5ab539ad30aa2277d726444b71619f - languageName: node - linkType: hard - "@alloc/quick-lru@npm:^5.2.0": version: 5.2.0 resolution: "@alloc/quick-lru@npm:5.2.0" @@ -30,46 +23,48 @@ __metadata: languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-string-parser@npm:7.24.8" - checksum: 10c0/6361f72076c17fabf305e252bf6d580106429014b3ab3c1f5c4eb3e6d465536ea6b670cc0e9a637a77a9ad40454d3e41361a2909e70e305116a23d68ce094c08 +"@babel/helper-string-parser@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-string-parser@npm:7.25.7" + checksum: 10c0/73ef2ceb81f8294678a0afe8ab0103729c0370cac2e830e0d5128b03be5f6a2635838af31d391d763e3c5a4460ed96f42fd7c9b552130670d525be665913bc4c languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-identifier@npm:7.24.7" - checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651 +"@babel/helper-validator-identifier@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-validator-identifier@npm:7.25.7" + checksum: 10c0/07438e5bf01ab2882a15027fdf39ac3b0ba1b251774a5130917907014684e2f70fef8fd620137ca062c4c4eedc388508d2ea7a3a7d9936a32785f4fe116c68c0 languageName: node linkType: hard "@babel/parser@npm:^7.23.5": - version: 7.24.1 - resolution: "@babel/parser@npm:7.24.1" + version: 7.25.7 + resolution: "@babel/parser@npm:7.25.7" + dependencies: + "@babel/types": "npm:^7.25.7" bin: parser: ./bin/babel-parser.js - checksum: 10c0/d2a8b99aa5f33182b69d5569367403a40e7c027ae3b03a1f81fd8ac9b06ceb85b31f6ee4267fb90726dc2ac99909c6bdaa9cf16c379efab73d8dfe85cee32c50 + checksum: 10c0/b771469bb6b636c18a8d642b9df3c73913c3860a979591e1a29a98659efd38b81d3e393047b5251fe382d4c82c681c12da9ce91c98d69316d2604d155a214bcf languageName: node linkType: hard "@babel/runtime@npm:^7.13.10": - version: 7.24.1 - resolution: "@babel/runtime@npm:7.24.1" + version: 7.25.7 + resolution: "@babel/runtime@npm:7.25.7" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/500c6a99ddd84f37c7bc5dbc84777af47b1372b20e879941670451d55484faf18a673c5ebee9ca2b0f36208a729417873b35b1b92e76f811620f6adf7b8cb0f1 + checksum: 10c0/86b7829d2fc9343714a9afe92757cf96c4dc799006ca61d73cda62f4b9e29bfa1ce36794955bc6cb4c188f5b10db832c949339895e1bbe81a69022d9d578ce29 languageName: node linkType: hard -"@babel/types@npm:^7.8.3": - version: 7.25.2 - resolution: "@babel/types@npm:7.25.2" +"@babel/types@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/types@npm:7.25.7" dependencies: - "@babel/helper-string-parser": "npm:^7.24.8" - "@babel/helper-validator-identifier": "npm:^7.24.7" + "@babel/helper-string-parser": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.7" to-fast-properties: "npm:^2.0.0" - checksum: 10c0/e489435856be239f8cc1120c90a197e4c2865385121908e5edb7223cfdff3768cba18f489adfe0c26955d9e7bbb1fb10625bc2517505908ceb0af848989bd864 + checksum: 10c0/e03e1e2e08600fa1e8eb90632ac9c253dd748176c8d670d85f85b0dc83a0573b26ae748a1cbcb81f401903a3d95f43c3f4f8d516a5ed779929db27de56289633 languageName: node linkType: hard @@ -246,9 +241,9 @@ __metadata: linkType: hard "@eslint-community/regexpp@npm:^4.6.1": - version: 4.10.0 - resolution: "@eslint-community/regexpp@npm:4.10.0" - checksum: 10c0/c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4 + version: 4.11.1 + resolution: "@eslint-community/regexpp@npm:4.11.1" + checksum: 10c0/fbcc1cb65ef5ed5b92faa8dc542e035269065e7ebcc0b39c81a4fe98ad35cfff20b3c8df048641de15a7757e07d69f85e2579c1a5055f993413ba18c055654f8 languageName: node linkType: hard @@ -269,21 +264,21 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.57.0": - version: 8.57.0 - resolution: "@eslint/js@npm:8.57.0" - checksum: 10c0/9a518bb8625ba3350613903a6d8c622352ab0c6557a59fe6ff6178bf882bf57123f9d92aa826ee8ac3ee74b9c6203fe630e9ee00efb03d753962dcf65ee4bd94 +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.14": - version: 0.11.14 - resolution: "@humanwhocodes/config-array@npm:0.11.14" +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.2" + "@humanwhocodes/object-schema": "npm:^2.0.3" debug: "npm:^4.3.1" minimatch: "npm:^3.0.5" - checksum: 10c0/66f725b4ee5fdd8322c737cb5013e19fac72d4d69c8bf4b7feb192fcb83442b035b92186f8e9497c220e58b2d51a080f28a73f7899bc1ab288c3be172c467541 + checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e languageName: node linkType: hard @@ -294,10 +289,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2": - version: 2.0.2 - resolution: "@humanwhocodes/object-schema@npm:2.0.2" - checksum: 10c0/6fd83dc320231d71c4541d0244051df61f301817e9f9da9fd4cb7e44ec8aacbde5958c1665b0c419401ab935114fdf532a6ad5d4e7294b1af2f347dd91a6983f +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c languageName: node linkType: hard @@ -349,10 +344,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: 10c0/0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 languageName: node linkType: hard @@ -429,114 +424,114 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.2" +"@rollup/rollup-android-arm-eabi@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.24.0" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-android-arm64@npm:4.21.2" +"@rollup/rollup-android-arm64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-android-arm64@npm:4.24.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-darwin-arm64@npm:4.21.2" +"@rollup/rollup-darwin-arm64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.24.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-darwin-x64@npm:4.21.2" +"@rollup/rollup-darwin-x64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.24.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.2" +"@rollup/rollup-linux-arm-musleabihf@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.24.0" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.2" +"@rollup/rollup-linux-arm64-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.24.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.2" +"@rollup/rollup-linux-arm64-musl@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.24.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.2" +"@rollup/rollup-linux-riscv64-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.24.0" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.2" +"@rollup/rollup-linux-s390x-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.24.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.2" +"@rollup/rollup-linux-x64-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.24.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.2" +"@rollup/rollup-linux-x64-musl@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.24.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.2" +"@rollup/rollup-win32-arm64-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.24.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.2" +"@rollup/rollup-win32-ia32-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.24.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.2" +"@rollup/rollup-win32-x64-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.24.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -596,26 +591,33 @@ __metadata: languageName: node linkType: hard -"@types/chai@npm:*, @types/chai@npm:^4.3.5": - version: 4.3.14 - resolution: "@types/chai@npm:4.3.14" - checksum: 10c0/7712594c1e457cb99c7227d0fe1afcbb900bbd1369494ec2d2b0d79a383057a09ab13d23d7b300287394b99995a8c017aa55e6b9a369b77910bc10310ba504af +"@types/chai@npm:*": + version: 5.0.0 + resolution: "@types/chai@npm:5.0.0" + checksum: 10c0/fcce55f2bbb8485fc860a1dcbac17c1a685b598cfc91a55d37b65b1642b921cf736caa8cce9dcc530830d900f78ab95cf43db4e118db34a5176f252cacd9e1e8 languageName: node linkType: hard -"@types/estree@npm:1.0.5": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d +"@types/chai@npm:^4.3.5": + version: 4.3.20 + resolution: "@types/chai@npm:4.3.20" + checksum: 10c0/4601189d611752e65018f1ecadac82e94eed29f348e1d5430e5681a60b01e1ecf855d9bcc74ae43b07394751f184f6970fac2b5561fc57a1f36e93a0f5ffb6e8 + languageName: node + linkType: hard + +"@types/estree@npm:1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a languageName: node linkType: hard "@types/node@npm:*": - version: 20.12.2 - resolution: "@types/node@npm:20.12.2" + version: 22.7.4 + resolution: "@types/node@npm:22.7.4" dependencies: - undici-types: "npm:~5.26.4" - checksum: 10c0/bb47d115a8f95aadebdd6403fee16d149d6b5568ad53bacc42df34c2d572561e36ba47b05f7f68bada43752d7369b470a90df65b646af7502dfb799a21b4fca7 + undici-types: "npm:~6.19.2" + checksum: 10c0/c22bf54515c78ff3170142c1e718b90e2a0003419dc2d55f79c9c9362edd590a6ab1450deb09ff6e1b32d1b4698da407930b16285e8be3a009ea6cd2695cac01 languageName: node linkType: hard @@ -755,18 +757,20 @@ __metadata: linkType: hard "acorn-walk@npm:^8.2.0": - version: 8.3.2 - resolution: "acorn-walk@npm:8.3.2" - checksum: 10c0/7e2a8dad5480df7f872569b9dccff2f3da7e65f5353686b1d6032ab9f4ddf6e3a2cb83a9b52cf50b1497fd522154dda92f0abf7153290cc79cd14721ff121e52 + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 languageName: node linkType: hard -"acorn@npm:^8.10.0, acorn@npm:^8.11.3, acorn@npm:^8.9.0": - version: 8.11.3 - resolution: "acorn@npm:8.11.3" +"acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.9.0": + version: 8.12.1 + resolution: "acorn@npm:8.12.1" bin: acorn: bin/acorn - checksum: 10c0/3ff155f8812e4a746fee8ecff1f227d527c4c45655bb1fad6347c3cb58e46190598217551b1500f18542d2bbe5c87120cb6927f5a074a59166fbdd9468f0a299 + checksum: 10c0/51fb26cd678f914e13287e886da2d7021f8c2bc0ccc95e03d3e0447ee278dd3b40b9c57dc222acd5881adcf26f3edc40901a4953403232129e3876793cd17386 languageName: node linkType: hard @@ -895,13 +899,13 @@ __metadata: linkType: hard "axios@npm:^1.7.4": - version: 1.7.5 - resolution: "axios@npm:1.7.5" + version: 1.7.7 + resolution: "axios@npm:1.7.7" dependencies: follow-redirects: "npm:^1.15.6" form-data: "npm:^4.0.0" proxy-from-env: "npm:^1.1.0" - checksum: 10c0/1d5daeb28b3d1bb2a7b9f0743433c4bfbeaddc15461e50ebde487eec6c009af2515749d5261096dd430c90cd891bd310bcba5ec3967bae2033c4a307f58a6ad3 + checksum: 10c0/4499efc89e86b0b49ffddc018798de05fab26e3bf57913818266be73279a6418c3ce8f9e934c7d2d707ab8c095e837fc6c90608fb7715b94d357720b5f568af7 languageName: node linkType: hard @@ -961,26 +965,26 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" +"braces@npm:^3.0.3, braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" dependencies: - fill-range: "npm:^7.0.1" - checksum: 10c0/321b4d675791479293264019156ca322163f02dc06e3c4cab33bb15cd43d80b51efef69b0930cfde3acd63d126ebca24cd0544fa6f261e093a0fb41ab9dda381 + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 languageName: node linkType: hard "browserslist@npm:^4.23.3": - version: 4.23.3 - resolution: "browserslist@npm:4.23.3" + version: 4.24.0 + resolution: "browserslist@npm:4.24.0" dependencies: - caniuse-lite: "npm:^1.0.30001646" - electron-to-chromium: "npm:^1.5.4" + caniuse-lite: "npm:^1.0.30001663" + electron-to-chromium: "npm:^1.5.28" node-releases: "npm:^2.0.18" update-browserslist-db: "npm:^1.1.0" bin: browserslist: cli.js - checksum: 10c0/3063bfdf812815346447f4796c8f04601bf5d62003374305fd323c2a463e42776475bcc5309264e39bcf9a8605851e53560695991a623be988138b3ff8c66642 + checksum: 10c0/95e76ad522753c4c470427f6e3c8a4bb5478ff448841e22b3d3e53f89ecaf17b6984666d6c7e715c370f1e7fa0cf684f42e34e554236a8b2fab38ea76b9e4c52 languageName: node linkType: hard @@ -1025,16 +1029,16 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001646": - version: 1.0.30001655 - resolution: "caniuse-lite@npm:1.0.30001655" - checksum: 10c0/fff0c0c3ffcba89828bfa6b99f118e82c064f46f15bb8655b9f2a352a3f552ccac0b87a9fe9532f8c5a29e284aae5579791e196480ec717d11ef1d1a1c2e3ff9 +"caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001663": + version: 1.0.30001667 + resolution: "caniuse-lite@npm:1.0.30001667" + checksum: 10c0/6bc8555a47603e1e76eaef9b185d6fdeeca7d9c20a283f7c32c971eb1b52ea3a80e6ec086920f088f06abe619240f1023a2d3a08b5b1f2f11df1475695e9f71c languageName: node linkType: hard "chai@npm:^4.3.10": - version: 4.4.1 - resolution: "chai@npm:4.4.1" + version: 4.5.0 + resolution: "chai@npm:4.5.0" dependencies: assertion-error: "npm:^1.1.0" check-error: "npm:^1.0.3" @@ -1042,8 +1046,8 @@ __metadata: get-func-name: "npm:^2.0.2" loupe: "npm:^2.3.6" pathval: "npm:^1.1.1" - type-detect: "npm:^4.0.8" - checksum: 10c0/91590a8fe18bd6235dece04ccb2d5b4ecec49984b50924499bdcd7a95c02cb1fd2a689407c19bb854497bde534ef57525cfad6c7fdd2507100fd802fbc2aefbd + type-detect: "npm:^4.1.0" + checksum: 10c0/b8cb596bd1aece1aec659e41a6e479290c7d9bee5b3ad63d2898ad230064e5b47889a3bc367b20100a0853b62e026e2dc514acf25a3c9385f936aa3614d4ab4d languageName: node linkType: hard @@ -1066,7 +1070,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.5.3": +"chokidar@npm:^3.5.3": version: 3.6.0 resolution: "chokidar@npm:3.6.0" dependencies: @@ -1085,6 +1089,15 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^4.0.0": + version: 4.0.1 + resolution: "chokidar@npm:4.0.1" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/4bb7a3adc304059810bb6c420c43261a15bb44f610d77c35547addc84faa0374265c3adc67f25d06f363d9a4571962b02679268c40de07676d260de1986efea9 + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -1163,6 +1176,13 @@ __metadata: languageName: node linkType: hard +"confbox@npm:^0.1.7": + version: 0.1.7 + resolution: "confbox@npm:0.1.7" + checksum: 10c0/18b40c2f652196a833f3f1a5db2326a8a579cd14eacabfe637e4fc8cb9b68d7cf296139a38c5e7c688ce5041bf46f9adce05932d43fde44cf7e012840b5da111 + languageName: node + linkType: hard + "config-chain@npm:^1.1.13": version: 1.1.13 resolution: "config-chain@npm:1.1.13" @@ -1252,11 +1272,11 @@ __metadata: linkType: hard "cssstyle@npm:^4.0.1": - version: 4.0.1 - resolution: "cssstyle@npm:4.0.1" + version: 4.1.0 + resolution: "cssstyle@npm:4.1.0" dependencies: - rrweb-cssom: "npm:^0.6.0" - checksum: 10c0/cadf9a8b23e11f4c6d63f21291096a0b0be868bd4ab9c799daa2c5b18330e39e5281605f01da906e901b42f742df0f3b3645af6465e83377ff7d15a88ee432a0 + rrweb-cssom: "npm:^0.7.1" + checksum: 10c0/05c6597e5d3e0ec6b15221f2c0ce9a0443a46cc50a6089a3ba9ee1ac27f83ff86a445a8f95435137dadd859f091fc61b6d342abaf396d3c910471b5b33cfcbfa languageName: node linkType: hard @@ -1285,14 +1305,14 @@ __metadata: linkType: hard "debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" + version: 4.3.7 + resolution: "debug@npm:4.3.7" dependencies: - ms: "npm:2.1.2" + ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10c0/cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736 + checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b languageName: node linkType: hard @@ -1304,11 +1324,11 @@ __metadata: linkType: hard "deep-eql@npm:^4.1.3": - version: 4.1.3 - resolution: "deep-eql@npm:4.1.3" + version: 4.1.4 + resolution: "deep-eql@npm:4.1.4" dependencies: type-detect: "npm:^4.0.0" - checksum: 10c0/ff34e8605d8253e1bf9fe48056e02c6f347b81d9b5df1c6650a1b0f6f847b4a86453b16dc226b34f853ef14b626e85d04e081b022e20b00cd7d54f079ce9bbdd + checksum: 10c0/264e0613493b43552fc908f4ff87b8b445c0e6e075656649600e1b8a17a57ee03e960156fce7177646e4d2ddaf8e5ee616d76bd79929ff593e5c79e4e5e6c517 languageName: node linkType: hard @@ -1422,10 +1442,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.4": - version: 1.5.13 - resolution: "electron-to-chromium@npm:1.5.13" - checksum: 10c0/1d88ac39447e1d718c4296f92fe89836df4688daf2d362d6c49108136795f05a56dd9c950f1c6715e0395fa037c3b5f5ea686c543fdc90e6d74a005877c45022 +"electron-to-chromium@npm:^1.5.28": + version: 1.5.32 + resolution: "electron-to-chromium@npm:1.5.32" + checksum: 10c0/d0c0c418fae6f7714fb6cfeb8f6a74a9504cf41ed6a4119d5388d94442ee224238c331bacc5917f2c89e3ffebd1b9f870ea5c0951c473ca7e58debef0f3e9137 languageName: node linkType: hard @@ -1553,7 +1573,7 @@ __metadata: languageName: node linkType: hard -"escalade@npm:^3.1.2": +"escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 @@ -1579,20 +1599,20 @@ __metadata: linkType: hard "eslint-plugin-vue@npm:^9.18.1": - version: 9.24.0 - resolution: "eslint-plugin-vue@npm:9.24.0" + version: 9.28.0 + resolution: "eslint-plugin-vue@npm:9.28.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" globals: "npm:^13.24.0" natural-compare: "npm:^1.4.0" nth-check: "npm:^2.1.1" postcss-selector-parser: "npm:^6.0.15" - semver: "npm:^7.6.0" - vue-eslint-parser: "npm:^9.4.2" + semver: "npm:^7.6.3" + vue-eslint-parser: "npm:^9.4.3" xml-name-validator: "npm:^4.0.0" peerDependencies: - eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/4b8a5ec008bd35fe26953c9a916fc285375cdc5fa3025f0c427a16c1032bf38b21c8dfed2d616fa7242efc84bbc133d4872f3fbe5ab0f25e9529370179746f7c + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + checksum: 10c0/97a52895599321b04d0617ae465c66257709e81b1967310cfafe143441a9f7e5ef38e010e51d4f1916e3fe5b0bbadcc18a99297e23225ac757a7262ab0a37e99 languageName: node linkType: hard @@ -1614,14 +1634,14 @@ __metadata: linkType: hard "eslint@npm:^8.54.0": - version: 8.57.0 - resolution: "eslint@npm:8.57.0" + version: 8.57.1 + resolution: "eslint@npm:8.57.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.6.1" "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.0" - "@humanwhocodes/config-array": "npm:^0.11.14" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" "@humanwhocodes/module-importer": "npm:^1.0.1" "@nodelib/fs.walk": "npm:^1.2.8" "@ungap/structured-clone": "npm:^1.2.0" @@ -1657,7 +1677,7 @@ __metadata: text-table: "npm:^0.2.0" bin: eslint: bin/eslint.js - checksum: 10c0/00bb96fd2471039a312435a6776fe1fd557c056755eaa2b96093ef3a8508c92c8775d5f754768be6b1dddd09fdd3379ddb231eeb9b6c579ee17ea7d68000a529 + checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 languageName: node linkType: hard @@ -1673,11 +1693,11 @@ __metadata: linkType: hard "esquery@npm:^1.4.0, esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" + version: 1.6.0 + resolution: "esquery@npm:1.6.0" dependencies: estraverse: "npm:^5.1.0" - checksum: 10c0/a084bd049d954cc88ac69df30534043fb2aee5555b56246493f42f27d1e168f00d9e5d4192e46f10290d312dc30dc7d58994d61a609c579c1219d636996f9213 + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 languageName: node linkType: hard @@ -1781,12 +1801,12 @@ __metadata: languageName: node linkType: hard -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" dependencies: to-regex-range: "npm:^5.0.1" - checksum: 10c0/7cdad7d426ffbaadf45aeb5d15ec675bbd77f7597ad5399e3d2766987ed20bda24d5fac64b3ee79d93276f5865608bb22344a26b9b1ae6c4d00bd94bf611623f + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 languageName: node linkType: hard @@ -1819,22 +1839,22 @@ __metadata: linkType: hard "follow-redirects@npm:^1.15.6": - version: 1.15.6 - resolution: "follow-redirects@npm:1.15.6" + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" peerDependenciesMeta: debug: optional: true - checksum: 10c0/9ff767f0d7be6aa6870c82ac79cf0368cd73e01bbc00e9eb1c2a16fbb198ec105e3c9b6628bb98e9f3ac66fe29a957b9645bcb9a490bb7aa0d35f908b6b85071 + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f languageName: node linkType: hard "foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" dependencies: cross-spawn: "npm:^7.0.0" signal-exit: "npm:^4.0.1" - checksum: 10c0/9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0 + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 languageName: node linkType: hard @@ -1930,7 +1950,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2": +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.3": version: 10.4.5 resolution: "glob@npm:10.4.5" dependencies: @@ -1946,21 +1966,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.3.10, glob@npm:^10.3.3": - version: 10.3.12 - resolution: "glob@npm:10.3.12" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^2.3.6" - minimatch: "npm:^9.0.1" - minipass: "npm:^7.0.4" - path-scurry: "npm:^1.10.2" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/f60cefdc1cf3f958b2bb5823e1b233727f04916d489dc4641d76914f016e6704421e06a83cbb68b0cb1cb9382298b7a88075b844ad2127fc9727ea22b18b0711 - languageName: node - linkType: hard - "glob@npm:^7.1.3": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -2012,7 +2017,7 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0": +"hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -2063,7 +2068,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^7.0.1": +"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.2": version: 7.0.5 resolution: "https-proxy-agent@npm:7.0.5" dependencies: @@ -2073,16 +2078,6 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^7.0.2": - version: 7.0.4 - resolution: "https-proxy-agent@npm:7.0.4" - dependencies: - agent-base: "npm:^7.0.2" - debug: "npm:4" - checksum: 10c0/bc4f7c38da32a5fc622450b6cb49a24ff596f9bd48dcedb52d2da3fa1c1a80e100fb506bd59b326c012f21c863c69b275c23de1a01d0b84db396822fdf25e52b - languageName: node - linkType: hard - "iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -2093,16 +2088,16 @@ __metadata: linkType: hard "ignore@npm:^5.2.0": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard "immutable@npm:^4.0.0": - version: 4.3.5 - resolution: "immutable@npm:4.3.5" - checksum: 10c0/63d2d7908241a955d18c7822fd2215b6e89ff5a1a33cc72cd475b013cbbdef7a705aa5170a51ce9f84a57f62fdddfaa34e7b5a14b33d8a43c65cc6a881d6e894 + version: 4.3.7 + resolution: "immutable@npm:4.3.7" + checksum: 10c0/9b099197081b22f6433003e34929da8ecddbbdc1474cdc8aa3b7669dee4adda349c06143de22def36016d1b6de5322b043eccd7a11db1dad2ca85dad4fff5435 languageName: node linkType: hard @@ -2181,11 +2176,11 @@ __metadata: linkType: hard "is-core-module@npm:^2.13.0": - version: 2.13.1 - resolution: "is-core-module@npm:2.13.1" + version: 2.15.1 + resolution: "is-core-module@npm:2.15.1" dependencies: - hasown: "npm:^2.0.0" - checksum: 10c0/2cba9903aaa52718f11c4896dabc189bab980870aae86a62dc0d5cedb546896770ee946fb14c84b7adf0735f5eaea4277243f1b95f5cefa90054f92fbcac2518 + hasown: "npm:^2.0.2" + checksum: 10c0/53432f10c69c40bfd2fa8914133a68709ff9498c86c3bf5fca3cdf3145a56fd2168cbf4a43b29843a6202a120a5f9c5ffba0a4322e1e3441739bc0b641682612 languageName: node linkType: hard @@ -2268,19 +2263,6 @@ __metadata: languageName: node linkType: hard -"jackspeak@npm:^2.3.6": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/f01d8f972d894cd7638bc338e9ef5ddb86f7b208ce177a36d718eac96ec86638a6efa17d0221b10073e64b45edc2ce15340db9380b1f5d5c5d000cbc517dc111 - languageName: node - linkType: hard - "jackspeak@npm:^3.1.2": version: 3.4.3 resolution: "jackspeak@npm:3.4.3" @@ -2295,11 +2277,11 @@ __metadata: linkType: hard "jiti@npm:^1.21.0": - version: 1.21.0 - resolution: "jiti@npm:1.21.0" + version: 1.21.6 + resolution: "jiti@npm:1.21.6" bin: jiti: bin/jiti.js - checksum: 10c0/7f361219fe6c7a5e440d5f1dba4ab763a5538d2df8708cdc22561cf25ea3e44b837687931fca7cdd8cdd9f567300e90be989dd1321650045012d8f9ed6aab07f + checksum: 10c0/05b9ed58cd30d0c3ccd3c98209339e74f50abd9a17e716f65db46b6a35812103f6bde6e134be7124d01745586bca8cc5dae1d0d952267c3ebe55171949c32e56 languageName: node linkType: hard @@ -2400,13 +2382,6 @@ __metadata: languageName: node linkType: hard -"jsonc-parser@npm:^3.2.0": - version: 3.2.1 - resolution: "jsonc-parser@npm:3.2.1" - checksum: 10c0/ada66dec143d7f9cb0e2d0d29c69e9ce40d20f3a4cb96b0c6efb745025ac7f9ba647d7ac0990d0adfc37a2d2ae084a12009a9c833dbdbeadf648879a99b9df89 - languageName: node - linkType: hard - "keyv@npm:^4.5.3": version: 4.5.4 resolution: "keyv@npm:4.5.4" @@ -2443,9 +2418,9 @@ __metadata: linkType: hard "lilconfig@npm:^3.0.0": - version: 3.1.1 - resolution: "lilconfig@npm:3.1.1" - checksum: 10c0/311b559794546894e3fe176663427326026c1c644145be9e8041c58e268aa9328799b8dfe7e4dd8c6a4ae305feae95a1c9e007db3569f35b42b6e1bc8274754c + version: 3.1.2 + resolution: "lilconfig@npm:3.1.2" + checksum: 10c0/f059630b1a9bddaeba83059db00c672b64dc14074e9f232adce32b38ca1b5686ab737eb665c5ba3c32f147f0002b4bee7311ad0386a9b98547b5623e87071fbe languageName: node linkType: hard @@ -2505,20 +2480,13 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.0.1": +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb languageName: node linkType: hard -"lru-cache@npm:^10.2.0": - version: 10.2.0 - resolution: "lru-cache@npm:10.2.0" - checksum: 10c0/c9847612aa2daaef102d30542a8d6d9b2c2bb36581c1bf0dc3ebf5e5f3352c772a749e604afae2e46873b930a9e9523743faac4e5b937c576ab29196774712ee - languageName: node - linkType: hard - "lru-cache@npm:^4.1.2": version: 4.1.5 resolution: "lru-cache@npm:4.1.5" @@ -2529,21 +2497,12 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 - languageName: node - linkType: hard - "magic-string@npm:^0.30.1": - version: 0.30.8 - resolution: "magic-string@npm:0.30.8" + version: 0.30.11 + resolution: "magic-string@npm:0.30.11" dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.4.15" - checksum: 10c0/51a1f06f678c082aceddfb5943de9b6bdb88f2ea1385a1c2adf116deb73dfcfa50df6c222901d691b529455222d4d68d0b28be5689ac6f69b3baa3462861f922 + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10c0/b9eb370773d0bd90ca11a848753409d8e5309b1ad56d2a1aa49d6649da710a6d2fe7237ad1a643c5a5d3800de2b9946ed9690acdfc00e6cc1aeafff3ab1752c4 languageName: node linkType: hard @@ -2562,7 +2521,7 @@ __metadata: normalizr: "npm:^3.6.1" postcss: "npm:^8.4.40" prettier: "npm:^3.1.0" - sass: "npm:^1.69.5" + sass: "npm:^1.79.4" stimulus: "npm:^2.0.0" stimulus-vite-helpers: "npm:^3.0.1" tailwindcss: "npm:^3.4.1" @@ -2635,12 +2594,12 @@ __metadata: linkType: hard "micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" dependencies: - braces: "npm:^3.0.2" + braces: "npm:^3.0.3" picomatch: "npm:^2.3.1" - checksum: 10c0/3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 languageName: node linkType: hard @@ -2678,15 +2637,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.1": - version: 9.0.4 - resolution: "minimatch@npm:9.0.4" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/2c16f21f50e64922864e560ff97c587d15fd491f65d92a677a344e970fe62aafdbeafe648965fa96d33c061b4d0eabfe0213466203dd793367e7f28658cf6414 - languageName: node - linkType: hard - "minimatch@npm:^9.0.4": version: 9.0.5 resolution: "minimatch@npm:9.0.5" @@ -2763,14 +2713,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.4": - version: 7.0.4 - resolution: "minipass@npm:7.0.4" - checksum: 10c0/6c7370a6dfd257bf18222da581ba89a5eaedca10e158781232a8b5542a90547540b4b9b7e7f490e4cda43acfbd12e086f0453728ecf8c19e0ef6921bc5958ac5 - languageName: node - linkType: hard - -"minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 @@ -2796,22 +2739,22 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^1.2.0, mlly@npm:^1.4.0": - version: 1.6.1 - resolution: "mlly@npm:1.6.1" +"mlly@npm:^1.4.0, mlly@npm:^1.7.1": + version: 1.7.1 + resolution: "mlly@npm:1.7.1" dependencies: acorn: "npm:^8.11.3" pathe: "npm:^1.1.2" - pkg-types: "npm:^1.0.3" - ufo: "npm:^1.3.2" - checksum: 10c0/a7bf26b3d4f83b0f5a5232caa3af44be08b464f562f31c11d885d1bc2d43b7d717137d47b0c06fdc69e1b33ffc09f902b6d2b18de02c577849d40914e8785092 + pkg-types: "npm:^1.1.1" + ufo: "npm:^1.5.3" + checksum: 10c0/d836a7b0adff4d118af41fb93ad4d9e57f80e694a681185280ba220a4607603c19e86c80f9a6c57512b04280567f2599e3386081705c5b5fd74c9ddfd571d0fa languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 languageName: node linkType: hard @@ -2876,7 +2819,7 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^7.0.0": +"nopt@npm:^7.0.0, nopt@npm:^7.2.0": version: 7.2.1 resolution: "nopt@npm:7.2.1" dependencies: @@ -2887,17 +2830,6 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^7.2.0": - version: 7.2.0 - resolution: "nopt@npm:7.2.0" - dependencies: - abbrev: "npm:^2.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/9bd7198df6f16eb29ff16892c77bcf7f0cc41f9fb5c26280ac0def2cf8cf319f3b821b3af83eba0e74c85807cc430a16efe0db58fe6ae1f41e69519f585b6aff - languageName: node - linkType: hard - "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -2952,16 +2884,16 @@ __metadata: linkType: hard "optionator@npm:^0.9.3": - version: 0.9.3 - resolution: "optionator@npm:0.9.3" + version: 0.9.4 + resolution: "optionator@npm:0.9.4" dependencies: - "@aashutoshrathi/word-wrap": "npm:^1.2.3" deep-is: "npm:^0.1.3" fast-levenshtein: "npm:^2.0.6" levn: "npm:^0.4.1" prelude-ls: "npm:^1.2.1" type-check: "npm:^0.4.0" - checksum: 10c0/66fba794d425b5be51353035cf3167ce6cfa049059cbb93229b819167687e0f48d2bc4603fcb21b091c99acb516aae1083624675b15c4765b2e4693a085e959c + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 languageName: node linkType: hard @@ -3009,9 +2941,9 @@ __metadata: linkType: hard "package-json-from-dist@npm:^1.0.0": - version: 1.0.0 - resolution: "package-json-from-dist@npm:1.0.0" - checksum: 10c0/e3ffaf6ac1040ab6082a658230c041ad14e72fabe99076a2081bb1d5d41210f11872403fc09082daf4387fc0baa6577f96c9c0e94c90c394fd57794b66aa4033 + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b languageName: node linkType: hard @@ -3061,16 +2993,6 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.10.2": - version: 1.10.2 - resolution: "path-scurry@npm:1.10.2" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/d723777fbf9627f201e64656680f66ebd940957eebacf780e6cce1c2919c29c116678b2d7dbf8821b3a2caa758d125f4444005ccec886a25c8f324504e48e601 - languageName: node - linkType: hard - "path-scurry@npm:^1.11.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" @@ -3081,7 +3003,7 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^1.1.0, pathe@npm:^1.1.1, pathe@npm:^1.1.2": +"pathe@npm:^1.1.1, pathe@npm:^1.1.2": version: 1.1.2 resolution: "pathe@npm:1.1.2" checksum: 10c0/64ee0a4e587fb0f208d9777a6c56e4f9050039268faaaaecd50e959ef01bf847b7872785c36483fa5cdcdbdfdb31fef2ff222684d4fc21c330ab60395c681897 @@ -3102,17 +3024,10 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0": - version: 1.0.0 - resolution: "picocolors@npm:1.0.0" - checksum: 10c0/20a5b249e331c14479d94ec6817a182fd7a5680debae82705747b2db7ec50009a5f6648d0621c561b0572703f84dbef0858abcbd5856d3c5511426afcb1961f7 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.1": - version: 1.0.1 - resolution: "picocolors@npm:1.0.1" - checksum: 10c0/c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 +"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0": + version: 1.1.0 + resolution: "picocolors@npm:1.1.0" + checksum: 10c0/86946f6032148801ef09c051c6fb13b5cf942eaf147e30ea79edb91dd32d700934edebe782a1078ff859fb2b816792e97ef4dab03d7f0b804f6b01a0df35e023 languageName: node linkType: hard @@ -3137,14 +3052,14 @@ __metadata: languageName: node linkType: hard -"pkg-types@npm:^1.0.3": - version: 1.0.3 - resolution: "pkg-types@npm:1.0.3" +"pkg-types@npm:^1.1.1": + version: 1.2.0 + resolution: "pkg-types@npm:1.2.0" dependencies: - jsonc-parser: "npm:^3.2.0" - mlly: "npm:^1.2.0" - pathe: "npm:^1.1.0" - checksum: 10c0/7f692ff2005f51b8721381caf9bdbc7f5461506ba19c34f8631660a215c8de5e6dca268f23a319dd180b8f7c47a0dc6efea14b376c485ff99e98d810b8f786c4 + confbox: "npm:^0.1.7" + mlly: "npm:^1.7.1" + pathe: "npm:^1.1.2" + checksum: 10c0/111cf6ad4235438821ea195a0d70570b1bd36a71d094d258349027c9c304dea8b4f9669c9f7ce813f9a48a02942fb0d7fe9809127dbe7bb4b18a8de71583a081 languageName: node linkType: hard @@ -3198,23 +3113,23 @@ __metadata: linkType: hard "postcss-nested@npm:^6.0.1": - version: 6.0.1 - resolution: "postcss-nested@npm:6.0.1" + version: 6.2.0 + resolution: "postcss-nested@npm:6.2.0" dependencies: - postcss-selector-parser: "npm:^6.0.11" + postcss-selector-parser: "npm:^6.1.1" peerDependencies: postcss: ^8.2.14 - checksum: 10c0/2a50aa36d5d103c2e471954830489f4c024deed94fa066169101db55171368d5f80b32446b584029e0471feee409293d0b6b1d8ede361f6675ba097e477b3cbd + checksum: 10c0/7f9c3f2d764191a39364cbdcec350f26a312431a569c9ef17408021424726b0d67995ff5288405e3724bb7152a4c92f73c027e580ec91e798800ed3c52e2bc6e languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.15, postcss-selector-parser@npm:^6.0.2": - version: 6.0.16 - resolution: "postcss-selector-parser@npm:6.0.16" +"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.15, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.1.1": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" dependencies: cssesc: "npm:^3.0.0" util-deprecate: "npm:^1.0.2" - checksum: 10c0/0e11657cb3181aaf9ff67c2e59427c4df496b4a1b6a17063fae579813f80af79d444bf38f82eeb8b15b4679653fd3089e66ef0283f9aab01874d885e6cf1d2cf + checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e languageName: node linkType: hard @@ -3235,25 +3150,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.14, postcss@npm:^8.4.23, postcss@npm:^8.4.40": - version: 8.4.41 - resolution: "postcss@npm:8.4.41" +"postcss@npm:^8.4.14, postcss@npm:^8.4.23, postcss@npm:^8.4.40, postcss@npm:^8.4.43": + version: 8.4.47 + resolution: "postcss@npm:8.4.47" dependencies: nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.1" - source-map-js: "npm:^1.2.0" - checksum: 10c0/c1828fc59e7ec1a3bf52b3a42f615dba53c67960ed82a81df6441b485fe43c20aba7f4e7c55425762fd99c594ecabbaaba8cf5b30fd79dfec5b52a9f63a2d690 - languageName: node - linkType: hard - -"postcss@npm:^8.4.43": - version: 8.4.45 - resolution: "postcss@npm:8.4.45" - dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.1" - source-map-js: "npm:^1.2.0" - checksum: 10c0/ad6f8b9b1157d678560373696109745ab97a947d449f8a997acac41c7f1e4c0f3ca4b092d6df1387f430f2c9a319987b1780dbdc27e35800a88cde9b606c1e8f + picocolors: "npm:^1.1.0" + source-map-js: "npm:^1.2.1" + checksum: 10c0/929f68b5081b7202709456532cee2a145c1843d391508c5a09de2517e8c4791638f71dd63b1898dba6712f8839d7a6da046c72a5e44c162e908f5911f57b5f44 languageName: node linkType: hard @@ -3274,11 +3178,11 @@ __metadata: linkType: hard "prettier@npm:^3.1.0": - version: 3.2.5 - resolution: "prettier@npm:3.2.5" + version: 3.3.3 + resolution: "prettier@npm:3.3.3" bin: prettier: bin/prettier.cjs - checksum: 10c0/ea327f37a7d46f2324a34ad35292af2ad4c4c3c3355da07313339d7e554320f66f65f91e856add8530157a733c6c4a897dc41b577056be5c24c40f739f5ee8c6 + checksum: 10c0/b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26 languageName: node linkType: hard @@ -3331,13 +3235,13 @@ __metadata: linkType: hard "prosemirror-commands@npm:^1.1.4": - version: 1.5.2 - resolution: "prosemirror-commands@npm:1.5.2" + version: 1.6.0 + resolution: "prosemirror-commands@npm:1.6.0" dependencies: prosemirror-model: "npm:^1.0.0" prosemirror-state: "npm:^1.0.0" prosemirror-transform: "npm:^1.0.0" - checksum: 10c0/9ff0b525d4bc654ecd41a27f11d8aff52f719ea9a7da2587d9632cfc00bcac46ecc3be628623d1a768e3aa7c7ed2fe291326bb7d63b0a5c0814e53b0a6af5b35 + checksum: 10c0/ba7317917159645980b7cafb04d24c4b3c6cc877b30929c776f51242289930333dc2351f5b55d9a81153331cdfa5c6fe13742b7925d7ec290addadab5ff4affc languageName: node linkType: hard @@ -3365,14 +3269,14 @@ __metadata: linkType: hard "prosemirror-history@npm:^1.1.3": - version: 1.4.0 - resolution: "prosemirror-history@npm:1.4.0" + version: 1.4.1 + resolution: "prosemirror-history@npm:1.4.1" dependencies: prosemirror-state: "npm:^1.2.2" prosemirror-transform: "npm:^1.0.0" prosemirror-view: "npm:^1.31.0" rope-sequence: "npm:^1.3.0" - checksum: 10c0/46299435ac963d5626e6faaca292369b1ae1d8746a5039b63df3aeed767c58d797e7bcfda3b4429b828798f6818e36476cc669f37cb2a40689cb8bf2635984ce + checksum: 10c0/fd2dfae5fb956a8710bb1a4131e9b6d8b92e846bf88fa643bc59ba595c8a835f6695574d5e33bcea9a6e7fbf2eafc7c1b1003abf11326e8571e196cd0f16dcd8 languageName: node linkType: hard @@ -3397,22 +3301,22 @@ __metadata: linkType: hard "prosemirror-model@npm:^1.11.2": - version: 1.19.4 - resolution: "prosemirror-model@npm:1.19.4" + version: 1.23.0 + resolution: "prosemirror-model@npm:1.23.0" dependencies: orderedmap: "npm:^2.0.0" - checksum: 10c0/8a84f9ad869ed925245adeaef4127d03dc5ad8202fea0600e5e35b92f3b5a775d4b3bd6c4eeca338b3d9e7471dfc84a931ca67d6a401991aacbe8a5783fcbd4e + checksum: 10c0/394f8921e723fb5860381cd0b2ff6988025005a6472a886a748cc1ad72055fd194801c1f12f8fbbd54f47f075c95fd23b68ad0811628e649f06f6005fb5790d6 languageName: node linkType: hard "prosemirror-schema-list@npm:^1.1.4": - version: 1.3.0 - resolution: "prosemirror-schema-list@npm:1.3.0" + version: 1.4.1 + resolution: "prosemirror-schema-list@npm:1.4.1" dependencies: prosemirror-model: "npm:^1.0.0" prosemirror-state: "npm:^1.0.0" prosemirror-transform: "npm:^1.7.3" - checksum: 10c0/24364cae857601d75bf5e8ebb59bcd374861f6bff7ea36186bb74fc9d4e323889d16aa76765f68233e81f112727fef35bc8bd4cc0d9d11c7658c755143372b0f + checksum: 10c0/61c664bea2343b13db47d4f5d86dafb453f0102f7b85fa8ad0432e9c7ef5d14134ceb275ff3419cf2be85d4a7fb9e6974945f2b4b652d0cf3a3aca586f5e0838 languageName: node linkType: hard @@ -3428,35 +3332,35 @@ __metadata: linkType: hard "prosemirror-tables@npm:^1.1.1": - version: 1.3.7 - resolution: "prosemirror-tables@npm:1.3.7" + version: 1.5.0 + resolution: "prosemirror-tables@npm:1.5.0" dependencies: prosemirror-keymap: "npm:^1.1.2" prosemirror-model: "npm:^1.8.1" prosemirror-state: "npm:^1.3.1" prosemirror-transform: "npm:^1.2.1" prosemirror-view: "npm:^1.13.3" - checksum: 10c0/3b44967efe2a595f9ffc293e58332bb0d60c15c5c7f21684f2280b881fb48ac637d4f54e5811fa875a6154edde0f030c0ef842cc3f0adb0a63f116f94cfa1752 + checksum: 10c0/b1d52d8f164e61d2ec2e94e66445843e564d298f2782899837e5c4ea332a45576e4d8ab63dc98726e12c9431798ecd94cd55bd685506d148646234f9804f0b13 languageName: node linkType: hard "prosemirror-transform@npm:^1.0.0, prosemirror-transform@npm:^1.1.0, prosemirror-transform@npm:^1.2.1, prosemirror-transform@npm:^1.2.8, prosemirror-transform@npm:^1.7.3": - version: 1.8.0 - resolution: "prosemirror-transform@npm:1.8.0" + version: 1.10.0 + resolution: "prosemirror-transform@npm:1.10.0" dependencies: - prosemirror-model: "npm:^1.0.0" - checksum: 10c0/20861fcb304cc68718e49be6c41f22505689e969507f1e9754bbdfedf98fc4059254a79e1659b930c13ca52c547d3449f1814263a7601aeea1c1c4dfedc80ac1 + prosemirror-model: "npm:^1.21.0" + checksum: 10c0/72c10b7689e0e7a575e2df66ee58980ae612f7bbad78b6781828276b5872763e05cb8fb1a92920f77e30ce5dd061d67c3de081dc4c060f23db5cbb2083100928 languageName: node linkType: hard "prosemirror-view@npm:^1.0.0, prosemirror-view@npm:^1.1.0, prosemirror-view@npm:^1.13.3, prosemirror-view@npm:^1.16.5, prosemirror-view@npm:^1.27.0, prosemirror-view@npm:^1.31.0": - version: 1.33.3 - resolution: "prosemirror-view@npm:1.33.3" + version: 1.34.3 + resolution: "prosemirror-view@npm:1.34.3" dependencies: - prosemirror-model: "npm:^1.16.0" + prosemirror-model: "npm:^1.20.0" prosemirror-state: "npm:^1.0.0" prosemirror-transform: "npm:^1.1.0" - checksum: 10c0/e6ef5832328db182716fad4c28ae0bf8714e1f80158674e3ba2191651555c7fc46af15799a8a8dd153a9662d90966f96e3531d115aff69fc891b010a349f2bf5 + checksum: 10c0/f08a9eeb6988e2180ec19989bb11c11db02c37952d1ab8b3ae8c7c1ebf9ce143725855bfa8cee59e4819aab3c9045ef5721cc90e69353f8fd81b7bb3a1c4ea03 languageName: node linkType: hard @@ -3510,9 +3414,9 @@ __metadata: linkType: hard "react-is@npm:^18.0.0": - version: 18.2.0 - resolution: "react-is@npm:18.2.0" - checksum: 10c0/6eb5e4b28028c23e2bfcf73371e72cd4162e4ac7ab445ddae2afe24e347a37d6dc22fae6e1748632cd43c6d4f9b8f86dcf26bf9275e1874f436d129952528ae0 + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 languageName: node linkType: hard @@ -3525,6 +3429,13 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^4.0.1": + version: 4.0.2 + resolution: "readdirp@npm:4.0.2" + checksum: 10c0/a16ecd8ef3286dcd90648c3b103e3826db2b766cdb4a988752c43a83f683d01c7059158d623cbcd8bdfb39e65d302d285be2d208e7d9f34d022d912b929217dd + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -3614,26 +3525,26 @@ __metadata: linkType: hard "rollup@npm:^4.20.0": - version: 4.21.2 - resolution: "rollup@npm:4.21.2" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.21.2" - "@rollup/rollup-android-arm64": "npm:4.21.2" - "@rollup/rollup-darwin-arm64": "npm:4.21.2" - "@rollup/rollup-darwin-x64": "npm:4.21.2" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.2" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.2" - "@rollup/rollup-linux-arm64-gnu": "npm:4.21.2" - "@rollup/rollup-linux-arm64-musl": "npm:4.21.2" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.2" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.2" - "@rollup/rollup-linux-s390x-gnu": "npm:4.21.2" - "@rollup/rollup-linux-x64-gnu": "npm:4.21.2" - "@rollup/rollup-linux-x64-musl": "npm:4.21.2" - "@rollup/rollup-win32-arm64-msvc": "npm:4.21.2" - "@rollup/rollup-win32-ia32-msvc": "npm:4.21.2" - "@rollup/rollup-win32-x64-msvc": "npm:4.21.2" - "@types/estree": "npm:1.0.5" + version: 4.24.0 + resolution: "rollup@npm:4.24.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.24.0" + "@rollup/rollup-android-arm64": "npm:4.24.0" + "@rollup/rollup-darwin-arm64": "npm:4.24.0" + "@rollup/rollup-darwin-x64": "npm:4.24.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.24.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.24.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.24.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.24.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.24.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.24.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.24.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.24.0" + "@rollup/rollup-linux-x64-musl": "npm:4.24.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.24.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.24.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.24.0" + "@types/estree": "npm:1.0.6" fsevents: "npm:~2.3.2" dependenciesMeta: "@rollup/rollup-android-arm-eabi": @@ -3672,7 +3583,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/c9d97f7a21cde110371b2e890a31a996fee09b81e639e79372b962a9638ae653d2d24186b94632fc5dfab8a0582e1d0639dfe34b8b75051facd86915a9585a5f + checksum: 10c0/77fb549c1de8afd1142d2da765adbb0cdab9f13c47df5217f00b5cf40b74219caa48c6ba2157f6249313ee81b6fa4c4fa8b3d2a0347ad6220739e00e580a808d languageName: node linkType: hard @@ -3690,6 +3601,13 @@ __metadata: languageName: node linkType: hard +"rrweb-cssom@npm:^0.7.1": + version: 0.7.1 + resolution: "rrweb-cssom@npm:0.7.1" + checksum: 10c0/127b8ca6c8aac45e2755abbae6138d4a813b1bedc2caabf79466ae83ab3cfc84b5bfab513b7033f0aa4561c7753edf787d0dd01163ceacdee2e8eb1b6bf7237e + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -3706,16 +3624,16 @@ __metadata: languageName: node linkType: hard -"sass@npm:^1.69.5": - version: 1.72.0 - resolution: "sass@npm:1.72.0" +"sass@npm:^1.79.4": + version: 1.79.4 + resolution: "sass@npm:1.79.4" dependencies: - chokidar: "npm:>=3.0.0 <4.0.0" + chokidar: "npm:^4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 10c0/7df1bb470648edc4b528976b1b165c78d4c6731f680afac7cdc8324142f1ef4304598d317d98dac747a2ae8eee17271d760def90bba072021a8b19b459336ccd + checksum: 10c0/505ff0d9267d0fb990971e617acfeabf7c060c55d4cef68fe8a4bc693e7ea88ae7d7caeca3975e4b453459ba4a707b6e5b6979fc9395a7e08f0a43ca6aed06b8 languageName: node linkType: hard @@ -3728,7 +3646,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5": +"semver@npm:^7.3.5, semver@npm:^7.3.6, semver@npm:^7.5.3, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -3737,17 +3655,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.6, semver@npm:^7.5.3, semver@npm:^7.6.0": - version: 7.6.0 - resolution: "semver@npm:7.6.0" - dependencies: - lru-cache: "npm:^6.0.0" - bin: - semver: bin/semver.js - checksum: 10c0/fbfe717094ace0aa8d6332d7ef5ce727259815bd8d8815700853f4faf23aacbd7192522f0dc5af6df52ef4fa85a355ebd2f5d39f554bd028200d6cf481ab9b53 - languageName: node - linkType: hard - "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -3813,10 +3720,10 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf languageName: node linkType: hard @@ -3965,8 +3872,8 @@ __metadata: linkType: hard "svgo@npm:^3.0.0": - version: 3.2.0 - resolution: "svgo@npm:3.2.0" + version: 3.3.2 + resolution: "svgo@npm:3.3.2" dependencies: "@trysound/sax": "npm:0.2.0" commander: "npm:^7.2.0" @@ -3977,7 +3884,7 @@ __metadata: picocolors: "npm:^1.0.0" bin: svgo: ./bin/svgo - checksum: 10c0/28fa9061ccbcf2e3616d48d1feb613aaa05f8f290a329beb0e585914f1864385152934a7d4d683a4609fafbae3d51666633437c359c5c5ef74fb58ad09092a7c + checksum: 10c0/a6badbd3d1d6dbb177f872787699ab34320b990d12e20798ecae915f0008796a0f3c69164f1485c9def399e0ce0a5683eb4a8045e51a5e1c364bb13a0d9f79e1 languageName: node linkType: hard @@ -3989,8 +3896,8 @@ __metadata: linkType: hard "tailwindcss@npm:^3.4.1": - version: 3.4.3 - resolution: "tailwindcss@npm:3.4.3" + version: 3.4.13 + resolution: "tailwindcss@npm:3.4.13" dependencies: "@alloc/quick-lru": "npm:^5.2.0" arg: "npm:^5.0.2" @@ -4017,7 +3924,7 @@ __metadata: bin: tailwind: lib/cli.js tailwindcss: lib/cli.js - checksum: 10c0/11e5546494f2888f693ebaa271b218b3a8e52fe59d7b629e54f2dffd6eaafd5ded2e9f0c37ad04e6a866dffb2b116d91becebad77e1441beee8bf016bb2392f9 + checksum: 10c0/c6525be3dd26febc4ec5e45e80596bff8b48ade7de258c1ec8704297bf47c1ec7b2b186b13662ebaa6ab4795ad8879fb64064f796756bfc8b46558b542b01a6c languageName: node linkType: hard @@ -4061,9 +3968,9 @@ __metadata: linkType: hard "tinybench@npm:^2.5.0": - version: 2.6.0 - resolution: "tinybench@npm:2.6.0" - checksum: 10c0/60ea35699bf8bac9bc8cf279fa5877ab5b335b4673dcd07bf0fbbab9d7953a02c0ccded374677213eaa13aa147f54eb75d3230139ddbeec3875829ebe73db310 + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c languageName: node linkType: hard @@ -4167,14 +4074,14 @@ __metadata: linkType: hard "tough-cookie@npm:^4.1.3": - version: 4.1.3 - resolution: "tough-cookie@npm:4.1.3" + version: 4.1.4 + resolution: "tough-cookie@npm:4.1.4" dependencies: psl: "npm:^1.1.33" punycode: "npm:^2.1.1" universalify: "npm:^0.2.0" url-parse: "npm:^1.5.3" - checksum: 10c0/4fc0433a0cba370d57c4b240f30440c848906dee3180bb6e85033143c2726d322e7e4614abb51d42d111ebec119c4876ed8d7247d4113563033eebbc1739c831 + checksum: 10c0/aca7ff96054f367d53d1e813e62ceb7dd2eda25d7752058a74d64b7266fd07be75908f3753a32ccf866a2f997604b414cfb1916d6e7f69bc64d9d9939b0d6c45 languageName: node linkType: hard @@ -4210,10 +4117,10 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd +"type-detect@npm:^4.0.0, type-detect@npm:^4.1.0": + version: 4.1.0 + resolution: "type-detect@npm:4.1.0" + checksum: 10c0/df8157ca3f5d311edc22885abc134e18ff8ffbc93d6a9848af5b682730ca6a5a44499259750197250479c5331a8a75b5537529df5ec410622041650a7f293e2a languageName: node linkType: hard @@ -4224,17 +4131,17 @@ __metadata: languageName: node linkType: hard -"ufo@npm:^1.3.2": - version: 1.5.3 - resolution: "ufo@npm:1.5.3" - checksum: 10c0/1df10702582aa74f4deac4486ecdfd660e74be057355f1afb6adfa14243476cf3d3acff734ccc3d0b74e9bfdefe91d578f3edbbb0a5b2430fe93cd672370e024 +"ufo@npm:^1.5.3": + version: 1.5.4 + resolution: "ufo@npm:1.5.4" + checksum: 10c0/b5dc4dc435c49c9ef8890f1b280a19ee4d0954d1d6f9ab66ce62ce64dd04c7be476781531f952a07c678d51638d02ad4b98e16237be29149295b0f7c09cda765 languageName: node linkType: hard -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 languageName: node linkType: hard @@ -4264,16 +4171,16 @@ __metadata: linkType: hard "update-browserslist-db@npm:^1.1.0": - version: 1.1.0 - resolution: "update-browserslist-db@npm:1.1.0" + version: 1.1.1 + resolution: "update-browserslist-db@npm:1.1.1" dependencies: - escalade: "npm:^3.1.2" - picocolors: "npm:^1.0.1" + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.0" peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 10c0/a7452de47785842736fb71547651c5bbe5b4dc1e3722ccf48a704b7b34e4dcf633991eaa8e4a6a517ffb738b3252eede3773bef673ef9021baa26b056d63a5b9 + checksum: 10c0/536a2979adda2b4be81b07e311bd2f3ad5e978690987956bc5f514130ad50cac87cd22c710b686d79731e00fbee8ef43efe5fcd72baa241045209195d43dcc80 languageName: node linkType: hard @@ -4356,8 +4263,8 @@ __metadata: linkType: hard "vite@npm:^5.4.5": - version: 5.4.5 - resolution: "vite@npm:5.4.5" + version: 5.4.8 + resolution: "vite@npm:5.4.8" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" @@ -4394,7 +4301,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/89c6459452fc238cdf8e99681b30996af171c9c557af476f96408a18a639fb5a0a6ee2d2257e005b21dc284edceb604595c34920cd4a007ad18f7ebafb654c76 + checksum: 10c0/af70af6d6316a3af71f44ebe3ab343bd66450d4157af73af3b32239e1b6ec43ff6f651d7cc4193b21ed3bff2e9356a3de9e96aee53857f39922e4a2d9fad75a1 languageName: node linkType: hard @@ -4458,9 +4365,9 @@ __metadata: languageName: node linkType: hard -"vue-eslint-parser@npm:^9.4.2": - version: 9.4.2 - resolution: "vue-eslint-parser@npm:9.4.2" +"vue-eslint-parser@npm:^9.4.3": + version: 9.4.3 + resolution: "vue-eslint-parser@npm:9.4.3" dependencies: debug: "npm:^4.3.4" eslint-scope: "npm:^7.1.1" @@ -4471,7 +4378,7 @@ __metadata: semver: "npm:^7.3.6" peerDependencies: eslint: ">=6.0.0" - checksum: 10c0/79593073adbce8971565133c70a203f12f0be0f8c5e3a4063796fd56e5de64f1f3ad7f91be5a787a7a3fe751306ed22086ee8369d52725be95f452827ce670de + checksum: 10c0/128be5988de025b5abd676a91c3e92af68288a5da1c20b2ff848fe90e040c04b2222a03b5d8048cf4a5e0b667a8addfb6f6e6565860d4afb5190c4cc42d05578 languageName: node linkType: hard @@ -4628,14 +4535,14 @@ __metadata: linkType: hard "why-is-node-running@npm:^2.2.2": - version: 2.2.2 - resolution: "why-is-node-running@npm:2.2.2" + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" dependencies: siginfo: "npm:^2.0.0" stackback: "npm:0.0.2" bin: why-is-node-running: cli.js - checksum: 10c0/805d57eb5d33f0fb4e36bae5dceda7fd8c6932c2aeb705e30003970488f1a2bc70029ee64be1a0e1531e2268b11e65606e88e5b71d667ea745e6dc48fc9014bd + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 languageName: node linkType: hard @@ -4646,6 +4553,13 @@ __metadata: languageName: node linkType: hard +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -4676,8 +4590,8 @@ __metadata: linkType: hard "ws@npm:^8.16.0": - version: 8.16.0 - resolution: "ws@npm:8.16.0" + version: 8.18.0 + resolution: "ws@npm:8.18.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -4686,7 +4600,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10c0/a7783bb421c648b1e622b423409cb2a58ac5839521d2f689e84bc9dc41d59379c692dd405b15a997ea1d4c0c2e5314ad707332d0c558f15232d2bc07c0b4618a + checksum: 10c0/25eb33aff17edcb90721ed6b0eb250976328533ad3cd1a28a274bd263682e7296a6591ff1436d6cbc50fa67463158b062f9d1122013b361cec99a05f84680e06 languageName: node linkType: hard @@ -4726,11 +4640,11 @@ __metadata: linkType: hard "yaml@npm:^2.3.4": - version: 2.4.1 - resolution: "yaml@npm:2.4.1" + version: 2.5.1 + resolution: "yaml@npm:2.5.1" bin: yaml: bin.mjs - checksum: 10c0/816057dbaea16a7dfb0b868ace930f143dece96bbb4c4fbb6f38aa389166f897240d9fa535dbfd6b1b0d9442416f4abcc698e63f82394d0c67b329aa6c2be576 + checksum: 10c0/40fba5682898dbeeb3319e358a968fe886509fab6f58725732a15f8dda3abac509f91e76817c708c9959a15f786f38ff863c1b88062d7c1162c5334a7d09cb4a languageName: node linkType: hard @@ -4742,8 +4656,8 @@ __metadata: linkType: hard "yocto-queue@npm:^1.0.0": - version: 1.0.0 - resolution: "yocto-queue@npm:1.0.0" - checksum: 10c0/856117aa15cf5103d2a2fb173f0ab4acb12b4b4d0ed3ab249fdbbf612e55d1cadfd27a6110940e24746fb0a78cf640b522cc8bca76f30a3b00b66e90cf82abe0 + version: 1.1.1 + resolution: "yocto-queue@npm:1.1.1" + checksum: 10c0/cb287fe5e6acfa82690acb43c283de34e945c571a78a939774f6eaba7c285bacdf6c90fbc16ce530060863984c906d2b4c6ceb069c94d1e0a06d5f2b458e2a92 languageName: node linkType: hard