diff --git a/.env b/.env index cf2a364ce..ec9e43163 100644 --- a/.env +++ b/.env @@ -11,6 +11,7 @@ SITE_ADMIN_EMAILS= GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= GOOD_JOB_EXECUTION_MODE= +GROVER_NO_SANDBOX=true # must be true for running chromium as root in Docker container ADMIN_IDS= LOG_LEVEL= DB_HOST= @@ -24,3 +25,4 @@ UPVS_SSO_SUBJECT= UPVS_SSO_SP_CERTIFICATE= UPVS_SSO_SP_PRIVATE_KEY= UPVS_ENV= +PDF_DISPLAY_URL= diff --git a/.env.test b/.env.test index 4b26726a9..9b5f06bf3 100644 --- a/.env.test +++ b/.env.test @@ -11,3 +11,5 @@ ZwIDAQAB ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=1 ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=2 ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=3 +GROVER_NO_SANDBOX=true # must be true for running chromium as root in Docker container +PDF_DISPLAY_URL= diff --git a/Dockerfile b/Dockerfile index 81798a612..f81a91736 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,8 @@ FROM ruby:3.3.0 # Install packages -RUN apt-get update && apt-get install -y build-essential nodejs libpq-dev npm fop=1:2.* libsaxon-java libsaxonb-java +RUN apt-get update && apt-get install -y build-essential nodejs libpq-dev npm fop=1:2.* libsaxon-java libsaxonb-java chromium \ + && apt-get -y install libx11-xcb1 libxcomposite1 libasound2 libatk1.0-0 libatk-bridge2.0-0 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 # Setup FOP to use saxon xslt parser RUN sed -i '/find_jars/i \ diff --git a/Gemfile b/Gemfile index 764404729..0101fe068 100644 --- a/Gemfile +++ b/Gemfile @@ -39,6 +39,7 @@ gem 'jwt' gem 'stimulus-rails' gem 'jsbundling-rails' gem 'pdf-reader' +gem 'grover' # Monitoring gem 'rollbar' diff --git a/Gemfile.lock b/Gemfile.lock index 8f47dfd21..4362ba58e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -117,6 +117,9 @@ GEM activesupport tzinfo coderay (1.1.3) + combine_pdf (1.0.26) + matrix + ruby-rc4 (>= 0.1.5) concurrent-ruby (1.2.3) connection_pool (2.4.1) crack (1.0.0) @@ -164,6 +167,9 @@ GEM fugit (>= 1.1) railties (>= 6.0.0) thor (>= 0.14.1) + grover (1.1.11) + combine_pdf (~> 1.0) + nokogiri (~> 1.0) hashdiff (1.1.0) hashery (2.1.2) hashie (5.0.0) @@ -512,6 +518,7 @@ DEPENDENCIES erb_lint foreman good_job + grover htmlbeautifier importmap-rails jbuilder diff --git a/app/components/message_draft_body_component.html.erb b/app/components/message_draft_body_component.html.erb index 2193eae6e..61e56d216 100644 --- a/app/components/message_draft_body_component.html.erb +++ b/app/components/message_draft_body_component.html.erb @@ -93,7 +93,7 @@ <% if @message.html_visualization.present? %>
- <%= tag.iframe class: "relative border-none overflow-hidden h-full w-full", srcdoc: @message.format_html_visualization, onload: "( + <%= tag.iframe class: "relative border-none overflow-hidden h-full w-full", srcdoc: @message.html_visualization, onload: "( function(iframe) { iframe.contentWindow.document.body.style['height'] = 'unset'; iframe.contentWindow.document.body.style['min-height'] = 'unset'; diff --git a/app/components/settings/rules/rule_header_form_component.rb b/app/components/settings/rules/rule_header_form_component.rb index 6a56cdf9a..1939b39e3 100644 --- a/app/components/settings/rules/rule_header_form_component.rb +++ b/app/components/settings/rules/rule_header_form_component.rb @@ -6,6 +6,7 @@ def before_render @trigger_events_list = [ [t('message_created'), 'message_created'], [t('message_draft_submitted'), 'message_draft_submitted'], + [t('message_object_downloaded'), 'message_object_downloaded'], ] end end diff --git a/app/controllers/message_objects_controller.rb b/app/controllers/message_objects_controller.rb index 8e5d56e79..89b0014e0 100644 --- a/app/controllers/message_objects_controller.rb +++ b/app/controllers/message_objects_controller.rb @@ -26,6 +26,9 @@ def show def download authorize @message_object + + EventBus.publish(:message_object_downloaded, @message_object) + send_data @message_object.content, filename: MessageObjectHelper.displayable_name(@message_object), type: @message_object.mimetype, disposition: :download end @@ -34,6 +37,8 @@ def download_pdf pdf_content = @message_object.prepare_pdf_visualization if pdf_content + EventBus.publish(:message_object_downloaded, @message_object) + send_data pdf_content, filename: MessageObjectHelper.pdf_name(@message_object), type: 'application/pdf', disposition: :download else redirect_back fallback_location: message_thread_path(@message_object.message.thread), alert: "Obsah nie je možné stiahnuť." diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 34da4289f..b1d68ee62 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -9,10 +9,10 @@ def nice_datetime(datetime) end end - def nice_datetime_with_time(datetime) - if datetime.today? + def nice_datetime_with_time(datetime, full_date: false) + if datetime.today? && !full_date l(datetime, format: '%H:%M') - elsif datetime.year == Date.current.year + elsif datetime.year == Date.current.year && !full_date l(datetime, format: '%e. %b %H:%M') else l(datetime, format: '%e. %b %Y %H:%M') diff --git a/app/helpers/fs/message_helper.rb b/app/helpers/fs/message_helper.rb new file mode 100644 index 000000000..6e0f1fa3d --- /dev/null +++ b/app/helpers/fs/message_helper.rb @@ -0,0 +1,23 @@ +module Fs::MessageHelper + def self.build_html_visualization(message) + return [ActionController::Base.new.render_to_string('fs/messages/_submission', layout: false, locals: { message: message }), build_html_visualization_from_form(message)].compact.join('
') if message.outbox? + + # TODO: Vieme aj lepsie identifikovat? Nejake dalsie typy v tejto kategorii neexistuju? + template = if message.title.in?(['Informácia o podaní', 'Informácia o odmietnutí podania']) + 'fs/messages/_delivery_report' + else + 'fs/messages/_generic_message' + end + + ActionController::Base.new.render_to_string(template, layout: false, locals: { message: message }) + end + + def self.build_html_visualization_from_form(message) + raise 'Missing Fs::Form XSLT' unless message.form&.xslt_txt + return unless message.form_object&.unsigned_content + + template = Nokogiri::XSLT(message.form.xslt_txt) + + ActionController::Base.new.render_to_string('fs/messages/_style', layout: false, locals: { message: message }) + ActionController::Base.helpers.simple_format(template.transform(message.form_object.xml_unsigned_content).to_s) + end +end diff --git a/app/helpers/message_helper.rb b/app/helpers/message_helper.rb index 22e028694..bbd54f3d3 100644 --- a/app/helpers/message_helper.rb +++ b/app/helpers/message_helper.rb @@ -2,10 +2,4 @@ module MessageHelper def self.export_filename(message) "#{message.delivered_at.to_date}-sprava-#{message.id}.zip" end - - def format_html_visualization - return ActionController::Base.helpers.simple_format(html_visualization) if is_a?(Fs::MessageDraft) - - html_visualization - end end diff --git a/app/jobs/fs/download_received_message_job.rb b/app/jobs/fs/download_received_message_job.rb new file mode 100644 index 000000000..4e860961d --- /dev/null +++ b/app/jobs/fs/download_received_message_job.rb @@ -0,0 +1,18 @@ +module Fs + class DownloadReceivedMessageJob < ApplicationJob + def perform(fs_message_id, box:, fs_client: FsEnvironment.fs_client) + raise unless box.is_a?(Fs::Box) + return unless box.syncable? + + return if box.messages.where("metadata ->> 'fs_message_id' = ?", fs_message_id).any? + + ActiveRecord::Base.transaction do + fs_api = fs_client.api(api_connection: box.api_connection, box: box) + + raw_message = fs_api.fetch_received_message(fs_message_id) + + Fs::Message.create_inbox_message_with_thread!(raw_message, box: box) + end + end + end +end diff --git a/app/jobs/fs/download_sent_message_job.rb b/app/jobs/fs/download_sent_message_job.rb new file mode 100644 index 000000000..0d12647c9 --- /dev/null +++ b/app/jobs/fs/download_sent_message_job.rb @@ -0,0 +1,20 @@ +module Fs + class DownloadSentMessageJob < ApplicationJob + def perform(fs_message_id, box:, fs_client: FsEnvironment.fs_client) + raise unless box.is_a?(Fs::Box) + return unless box.syncable? + + return if box.messages.where(type: [nil, 'Message']).where("metadata ->> 'fs_message_id' = ?", fs_message_id).any? + + ActiveRecord::Base.transaction do + fs_api = fs_client.api(api_connection: box.api_connection, box: box) + + raw_message = fs_api.fetch_sent_message(fs_message_id) + + message = Fs::Message.create_outbox_message_with_thread!(raw_message, box: box) + + DownloadSentMessageRelatedMessagesJob.set(wait: 3.minutes).perform_later(message) + end + end + end +end diff --git a/app/jobs/fs/download_sent_message_related_messages_job.rb b/app/jobs/fs/download_sent_message_related_messages_job.rb new file mode 100644 index 000000000..43f9fc69d --- /dev/null +++ b/app/jobs/fs/download_sent_message_related_messages_job.rb @@ -0,0 +1,20 @@ +module Fs + class DownloadSentMessageRelatedMessagesJob < ApplicationJob + def perform(outbox_message, from: nil, to: nil, fs_client: FsEnvironment.fs_client, batch_size: 25) + raise unless outbox_message.box.is_a?(Fs::Box) + return unless outbox_message.box.syncable? + + fs_api = fs_client.api(api_connection: outbox_message.box.api_connection, box: outbox_message.box) + + 0.step do |k| + received_messages = fs_api.fetch_received_messages(sent_message_id: outbox_message.metadata['fs_message_id'], page: k + 1, count: batch_size, from: from, to: to) + + received_messages['messages'].each do |received_message| + ::Fs::DownloadReceivedMessageJob.perform_later(received_message['message_id'], box: outbox_message.box) + end + + break if received_messages['messages'].size < batch_size + end + end + end +end diff --git a/app/jobs/fs/fetch_forms_job.rb b/app/jobs/fs/fetch_forms_job.rb index 3591c5fff..75e574d79 100644 --- a/app/jobs/fs/fetch_forms_job.rb +++ b/app/jobs/fs/fetch_forms_job.rb @@ -7,6 +7,7 @@ def perform(fs_client: FsEnvironment.fs_client, download_related_documents_job: identifier: fs_form_data['identifier'], ).tap do |form| form.update( + submission_type_identifier: fs_form_data['submission_type_identifier'], name: fs_form_data['name'], group_name: fs_form_data['form_group_name'], subtype_name: fs_form_data['subtype_name'], diff --git a/app/jobs/fs/submit_message_draft_job.rb b/app/jobs/fs/submit_message_draft_job.rb index 150fa319e..f70e255bf 100644 --- a/app/jobs/fs/submit_message_draft_job.rb +++ b/app/jobs/fs/submit_message_draft_job.rb @@ -7,6 +7,8 @@ def perform(message_draft, bulk_submit: false, fs_client: FsEnvironment.fs_clien response = fs_api.post_submission( message_draft.form.identifier, Base64.strict_encode64(message_draft.form_object.content), + message_uuid: message_draft.uuid, + form_object_uuid: message_draft.form_object.uuid, allow_warn_status: true, is_signed: message_draft.form_object.is_signed, mime_type: message_draft.form_object.mimetype diff --git a/app/jobs/fs/submit_message_draft_result_job.rb b/app/jobs/fs/submit_message_draft_result_job.rb index 2bb1780c7..c148f012e 100644 --- a/app/jobs/fs/submit_message_draft_result_job.rb +++ b/app/jobs/fs/submit_message_draft_result_job.rb @@ -4,7 +4,10 @@ def perform(message_draft, location_header, fs_client: FsEnvironment.fs_client) if 200 == response[:status] message_draft.metadata[:status] = 'submitted' + message_draft.metadata[:fs_message_id] = response[:body]['sent_message_id'] message_draft.save + + ::Fs::DownloadSentMessageJob.perform_later(response[:body]['sent_message_id'], box: message_draft.box) elsif [400, 422].include?(response[:status]) message_draft.metadata[:status] = 'submit_fail' message_draft.add_cascading_tag(message_draft.tenant.submission_error_tag) diff --git a/app/jobs/fs/sync_all_boxes_job.rb b/app/jobs/fs/sync_all_boxes_job.rb new file mode 100644 index 000000000..04f0e12db --- /dev/null +++ b/app/jobs/fs/sync_all_boxes_job.rb @@ -0,0 +1,12 @@ +module Fs + class SyncAllBoxesJob < ApplicationJob + def perform + Fs::Box.where(syncable: true).find_each do |box| + SyncBoxJob.perform_later(box) + end + + # TODO ponastavovat v BetterUptime + BetterUptimeApi.ping_heartbeat('FS_SYNC') + end + end +end diff --git a/app/jobs/fs/sync_box_job.rb b/app/jobs/fs/sync_box_job.rb new file mode 100644 index 000000000..1bfa355f0 --- /dev/null +++ b/app/jobs/fs/sync_box_job.rb @@ -0,0 +1,12 @@ +module Fs + class SyncBoxJob < ApplicationJob + def perform(box, from: Date.today - 1.week, to: Date.tomorrow) + raise unless box.is_a?(Fs::Box) + return unless box.syncable? + + box.messages.outbox.find_each do |outbox_message| + DownloadSentMessageRelatedMessagesJob.perform_later(outbox_message, from: from, to: to) + end + end + end +end diff --git a/app/lib/event_bus.rb b/app/lib/event_bus.rb index 1d2bcecc7..367663ed4 100644 --- a/app/lib/event_bus.rb +++ b/app/lib/event_bus.rb @@ -28,7 +28,7 @@ def self.reset! # wiring # automation -[:message_thread_created, :message_created, :message_draft_submitted].each do |event| +[:message_thread_created, :message_created, :message_draft_submitted, :message_object_downloaded].each do |event| EventBus.subscribe_job event, Automation::ApplyRulesForEventJob end diff --git a/app/lib/fs/api.rb b/app/lib/fs/api.rb index b4216bf72..23c0d8c0a 100644 --- a/app/lib/fs/api.rb +++ b/app/lib/fs/api.rb @@ -29,19 +29,27 @@ def get_subjects end def fetch_sent_messages(page: 1, count: 100, obo: @obo) - request(:get, "sent-messages", {}, jwt_header(obo).merge(fs_credentials_header))[:body] + request(:get, "sent-messages?page=#{page}&per_page=#{count}", {}, jwt_header(obo).merge(fs_credentials_header))[:body] end def fetch_sent_message(message_id, obo: @obo) - request(:get, "sent-messages/#{message_id}", {}, jwt_header(obo).merge(fs_credentials_header))[:body] + request(:get, "sent-messages/#{CGI.escape(message_id)}", {}, jwt_header(obo).merge(fs_credentials_header))[:body] end - def fetch_received_messages(page: 1, count: 100, obo: @obo) - request(:get, "received-messages", {}, jwt_header(obo).merge(fs_credentials_header))[:body] + def fetch_received_messages(sent_message_id: nil, page: 1, count: 100, from: nil, to: nil, obo: @obo) + query = { + sent_message_id: sent_message_id, + page: page, + per_page: count, + from: from, + to: to + }.compact.to_query + + request(:get, "received-messages?#{query}", {}, jwt_header(obo).merge(fs_credentials_header))[:body] end def fetch_received_message(message_id, obo: @obo) - request(:get, "received-messages/#{message_id}", {}, jwt_header(obo).merge(fs_credentials_header))[:body] + request(:get, "received-messages/#{CGI.escape(message_id)}", {}, jwt_header(obo).merge(fs_credentials_header))[:body] end def post_validation(form_identifier, content) @@ -52,8 +60,10 @@ def delete_validation(validation_id) request(:delete, "validations/#{validation_id}", {}, jwt_header, accept_negative: true) end - def post_submission(form_identifier, content, allow_warn_status: true, is_signed: true, mime_type: 'application/vnd.etsi.asic-e+zip', obo: @obo) + def post_submission(form_identifier, content, allow_warn_status: true, message_uuid:, form_object_uuid:, is_signed: true, mime_type: 'application/vnd.etsi.asic-e+zip', obo: @obo) request(:post, "submissions", { + message_container_message_id: message_uuid, + message_container_form_object_id: form_object_uuid, is_signed: is_signed, mime_type: mime_type, form_identifier: form_identifier, diff --git a/app/lib/utils.rb b/app/lib/utils.rb index ee882d21f..2665ff4e5 100644 --- a/app/lib/utils.rb +++ b/app/lib/utils.rb @@ -100,7 +100,6 @@ def file_extension_by_mimetype(mimetype) # TODO use UPVS API to detect if document is signed def is_signed?(entry_name:, content:) - case File.extname(entry_name).downcase when '.asice', '.asics', '.xzep' true diff --git a/app/models/automation/condition.rb b/app/models/automation/condition.rb index 31ad12df2..1d3a85ffa 100644 --- a/app/models/automation/condition.rb +++ b/app/models/automation/condition.rb @@ -21,7 +21,7 @@ class Condition < ApplicationRecord attr_accessor :delete_record # when adding items, check defaults in condition_form_component.rb - ATTR_LIST = %i[box sender_name recipient_name title sender_uri recipient_uri attachment].freeze + ATTR_LIST = %i[box sender_name recipient_name title sender_uri recipient_uri attachment fs_submission_status fs_message_type object_type].freeze def valid_condition_type_list_for_attr Automation::Condition.subclasses.map do |subclass| @@ -36,7 +36,7 @@ def box_list class ContainsCondition < Automation::Condition validates :value, presence: true - VALID_ATTR_LIST = %w[sender_name recipient_name title].freeze + VALID_ATTR_LIST = %w[sender_name recipient_name title object_type].freeze validates :attr, inclusion: { in: VALID_ATTR_LIST } def satisfied?(thing) @@ -50,7 +50,7 @@ def cleanup_record class MetadataValueCondition < Automation::Condition validates :value, presence: true - VALID_ATTR_LIST = %w[sender_uri recipient_uri].freeze + VALID_ATTR_LIST = %w[sender_uri recipient_uri fs_submission_status fs_message_type].freeze validates :attr, inclusion: { in: VALID_ATTR_LIST } def satisfied?(thing) @@ -81,6 +81,20 @@ def cleanup_record end end + class MessageMetadataValueCondition < Automation::Condition + validates :value, presence: true + VALID_ATTR_LIST = %w[fs_message_type].freeze + validates :attr, inclusion: { in: VALID_ATTR_LIST } + + def satisfied?(thing) + thing.message.metadata && thing.message.metadata[attr]&.match?(value) + end + + def cleanup_record + self.condition_object = nil + end + end + class AttachmentContentContainsCondition < Automation::Condition validates :value, presence: true VALID_ATTR_LIST = ['attachment'].freeze diff --git a/app/models/concerns/pdf_visualization_operations.rb b/app/models/concerns/pdf_visualization_operations.rb index 86cec6fda..5e1c74d99 100644 --- a/app/models/concerns/pdf_visualization_operations.rb +++ b/app/models/concerns/pdf_visualization_operations.rb @@ -7,6 +7,10 @@ module PdfVisualizationOperations included do def prepare_pdf_visualization + prepare_pdf_visualization_from_template || prepare_pdf_visualization_from_html + end + + def prepare_pdf_visualization_from_template return unless form&.xsl_fo return unless unsigned_content return unless xml? @@ -39,6 +43,23 @@ def prepare_pdf_visualization end end + def prepare_pdf_visualization_from_html + return unless form? + return unless message.html_visualization.present? + + Grover.new( + full_html_document_from_body_content(message.html_visualization), + format: 'A4', + margin: { + top: '15px', + bottom: '15px', + left: '15px', + right: '15px' + }, + display_url: ENV['PDF_DISPLAY_URL'] + ).to_pdf + end + def xml_unsigned_content document = Nokogiri::XML(unsigned_content) do |config| config.noblanks @@ -75,7 +96,9 @@ def find_or_create_form end def downloadable_as_pdf? - xml? && form&.xsl_fo&.present? + return true if xml? && form&.xsl_fo&.present? + return true if form? && message.html_visualization.present? + false end def xml? @@ -85,5 +108,18 @@ def xml? Utils::XML_MIMETYPES.any? { |xml_mimetype| xml_mimetype == Utils.mimetype_without_optional_params(mimetype) } end end + + def full_html_document_from_body_content(body_content) + <<-HTML + + + + + + #{body_content} + + + HTML + end end end diff --git a/app/models/fs/form.rb b/app/models/fs/form.rb index 3c5c94453..2d4874506 100644 --- a/app/models/fs/form.rb +++ b/app/models/fs/form.rb @@ -2,17 +2,18 @@ # # Table name: fs_forms # -# id :bigint not null, primary key -# ez_signature :boolean -# group_name :string -# identifier :string not null -# name :string not null -# number_identifier :integer -# signature_required :boolean -# slug :string -# subtype_name :string -# created_at :datetime not null -# updated_at :datetime not null +# id :bigint not null, primary key +# ez_signature :boolean +# group_name :string +# identifier :string not null +# name :string not null +# number_identifier :integer +# signature_required :boolean +# slug :string +# submission_type_identifier :string +# subtype_name :string +# created_at :datetime not null +# updated_at :datetime not null # class Fs::Form < ApplicationRecord has_many :related_documents, class_name: 'Fs::FormRelatedDocument', foreign_key: 'fs_form_id', dependent: :destroy diff --git a/app/models/fs/message.rb b/app/models/fs/message.rb new file mode 100644 index 000000000..86c7cab37 --- /dev/null +++ b/app/models/fs/message.rb @@ -0,0 +1,153 @@ +class Fs::Message + FS_SUBJECT_NAME = 'Finančná správa' + + def self.create_inbox_message_with_thread!(raw_message, box:) + message = nil + associated_outbox_message = box.messages.where("metadata ->> 'fs_message_id' = ?", raw_message['sent_message_id']).take + + MessageThread.with_advisory_lock!(associated_outbox_message.metadata['correlation_id'], transaction: true, timeout_seconds: 10) do + message = create_inbox_message(raw_message) + + message.thread = associated_outbox_message.thread + + message.save! + + create_message_objects(message, raw_message) + update_html_visualization(message) + + MessageObject.mark_message_objects_externally_signed(message.objects) + end + + EventBus.publish(:message_thread_created, message.thread) if message.thread.previously_new_record? + EventBus.publish(:message_created, message) + end + + def self.create_outbox_message_with_thread!(raw_message, box:) + message = nil + associated_message_draft = box.messages.where(type: 'Fs::MessageDraft').where("metadata ->> 'fs_message_id' = ?", raw_message['message_id']).take + + merge_identifier = (associated_message_draft.metadata['correlation_id'] if associated_message_draft) || SecureRandom.uuid + + MessageThread.with_advisory_lock!(merge_identifier, transaction: true, timeout_seconds: 10) do + message = create_outbox_message(raw_message, associated_message_draft: associated_message_draft) + + message.thread = associated_message_draft&.thread + message.thread ||= box.message_threads.find_or_create_by_merge_uuid!( + box: box, + merge_uuid: merge_identifier, + title: message.title, + delivered_at: message.delivered_at + ) + + message.save! + + create_message_objects(message, raw_message) + update_html_visualization(message) + + if associated_message_draft + message.copy_tags_from_draft(associated_message_draft) + associated_message_draft.destroy + end + + MessageObject.mark_message_objects_externally_signed(message.objects) + end + + EventBus.publish(:message_thread_created, message.thread) if message.thread.previously_new_record? + EventBus.publish(:message_created, message) + + message + end + + private + + def self.create_inbox_message(raw_message) + Message.create( + uuid: raw_message.dig('message_container', 'message_id'), + title: raw_message['message_type_name'], + sender_name: FS_SUBJECT_NAME, + recipient_name: raw_message['subject'], + delivered_at: Time.parse(raw_message['created_at']).getlocal, + replyable: false, + collapsed: collapsed?, + outbox: false, + metadata: { + "fs_message_id": raw_message['message_id'], + "fs_sent_message_id": raw_message['sent_message_id'], + "fs_status": raw_message['status'], + "fs_submitting_subject": raw_message['submitting_subject'], + "fs_submission_status": raw_message['submission_status'], + "fs_message_type": raw_message.dig('message_container', 'message_type'), + "fs_submission_type_id": raw_message['submission_type_id'], # TODO kde pouzit? asi napr. pri vytvarani nazvu suboru pri exporte + "fs_submission_created_at": Time.parse(raw_message['submission_created_at']).getlocal, + "fs_period": raw_message['period'], + "fs_dismissal_reason": raw_message['dismissal_reason'], + "fs_other_attributes": raw_message['other_attributes'], + "dic": raw_message['dic'] + }, + ) + end + + def self.create_outbox_message(raw_message, associated_message_draft: nil) + Message.create( + uuid: raw_message.dig('message_container', 'message_id'), + title: raw_message['submission_type_name'], + sender_name: raw_message['subject'], + recipient_name: FS_SUBJECT_NAME, + delivered_at: Time.parse(raw_message['created_at']).getlocal, + replyable: false, + collapsed: collapsed?, + outbox: true, + metadata: { + "fs_form_id": (associated_message_draft.metadata['fs_form_id'] if associated_message_draft) || Fs::Form.find_by(submission_type_identifier: raw_message['submission_type_id'])&.id, + "fs_message_id": raw_message['message_id'], + "fs_status": raw_message['status'], + "fs_submitting_subject": raw_message['submitting_subject'], + "fs_period": raw_message['period'], + "fs_dismissal_reason": raw_message['dismissal_reason'], + "fs_other_attributes": raw_message['other_attributes'], + "dic": raw_message['dic'] + }, + ) + end + + def self.create_message_objects(message, raw_message) + raw_message.dig('message_container', 'objects').each do |raw_object| + tags = raw_object["signed"] ? [message.thread.box.tenant.signed_externally_tag!] : [] + + message_object = message.objects.create!( + uuid: raw_object["id"], + is_signed: raw_object["signed"], + mimetype: raw_object["mime_type"], + name: raw_object["name"], + object_type: raw_object["class"], + tags: tags + ) + + if raw_object["encoding"] == "Base64" + message_object_content = Base64.decode64(raw_object["content"]) + else + message_object_content = raw_object["content"] + end + + MessageObjectDatum.create!( + blob: message_object_content, + message_object: message_object + ) + end + end + + def self.update_html_visualization(message) + message.update( + html_visualization: Fs::MessageHelper.build_html_visualization(message) + ) + + message.form_object&.update( + visualizable: message.html_visualization.present? + ) + end + + def self.collapsed? + # TODO urcit podmienky: odoslana sprava s potvrdenkou by mohla byt collapsed + false + end +end diff --git a/app/models/fs/message_draft.rb b/app/models/fs/message_draft.rb index c23776006..b3a8d8ac6 100644 --- a/app/models/fs/message_draft.rb +++ b/app/models/fs/message_draft.rb @@ -53,7 +53,8 @@ def self.create_and_validate_with_fs_form(form_files: [], author:, fs_client: Fs delivered_at: Time.now, metadata: { 'status': 'being_loaded', - 'fs_form_id': fs_form.id + 'fs_form_id': fs_form.id, + 'correlation_id': SecureRandom.uuid }, author: author ) @@ -102,13 +103,7 @@ def attachments_allowed? end def build_html_visualization - return self.html_visualization if self.html_visualization.present? - - return unless form&.xslt_txt - return unless form_object&.unsigned_content - - template = Nokogiri::XSLT(form.xslt_txt) - template.transform(form_object.xml_unsigned_content) + Fs::MessageHelper.build_html_visualization_from_form(self) end def form diff --git a/app/models/govbox/message.rb b/app/models/govbox/message.rb index 1de014cbd..73cc9da8c 100644 --- a/app/models/govbox/message.rb +++ b/app/models/govbox/message.rb @@ -43,11 +43,10 @@ def self.create_message_with_thread!(govbox_message) message.save! create_message_objects(message, govbox_message.payload) - add_upvs_related_tags(message, govbox_message) if message_draft - copy_tags_from_draft(message, message_draft) + message.copy_tags_from_draft(message_draft) message_draft.destroy end @@ -148,15 +147,6 @@ def self.add_upvs_related_tags(message, govbox_message) add_delivery_notification_tag(message) if message.can_be_authorized? end - def self.copy_tags_from_draft(message, message_draft) - message_draft.objects.map do |message_draft_object| - message_object = message.objects.find_by(uuid: message_draft_object.uuid) - message_draft_object.tags.signed.each { |tag| message_object.assign_tag(tag) } - end - - (message_draft.tags.simple + message_draft.tags.signed).each { |tag| message.assign_tag(tag) } - end - def self.add_delivery_notification_tag(message) message.add_cascading_tag(delivery_notification_tag(message)) end diff --git a/app/models/message.rb b/app/models/message.rb index edd77d2ce..e2e1eaa11 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -100,8 +100,10 @@ def any_objects_with_requested_signature? MessageObjectsTag.where(message_object: objects, tag: tenant.tags.signature_requesting).exists? end - # TODO remove UPVS stuff from core domain + # TODO remove UPVS, FS stuff from core domain def form + return ::Fs::Form.find(metadata['fs_form_id']) if metadata['fs_form_id'].present? + ::Upvs::Form.find_by( identifier: all_metadata['posp_id'], version: all_metadata['posp_version'] @@ -128,6 +130,19 @@ def build_html_visualization template.transform(form_object.xml_unsigned_content) end + def copy_tags_from_draft(message_draft) + message_draft.objects.map do |message_draft_object| + message_object = objects.find_by(uuid: message_draft_object.uuid) + message_draft_object.tags.signed.each { |tag| message_object.assign_tag(tag) } + end + + (message_draft.tags.simple + message_draft.tags.signed).each { |tag| assign_tag(tag) } + end + + def assign_tag(tag) + messages_tags.find_or_create_by!(tag: tag) + end + def all_metadata metadata.merge(template&.metadata || {}) end diff --git a/app/models/message_object.rb b/app/models/message_object.rb index 30215df7a..1b0452600 100644 --- a/app/models/message_object.rb +++ b/app/models/message_object.rb @@ -23,6 +23,8 @@ class MessageObject < ApplicationRecord has_many :tags, through: :message_objects_tags has_one :archived_object, dependent: :destroy + delegate :tenant, to: :message + scope :unsigned, -> { where(is_signed: false) } validates :name, presence: { message: "Name can't be blank" }, on: :validate_data @@ -85,6 +87,10 @@ def remove_signature_requested_from_group(group) thread.remove_signature_requested_from_group(group) end + def automation_rules_for_event(event) + tenant.automation_rules.where(trigger_event: event) + end + def content message_object_datum&.blob end @@ -136,6 +142,10 @@ def xml? Utils::XML_MIMETYPES.any? { |xml_mimetype| xml_mimetype == Utils.mimetype_without_optional_params(mimetype) } end + def thread + message.thread + end + private def allowed_mimetype? @@ -154,10 +164,6 @@ def unassign_tag(tag) message_objects_tags.find_by(tag: tag)&.destroy end - def thread - message.thread - end - def remove_object_related_tags_from_thread tags.each do |tag| thread.unassign_tag(tag) unless other_thread_objects_include_tag?(tag) diff --git a/app/models/nested_message_object.rb b/app/models/nested_message_object.rb index b6278c08a..051b00fd5 100644 --- a/app/models/nested_message_object.rb +++ b/app/models/nested_message_object.rb @@ -16,7 +16,7 @@ class NestedMessageObject < ApplicationRecord belongs_to :message_object, inverse_of: :nested_message_objects - delegate :message, to: :message_object + delegate :message, :form?, to: :message_object validates :name, presence: true, on: :validate_data diff --git a/app/views/fs/messages/_delivery_report.html.erb b/app/views/fs/messages/_delivery_report.html.erb new file mode 100644 index 000000000..a89b9b130 --- /dev/null +++ b/app/views/fs/messages/_delivery_report.html.erb @@ -0,0 +1,90 @@ +<%= render partial: "fs/messages/style" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <% if message.metadata['fs_other_attributes']&.present? %> + <%# message.metadata['fs_other_attributes'].each do |k, v| %> + + + + + + + <%# end %> + <% end %> + +
Typ dokumentu: + <%= message.title %> +
Daňový subjekt: + <%= message.recipient_name %> +
Identifikátor subjektu: + <%= message.metadata['dic'] %> +
Odosielateľ podania: + <%= message.metadata['fs_submitting_subject'] %> +
Evidenčné číslo podania: + <%= message.metadata['fs_sent_message_id'] %> +
Evidenčné číslo potvrdenia: + <%= message.metadata['fs_message_id'] %> +
Dátum a čas prijatia EP: + + + +
Dátum a čas vystavenia potvrdenky: + + + +
Obdobie: + <%= message.metadata['fs_period'] %> +
Stav spracovania: + <%= message.metadata['fs_submission_status'] %> +
Dôvod zmeny stavu podania: + <%= message.metadata['fs_dismissal_reason'] %> +
diff --git a/app/views/fs/messages/_generic_message.html.erb b/app/views/fs/messages/_generic_message.html.erb new file mode 100644 index 000000000..bbfdb7064 --- /dev/null +++ b/app/views/fs/messages/_generic_message.html.erb @@ -0,0 +1,67 @@ +<%= render partial: "fs/messages/style" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <% if message.metadata['fs_other_attributes']&.present? %> + <%# message.metadata['fs_other_attributes'].each do |k, v| %> + + + + + + + <%# end %> + <% end %> + +
Typ dokumentu: + <%= message.title %> +
Daňový subjekt: + <%= message.recipient_name %> +
DIČ: + <%= message.metadata['dic'] %> +
Odosielateľ podania: + <%= message.metadata['fs_submitting_subject'] %> +
Evidenčné číslo podania: + <%= message.metadata['fs_sent_message_id'] %> +
Evidenčné číslo zásielky: + <%= message.metadata['fs_message_id'] %> +
Dátum a čas prijatia EP: + + + +
Stav spracovania: + <%= message.metadata['fs_submission_status'] %> +
diff --git a/app/views/fs/messages/_style.html.erb b/app/views/fs/messages/_style.html.erb new file mode 100644 index 000000000..01fa83fad --- /dev/null +++ b/app/views/fs/messages/_style.html.erb @@ -0,0 +1,11 @@ + diff --git a/app/views/fs/messages/_submission.html.erb b/app/views/fs/messages/_submission.html.erb new file mode 100644 index 000000000..75e12086d --- /dev/null +++ b/app/views/fs/messages/_submission.html.erb @@ -0,0 +1,62 @@ +<%= render partial: "fs/messages/style" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <% if message.metadata['fs_other_attributes']&.present? %> + <%# message.metadata['fs_other_attributes'].each do |k, v| %> + + + + + + + <%# end %> + <% end %> + +
Identifikátor subjektu: + <%= message.metadata['dic'] %> +
Daňový subjekt: + <%= message.recipient_name %> +
Evidenčné číslo podania: + <%= message.metadata['fs_message_id'] %> +
Dátum podania: + + + +
Typ podania: + <%= message.title %> +
Stav spracovania: + <%= message.metadata['fs_status'] %> +
Obdobie: + <%= message.metadata['fs_period'] %> +
diff --git a/config/application.rb b/config/application.rb index 7c8103a65..1a61347b4 100644 --- a/config/application.rb +++ b/config/application.rb @@ -39,11 +39,17 @@ class Application < Rails::Application if ENV['AUTO_SYNC_BOXES'] == "ON" config.good_job.cron = { sync_boxes: { - cron: "1 */2 * * *", # run every 2 hours, "00:01", "02:01", "04:01", ... + cron: "1 */2 * * *", # run every 2 hours (even), "00:01", "02:01", "04:01", ... class: "Govbox::SyncAllBoxesJob", description: "Regular job to synchronize all boxes" } } + + config.good_job.cron['sync_fs_boxes'] = { + cron: "1 1-23/2 * * *", # run every 2 hours (odd), "01:01", "03:01", "05:01", ... + class: "Fs::SyncAllBoxesJob", + description: "Regular job to synchronize all boxes" + } end config.good_job.cron['check_messages_mapping'] = { diff --git a/config/brakeman.ignore b/config/brakeman.ignore index 670a84ea1..07899f2d2 100644 --- a/config/brakeman.ignore +++ b/config/brakeman.ignore @@ -34,78 +34,10 @@ ], "note": "" }, - { - "warning_type": "Dynamic Render Path", - "warning_code": 15, - "fingerprint": "206fab310dd6225cc18046a3fa3d8d2e15898077ebf7140753f6104ac8952297", - "check_name": "Render", - "message": "Render path contains parameter value", - "file": "app/views/admin/boxes/show.html.erb", - "line": 6, - "link": "https://brakemanscanner.org/docs/warning_types/dynamic_render_path/", - "code": "render(action => policy_scope([:admin, Box]).find(params[:id]), {})", - "render_path": [ - { - "type": "controller", - "class": "Admin::BoxesController", - "method": "show", - "line": 12, - "file": "app/controllers/admin/boxes_controller.rb", - "rendered": { - "name": "admin/boxes/show", - "file": "app/views/admin/boxes/show.html.erb" - } - } - ], - "location": { - "type": "template", - "template": "admin/boxes/show" - }, - "user_input": "params[:id]", - "confidence": "Weak", - "cwe_id": [ - 22 - ], - "note": "" - }, - { - "warning_type": "Dynamic Render Path", - "warning_code": 15, - "fingerprint": "b8a2fb69d5ae58b1a2ef3054ed2a602436392f1db28b5ef31c0ec249e0fec16a", - "check_name": "Render", - "message": "Render path contains parameter value", - "file": "app/views/admin/tenants/show.html.erb", - "line": 14, - "link": "https://brakemanscanner.org/docs/warning_types/dynamic_render_path/", - "code": "render(action => policy_scope([:admin, Tenant]).find(params[:id]), {})", - "render_path": [ - { - "type": "controller", - "class": "Admin::TenantsController", - "method": "show", - "line": 14, - "file": "app/controllers/admin/tenants_controller.rb", - "rendered": { - "name": "admin/tenants/show", - "file": "app/views/admin/tenants/show.html.erb" - } - } - ], - "location": { - "type": "template", - "template": "admin/tenants/show" - }, - "user_input": "params[:id]", - "confidence": "Weak", - "cwe_id": [ - 22 - ], - "note": "" - }, { "warning_type": "Command Injection", "warning_code": 14, - "fingerprint": "c1018a403b5a7f84904363f04760e551a83a6bca134e1db236f9d671e4e6ca91", + "fingerprint": "fe57f090ca3980a1ef5fd94f8a3634bb41c543d20c13d72dd32409eef5e433f4", "check_name": "Execute", "message": "Possible command injection", "file": "app/models/concerns/pdf_visualization_operations.rb", @@ -116,7 +48,7 @@ "location": { "type": "method", "class": "PdfVisualizationOperations", - "method": "prepare_pdf_visualization" + "method": "prepare_pdf_visualization_from_template" }, "user_input": "Tempfile.new(\"#{id}.xml\").path", "confidence": "Medium", @@ -126,6 +58,6 @@ "note": "" } ], - "updated": "2024-05-07 14:18:46 +0200", - "brakeman_version": "6.1.2" + "updated": "2024-10-23 11:37:22 +0200", + "brakeman_version": "6.2.1" } diff --git a/config/locales/sk.yml b/config/locales/sk.yml index c71fb833c..2a55fd232 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -262,6 +262,9 @@ sk: recipient_name: "Prijímateľ" sender_uri: "URI odosielateľa" recipient_uri: "URI prijímateľa" + object_type: "Typ objektu" + fs_submission_status: "Stav podania" + fs_message_type: "Typ správy" box: "Schránka správy" attachment: "Príloha" boxes: @@ -271,9 +274,11 @@ sk: message_updated: "Upravená správa" message_thread_changed: "Zmena vo vlákne správ" message_draft_submitted: "Odoslaná správa" + message_object_downloaded: "Stiahnutý objekt správy" "Automation::ContainsCondition": "obsahuje" "Automation::AttachmentContentContainsCondition": "obsahuje" "Automation::MetadataValueCondition": "v metadátach obsahuje" + "Automation::MessageMetadataValueCondition": "správa v metadátach obsahuje" "Automation::BoxCondition": "je" "Automation::AddMessageThreadTagAction": "Pridaj štítok na vlákno" "Automation::AddTagAction": "Pridaj štítok" diff --git a/db/migrate/20241016143429_format_fs_messages_html_visualizations.rb b/db/migrate/20241016143429_format_fs_messages_html_visualizations.rb new file mode 100644 index 000000000..fd71d86a7 --- /dev/null +++ b/db/migrate/20241016143429_format_fs_messages_html_visualizations.rb @@ -0,0 +1,9 @@ +class FormatFsMessagesHtmlVisualizations < ActiveRecord::Migration[7.1] + include ActionView::Helpers::TextHelper + + def up + Fs::MessageDraft.find_each do |message_draft| + message_draft.update(html_visualization: simple_format(message_draft.html_visualization)) + end + end +end diff --git a/db/migrate/20241022135615_add_submission_type_identifier_to_fs_forms.rb b/db/migrate/20241022135615_add_submission_type_identifier_to_fs_forms.rb new file mode 100644 index 000000000..80e83b448 --- /dev/null +++ b/db/migrate/20241022135615_add_submission_type_identifier_to_fs_forms.rb @@ -0,0 +1,7 @@ +class AddSubmissionTypeIdentifierToFsForms < ActiveRecord::Migration[7.1] + def change + add_column :fs_forms, :submission_type_identifier, :string + + Fs::FetchFormsJob.perform_later + end +end diff --git a/db/migrate/20241106152337_index_on_messages_fs_message_id_metadata.rb b/db/migrate/20241106152337_index_on_messages_fs_message_id_metadata.rb new file mode 100644 index 000000000..5d8a1e1a8 --- /dev/null +++ b/db/migrate/20241106152337_index_on_messages_fs_message_id_metadata.rb @@ -0,0 +1,9 @@ +class IndexOnMessagesFsMessageIdMetadata < ActiveRecord::Migration[7.1] + def up + execute "CREATE INDEX index_messages_on_metadata_fs_message_id ON messages USING HASH (((metadata->>'fs_message_id')::text))" + end + + def down + remove_index :messages, name: :index_messages_on_metadata_fs_message_id + end +end diff --git a/db/schema.rb b/db/schema.rb index 1b82c0a91..60d636cfb 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_10_29_064753) do +ActiveRecord::Schema[7.1].define(version: 2024_11_06_152337) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" enable_extension "plpgsql" @@ -233,6 +233,7 @@ t.integer "number_identifier" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.string "submission_type_identifier" end create_table "good_job_batches", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| @@ -483,6 +484,7 @@ t.bigint "author_id" t.boolean "collapsed", default: false, null: false t.boolean "outbox", default: false, null: false + t.index "((metadata ->> 'fs_message_id'::text))", name: "index_messages_on_metadata_fs_message_id", using: :hash t.index ["author_id"], name: "index_messages_on_author_id" t.index ["import_id"], name: "index_messages_on_import_id" t.index ["message_thread_id"], name: "index_messages_on_message_thread_id" diff --git a/package.json b/package.json index e8894a76f..529308ac5 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "@hotwired/turbo-rails": "^7.0.0", "@rails/request.js": "^0.0.9", "esbuild": "^0.19.8", + "puppeteer": "^23.6.0", "tailwindcss-stimulus-components": "^4.0.4" }, "scripts": { diff --git a/test/fixtures/fs/form_related_documents.yml b/test/fixtures/fs/form_related_documents.yml index db573050f..1af00d39a 100644 --- a/test/fixtures/fs/form_related_documents.yml +++ b/test/fixtures/fs/form_related_documents.yml @@ -1,5 +1,1308 @@ # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html +V2Pv21_xsd: + document_type: CLS_F_XSD_EDOC + language: sk + form: V2Pv21 + data: | + + + + + + V2Pv21 vyhlasenie a potvrdenie + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +V2Pv21_txt_xslt: + document_type: CLS_F_XSLT_TXT_SGN + language: sk + form: V2Pv21 + data: | + + + + + + V2Pv21 + + + + + + VYHLÁSENIE + + + + + + + [01] - Rodné číslo + + + + + + + + + Pred lomítkom: + + + + + + + + + + + + + + Za lomítkom: + + + + + + + + + + + + + [02] - Dátum narodenia: + + + + + + + + + + + + + Rok: + + + + + + + + + + + + I. ODDIEL - ÚDAJE O DAŇOVNÍKOVI + + + + + + + + + [03] - Priezvisko: + + + + + + + + + + + + + + [04] - Meno: + + + + + + + + + + + + + + [05] - Titul pred menom: + + + + + + + + + + + + + + [05] - Titul za priezviskom: + + + + + + + + + + + + + Adresa trvalého pobytu + + + + + + + + + + [06] - Ulica: + + + + + + + + + + + + + + + [07] - Súpisné/orientačné číslo: + + + + + + + + + + + + + + + [08] - PSČ: + + + + + + + + + + + + + + + [09] - Obec: + + + + + + + + + + + + + + + [10] - Štát: + + + + + + + + + + + + + + [11] - Telefónne číslo: + + + + + + + + + + + + + + [12] - Zaplatená daň, z ktorej sa vypočíta suma do výšky 2 % resp. 3 % 1) zaplatenej dane: + + + + + + + + + + + + + + [13] - Suma do výšky 2 % resp. 3 % 1) zo zaplatenej dane z r. 12 (min. 3 eurá): + + + + + + + + + + + + + + [14] - Dátum zaplatenia dane: + + + + + + + + + + + + + + spĺňam podmienky na poukázanie 3% z dane: + + + + + + + + + + + + II. ODDIEL - ÚDAJE O PRIJÍMATEĽOVI + + + + + + + + + [15] - IČO: + + + + + + + + + + + + + [16] - Obchodné meno (názov) + + + + + + + + + + riadok: + + + + + + + + + + + + + súhlasím so zaslaním údajov (meno, priezvisko a trvalý pobyt) mnou určenému príjmateľovi podielu + zaplatenej dane uvedenému v II. oddiele podľa § 50 ods. 8 zákona: + + + + + + + + + + + + + + Dátum: + + + + + + + + + + + + + Vyhlasujem, že uvedené údaje v tomto vyhlásení sú pravdivé: + + + + + + + + + + + POTVRDENIE + + + + + + + [01] - Rodné číslo + + + + + + + + + Pred lomítkom: + + + + + + + + + + + + + + Za lomítkom: + + + + + + + + + + + + + [02] - Dátum narodenia: + + + + + + + + + + + + + Rok: + + + + + + + + + + + + I. ÚDAJE O ZAMESTNANCOVI + + + + + + + + + [03] - Priezvisko: + + + + + + + + + + + + + + [04] - Meno: + + + + + + + + + + + + + + [05] - Titul pred menom: + + + + + + + + + + + + + + [05] - Titul za priezviskom: + + + + + + + + + + + + + Adresa trvalého pobytu + + + + + + + + + + [06] - Ulica: + + + + + + + + + + + + + + + [07] - Súpisné/orientačné číslo: + + + + + + + + + + + + + + + [08] - PSČ: + + + + + + + + + + + + + + + [09] - Obec: + + + + + + + + + + + + + + + [10] - Štát: + + + + + + + + + + + + II. ÚDAJE O ZAMESTNÁVATEĽOVI + + + + + + + + + [11] - Daňové identifikačné číslo: + + + + + + + + + + + + + Fyzická osoba + + + + + + + + + + [12] - Priezvisko: + + + + + + + + + + + + + + + [13] - Meno: + + + + + + + + + + + + + + + [14] - Titul pred menom: + + + + + + + + + + + + + + + [14] - Titul za priezviskom: + + + + + + + + + + + + + [15] - Obchodné meno alebo názov + + + + + + + + + + riadok: + + + + + + + + + + + + + Trvalý pobyt (fyzická osoba) alebo sídlo (právnická osoba) + + + + + + + + + + [16] - Ulica: + + + + + + + + + + + + + + + [17] - Súpisné/orientačné číslo: + + + + + + + + + + + + + + + [18] - PSČ: + + + + + + + + + + + + + + + [19] - Obec: + + + + + + + + + + + + + + + [20] - Štát: + + + + + + + + + + + + III. ÚDAJE O ZAPLATENÍ DANE Z PRÍJMOV ZO ZÁVISLEJ ČINNOSTI - v eurách + + + + + + + + + [21] - Daň – podľa § 15 zákona (z r. 06 ročného zúčtovania preddavkov na daň): + + + + + + + + + + + + + + [22] - Nárok na daňový bonus podľa § 33 zákona (z r. 09 ročného zúčtovania preddavkov na daň): + + + + + + + + + + + + + + [23] - Nárok na daňový bonus na zaplatené úroky podľa § 33a zákona (z r. 15 ročného zúčtovania preddavkov na daň): + + + + + + + + + + + + + + [24] - Daň znížená o daňový bonus (§ 33 zákona) a daňový bonus na zaplatené úroky (§ 33a zákona) (r. 21 - r. 22 - r. 23 ) > 0: + + + + + + + + + + + + + + [25] - Daň na úhradu (z r. 21 ročného zúčtovania preddavkov na daň): + + + + + + + + + + + + + + [26] - Daň na úhradu (z r. 25 tohto potvrdenia), zrazená zamestnancovi alebo zaplatená zamestnancom v lehote do podania vyhlásenia o poukázaní podielu zaplatenej dane z príjmov fyzickej osoby v úhrnnej sume: + + + + + + + + + + + + + + Dňa: + + + + + + + + + + + + Vypracoval + + + + + + + + + Potvrdenie vypracoval(a): + + + + + + + + + + + + + + Dátum: + + + + + + + + + + + + + + Potvrdzujeme týmto, že údaje uvedené v potvrdení sú pravdivé: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Áno + + + Áno + + + Nie + + + Nie + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VP_DANv24_xsd: document_type: CLS_F_XSD_EDOC language: sk @@ -1060,3 +2363,1560 @@ VP_DANv24_txt_xslt: +PREHLADv24_xsd: + document_type: CLS_F_XSD_EDOC + language: sk + form: PREHLADv24 + data: | + + + + + PREHLAD_2024 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PREHLADv24_txt_xslt: + document_type: CLS_F_XSLT_TXT_SGN + language: sk + form: PREHLADv24 + data: | + + + + + + PREHLADv24 - Prehľad o zrazených a odvedených preddavkoch na daň (platný od 1.1.2024) + + + + + + + + + + + + + + + + + + + + + + + + Druh prehľadu + + + + + + + + Zdaňovacie obdobie + + + + + + + + Fyzická osoba + + + + + + + + + + Právnická osoba + + + + + + + + Sídlo (právnická osoba), trvalý pobyt (fyzická osoba) + + + + + + + + + + + Údaje o osobe, ktorá podáva prehľad za zamestnávateľa + + + + + + + + + + + + + + + + + + + + + + + + + + + I. časť - Preddavky na daň + + + + + + + + + + + + + + + + + + 1. Zrazené preddavky na daň zo zúčtovaných a vyplatených zdaniteľných miezd (vrátane + príjmov zo sociálneho fondu) v peňažnej aj v nepeňažnej forme za za mesiac + + + + + + + + + + 1a. Suma preddavkov na daň z príjmov podľa § 5 ods. 4 zákona + + + + + + + + II. časť - Rekapitulácia - daňový bonus a zamestnanecká prémia + + + + + + + + + + + + III. časť - ŽIADOSŤ O POUKÁZANIE SUMY ROZDIELU DAŇOVÉHO BONUSU ALEBO ZAMESTNANECKEJ PRÉMIE + - vyplňuje sa v treťom mesiaci príslušného kalendárneho štvrťroka za celý kalendárny + štvrťrok + + + + + + + + + + + + + Žiadame o poukázanie sumy rozdielu daňového bonusu (§ 35 ods. 7 zákona) + + + + + + + + + Žiadame o poukázanie sumy rozdielu zamestnaneckej prémie (§ 38 ods. 6 zákona) + + + + + + + + + + Žiadame o poukázanie sumy rozdielu daňového bonusu na zaplatené úroky podľa § 33a + zákona (§ 38 ods. 6 zákona) + + + + + + + + + + Spôsob platby + + + + + + + + + + IBAN: + + + + + + + + + + + + + Bankový účet + + + + + + + + + Vyhlasujem, že všetky údaje uvedené v prehľade sú správne a úplné. + + + + + + + + + + + Daňové identifikačné číslo zamestnávateľa: + + + + + + + + + + + + + + riadny: + + + + + + + + + + + + + + opravný: + + + + + + + + + + + + + + Mesiac (1 - 12): + + + + + + + + + + + + + + Rok: + + + + + + + + + + + + + Dátum zistenia skutočnosti na podanie opravného prehľadu: + + + + + + + + + + + + + + Priezvisko: + + + + + + + + + + + + + + Meno: + + + + + + + + + + + + + + Titul pred menom: + + + + + + + + + + + + + + Titul za menom: + + + + + + + + + + + + + + Názov: + + + + + + + + + + + + + + Právna forma: + + + + + + + + + + + + + + Ulica: + + + + + + + + + + + + + + Súpisné / orientačné číslo: + + + + + + + + + + + + + + PSČ: + + + + + + + + + + + + + + Obec: + + + + + + + + + + + + + + Štát: + + + + + + + + + + + + + + Priezvisko: + + + + + + + + + + + + + + Meno: + + + + + + + + + + + + + + Titul pred menom: + + + + + + + + + + + + + + Titul za menom: + + + + + + + + + + + + + + Rodné číslo: + + + + + + + + + + + + + + Dátum narodenia: + + + + + + + + + + + + + + DIČ: + + + + + + + + + + + + + + Názov: + + + + + + + + + + + + + + Právna forma: + + + + + + + + + + + + + + Ulica: + + + + + + + + + + + + + + Súpisné / orientačné číslo: + + + + + + + + + + + + + + PSČ: + + + + + + + + + + + + + + Obec: + + + + + + + + + + + + + + Štát: + + + + + + + + + + + + + Telefónne číslo: + + + + + + + + + + + + + Emailová adresa: + + + + + + + + + + + + + + 0. Zúčtované a vyplatené zdaniteľné príjmy zo závislej činnosti, vrátane + zdaniteľných príjmov zo sociálneho fondu v peňažnej aj v nepeňažnej forme za vykazovaný + kalendárny mesiac: + + + + + + + + + + + + + + + + Dátum: + + + + + + + + + + + + + + + Suma: + + + + + + + + + + + + + + + Dátum: + + + + + + + + + + + + + + + Suma: + + + + + + + + + + + + + + 2. Zrazené daňové nedoplatky (+) a vrátené daňové preplatky (-) z RZ za predchádzajúce + zdaňovacie obdobie: + + + + + + + + + + + + + + + 3. Daňové nedoplatky (+) a daňové preplatky (-) za predchádzajúce zdaňovacie + obdobia: + + + + + + + + + + + + + + + 4. Úhrn riadkov 1 až 3(r. 1 ± r.2 ± r. 3): + + + + + + + + + + + + + + 5. Priznaná a vyplatená suma (-) a vybratá suma (+) daňového bonusu, o ktorú sa + znižuje (zvyšuje) úhrnná suma preddavkov na daň a dane (vrátane vyplateného a vybratého + daňového bonusu zRZ alebo vykonaných opráv): + + + + + + + + + + + + + + + 6. Priznaná a vyplatená suma (-), a vybraná suma (+) zamestnaneckej prémie, o ktorú + sa znižuje (zvyšuje) úhrnná suma preddavkov na daň a dane (vrátane vykonaných opráv): + + + + + + + + + + + + + + + 7. Priznaná a vyplatená suma (-), a vybraná suma (+) daňového bonusu na zaplatené + úroky podľa § 33a zákona, o ktorú sa znižuje (zvyšuje) úhrnná suma preddavkov na + daň a dane (vrátane vykonaných opráv): + + + + + + + + + + + + + + + 8. Odvodová povinnosť - preddavky na daň (r. 4 ± r.5 ± r.6 ± r.7): + + + + + + + + + + + + + + + uplatňujeme postup podľa § 40 ods. 8 zákona: + + + + + + + + + + + + + + A Celková vyplatená suma daňového bonusu: + + + + + + + + + + + + + + B Suma daňového bonusu vyplatená z úhrnu zrazených preddavkov na daň a dane: + + + + + + + + + + + + + + + C Suma daňového bonusu vyplatená z prostriedkov zamestnávateľa: + + + + + + + + + + + + + + D Celková vyplatená suma zamestnaneckej prémie: + + + + + + + + + + + + + + E Suma zamestnaneckej prémie vyplatená z úhrnu zrazených preddavkov na daň a dane: + + + + + + + + + + + + + + + F Suma zamestnaneckej prémie vyplatená z prostriedkov zamestnávateľa: + + + + + + + + + + + + + + + Žiadame o poukázanie sumy rozdielu daňového bonusu (§ 35 ods. 7 zákona): + + + + + + + + + + + + + + + Suma: + + + + + + + + + + + + + + + Žiadame o poukázanie sumy rozdielu zamestnaneckej prémie (§ 38 ods. 6 zákona): + + + + + + + + + + + + + + + + Suma: + + + + + + + + + + + + + + + Žiadame o poukázanie sumy rozdielu daňového bonusu na zaplatené úroky podľa § + 33a zákona (§ 38 ods. 6 zákona): + + + + + + + + + + + + + + + + Suma: + + + + + + + + + + + + + + + Poštovou poukážkou: + + + + + + + + + + + + + + + Na účet: + + + + + + + + + + + + + Vypracoval: + + + + + + + + + + + + + Telefónne číslo: + + + + + + + + + + + + + Dátum: + + + + + + + + + + + + + + + + + + + + + + + + + Áno + + + Nie + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/yarn.lock b/yarn.lock index d2f0df489..4144e92d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,6 +7,29 @@ resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== +"@babel/code-frame@^7.0.0": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.25.7.tgz#438f2c524071531d643c6f0188e1e28f130cebc7" + integrity sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g== + dependencies: + "@babel/highlight" "^7.25.7" + picocolors "^1.0.0" + +"@babel/helper-validator-identifier@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz#77b7f60c40b15c97df735b38a66ba1d7c3e93da5" + integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== + +"@babel/highlight@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.7.tgz#20383b5f442aa606e7b5e3043b0b1aafe9f37de5" + integrity sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw== + dependencies: + "@babel/helper-validator-identifier" "^7.25.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@esbuild/android-arm64@0.19.8": version "0.19.8" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz#fb7130103835b6d43ea499c3f30cfb2b2ed58456" @@ -188,6 +211,20 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@puppeteer/browsers@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.4.0.tgz#a0dd0f4e381e53f509109ae83b891db5972750f5" + integrity sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g== + dependencies: + debug "^4.3.6" + extract-zip "^2.0.1" + progress "^2.0.3" + proxy-agent "^6.4.0" + semver "^7.6.3" + tar-fs "^3.0.6" + unbzip2-stream "^1.4.3" + yargs "^17.7.2" + "@rails/actioncable@^7.0": version "7.1.2" resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.1.2.tgz#d261ff4b72844f5af496671346ec478798f4ac2c" @@ -220,6 +257,51 @@ lodash.merge "^4.6.2" postcss-selector-parser "6.0.10" +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + +"@types/node@*": + version "22.7.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.8.tgz#a1dbf0dc5f71bdd2642fc89caef65d58747ce825" + integrity sha512-a922jJy31vqR5sk+kAdIENJjHblqcZ4RmERviFsER4WJcEONqxKcjNOlk0q7OUfrF5sddT+vng070cdfMlrPLg== + dependencies: + undici-types "~6.19.2" + +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + +agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -238,11 +320,71 @@ arg@^5.0.2: resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +ast-types@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + +b4a@^1.6.4: + version "1.6.7" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" + integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +bare-events@^2.0.0, bare-events@^2.2.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.0.tgz#305b511e262ffd8b9d5616b056464f8e1b3329cc" + integrity sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A== + +bare-fs@^2.1.1: + version "2.3.5" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.5.tgz#05daa8e8206aeb46d13c2fe25a2cd3797b0d284a" + integrity sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw== + dependencies: + bare-events "^2.0.0" + bare-path "^2.0.0" + bare-stream "^2.0.0" + +bare-os@^2.1.0: + version "2.4.4" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.4.4.tgz#01243392eb0a6e947177bb7c8a45123d45c9b1a9" + integrity sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ== + +bare-path@^2.0.0, bare-path@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.3.tgz#594104c829ef660e43b5589ec8daef7df6cedb3e" + integrity sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA== + dependencies: + bare-os "^2.1.0" + +bare-stream@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.3.1.tgz#812d48d5ddcbcbc44f8493d2dd00aa5e3604373b" + integrity sha512-Vm8kAeOcfzHPTH8sq0tHBnUqYrkXdroaBVVylqFT4cF5wnMfKEIxxy2jIGu2zKVNl9P8MAP9XBWwXJ9N2+jfEw== + dependencies: + streamx "^2.20.0" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +basic-ftp@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" + integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -263,11 +405,38 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer@^5.2.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + camelcase-css@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -283,6 +452,48 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chromium-bidi@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.8.0.tgz#ffd79dad7db1fcc874f1c55fcf46ded05a884269" + integrity sha512-uJydbGdTw0DEUjhoogGveneJVWX/9YuqkWePzMmkBYwtdAqo5d3J/ovNKFr+/2hWXYmYCr6it8mSSTIj6SS6Ug== + dependencies: + mitt "3.0.1" + urlpattern-polyfill "10.0.0" + zod "3.23.8" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -293,11 +504,47 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +data-uri-to-buffer@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" + integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== + +debug@4, debug@^4.1.1, debug@^4.3.4, debug@^4.3.6, debug@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" + +devtools-protocol@0.0.1354347: + version "0.0.1354347" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1354347.tgz#5cb509610b8f61fc69a31e5c810d5bed002d85ea" + integrity sha512-BlmkSqV0V84E2WnEnoPnwyix57rQxAM5SKJjf4TbYOCGLAWtz8CDH8RIaGOjPgPCXo2Mce3kxSY497OySidY3Q== + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -308,6 +555,30 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + esbuild@^0.19.8: version "0.19.8" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.8.tgz#ad05b72281d84483fa6b5345bd246c27a207b8f1" @@ -336,6 +607,58 @@ esbuild@^0.19.8: "@esbuild/win32-ia32" "0.19.8" "@esbuild/win32-x64" "0.19.8" +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escodegen@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +fast-fifo@^1.2.0, fast-fifo@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + fast-glob@^3.3.0: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" @@ -354,6 +677,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -361,6 +691,15 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -376,6 +715,28 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-uri@^6.0.1: + version "6.0.3" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.3.tgz#0d26697bc13cf91092e519aa63aa60ee5b6f385a" + integrity sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw== + dependencies: + basic-ftp "^5.0.2" + data-uri-to-buffer "^6.0.2" + debug "^4.3.4" + fs-extra "^11.2.0" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -402,6 +763,16 @@ glob@7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + hasown@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" @@ -409,6 +780,35 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" +http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +https-proxy-agent@^7.0.3, https-proxy-agent@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" + integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== + dependencies: + agent-base "^7.0.2" + debug "4" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -422,6 +822,19 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -441,6 +854,11 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -458,6 +876,37 @@ jiti@^1.19.1: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + lilconfig@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" @@ -488,6 +937,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -513,6 +967,16 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +mitt@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" + integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -527,6 +991,11 @@ nanoid@^3.3.7: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -542,13 +1011,52 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -once@^1.3.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" +pac-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz#0fb02496bd9fb8ae7eb11cfd98386daaac442f58" + integrity sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg== + dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" + agent-base "^7.0.2" + debug "^4.3.4" + get-uri "^6.0.1" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.5" + pac-resolver "^7.0.1" + socks-proxy-agent "^8.0.4" + +pac-resolver@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" + integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== + dependencies: + degenerator "^5.0.0" + netmask "^2.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -559,6 +1067,11 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -640,11 +1153,72 @@ postcss@^8.4.23: picocolors "^1.0.0" source-map-js "^1.0.2" +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proxy-agent@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.4.0.tgz#b4e2dd51dee2b377748aef8d45604c2d7608652d" + integrity sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + http-proxy-agent "^7.0.1" + https-proxy-agent "^7.0.3" + lru-cache "^7.14.1" + pac-proxy-agent "^7.0.1" + proxy-from-env "^1.1.0" + socks-proxy-agent "^8.0.2" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +puppeteer-core@23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-23.6.0.tgz#a3e1e09c05f47fb8ca2bc9d4ca200d18e3704303" + integrity sha512-se1bhgUpR9C529SgHGr/eyT92mYyQPAhA2S9pGtGrVG2xob9qE6Pbp7TlqiSPlnnY1lINqhn6/67EwkdzOmKqQ== + dependencies: + "@puppeteer/browsers" "2.4.0" + chromium-bidi "0.8.0" + debug "^4.3.7" + devtools-protocol "0.0.1354347" + typed-query-selector "^2.12.0" + ws "^8.18.0" + +puppeteer@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-23.6.0.tgz#7a3c01e7b6a43a950f3e13eb48a335f78a358768" + integrity sha512-l+Fgo8SVFSd51STtq2crz8t1Y3VXowsuR4zfR64qDOn6oggz7YIZauWiNR4IJjczQ6nvFs3S4cgng55/nesxTQ== + dependencies: + "@puppeteer/browsers" "2.4.0" + chromium-bidi "0.8.0" + cosmiconfig "^9.0.0" + devtools-protocol "0.0.1354347" + puppeteer-core "23.6.0" + typed-query-selector "^2.12.0" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + read-cache@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" @@ -659,6 +1233,16 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + resolve@^1.1.7, resolve@^1.22.2: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" @@ -680,11 +1264,75 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^8.0.2, socks-proxy-agent@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz#9071dca17af95f483300316f4b063578fa0db08c" + integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw== + dependencies: + agent-base "^7.1.1" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +streamx@^2.15.0, streamx@^2.20.0: + version "2.20.1" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.20.1.tgz#471c4f8b860f7b696feb83d5b125caab2fdbb93c" + integrity sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA== + dependencies: + fast-fifo "^1.3.2" + queue-tick "^1.0.1" + text-decoder "^1.1.0" + optionalDependencies: + bare-events "^2.2.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + sucrase@^3.32.0: version "3.34.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" @@ -698,6 +1346,13 @@ sucrase@^3.32.0: pirates "^4.0.1" ts-interface-checker "^0.1.9" +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -736,6 +1391,31 @@ tailwindcss@^3.3.3: resolve "^1.22.2" sucrase "^3.32.0" +tar-fs@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" + integrity sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w== + dependencies: + pump "^3.0.0" + tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^2.1.1" + bare-path "^2.1.0" + +tar-stream@^3.1.5: + version "3.1.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +text-decoder@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.1.tgz#e173f5121d97bfa3ff8723429ad5ba92e1ead67e" + integrity sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ== + thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -750,6 +1430,11 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -762,17 +1447,100 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== +tslib@^2.0.1: + version "2.8.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" + integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== + +typed-query-selector@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" + integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== + +unbzip2-stream@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +urlpattern-polyfill@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz#f0a03a97bfb03cdf33553e5e79a2aadd22cac8ec" + integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== + util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +ws@^8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yaml@^2.3.4: version "2.3.4" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +zod@3.23.8: + version "3.23.8" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" + integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==