diff --git a/.ruby-version b/.ruby-version
index 75a22a2..ef538c2 100644
--- a/.ruby-version
+++ b/.ruby-version
@@ -1 +1 @@
-3.0.3
+3.1.2
diff --git a/.yarnrc.yml b/.yarnrc.yml
index b6abd72..48ea3d4 100644
--- a/.yarnrc.yml
+++ b/.yarnrc.yml
@@ -1,3 +1,7 @@
nodeLinker: node-modules
+plugins:
+ - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
+ spec: "@yarnpkg/plugin-interactive-tools"
+
yarnPath: .yarn/releases/yarn-3.2.4.cjs
diff --git a/Gemfile b/Gemfile
index 3b90f58..60c118a 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,7 +3,7 @@
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
-ruby '3.0.3'
+ruby '3.1.2'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main'
gem 'rails', '~> 7.0', '>= 7.0.4'
@@ -15,12 +15,13 @@ gem 'puma', '~> 6.0'
# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
gem 'cssbundling-rails', '~> 1.1', '>= 1.1.1'
gem 'jsbundling-rails', '~> 1.0', '>= 1.0.3'
-gem 'sprockets-rails', '~> 3.4', '>= 3.4.2'
+gem 'propshaft', '~> 0.6.4'
+gem 'turbo-rails', '~> 1.3', '>= 1.3.2'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
# gem 'jbuilder', '~> 2.7'
# Use Redis adapter to run Action Cable in production
-# gem 'redis', '~> 4.0'
+gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
gem 'bcrypt', '~> 3.1.7'
@@ -67,4 +68,4 @@ group :development do
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
-gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby]
\ No newline at end of file
+gem 'tzinfo-data' # , platforms: %i[mingw mswin x64_mingw jruby]
diff --git a/Gemfile.lock b/Gemfile.lock
index 977bf59..c1dc298 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -166,6 +166,7 @@ GEM
marcel (1.0.2)
method_source (1.0.0)
mini_mime (1.1.2)
+ mini_portile2 (2.8.0)
minitest (5.16.3)
msgpack (1.6.0)
net-imap (0.3.1)
@@ -177,15 +178,19 @@ GEM
net-smtp (0.3.3)
net-protocol
nio4r (2.5.8)
- nokogiri (1.13.9-x64-mingw32)
- racc (~> 1.4)
- nokogiri (1.13.9-x86_64-linux)
+ nokogiri (1.13.9)
+ mini_portile2 (~> 2.8.0)
racc (~> 1.4)
pagy (5.10.1)
activesupport
parallel (1.22.1)
parser (3.1.2.1)
ast (~> 2.4.1)
+ propshaft (0.6.4)
+ actionpack (>= 7.0.0)
+ activesupport (>= 7.0.0)
+ rack
+ railties (>= 7.0.0)
pry (0.14.1)
coderay (~> 1.1)
method_source (~> 1.0)
@@ -276,19 +281,16 @@ GEM
rack (~> 2.0)
redis (>= 4.5.0, < 5)
smart_properties (1.17.0)
- sprockets (4.1.1)
- concurrent-ruby (~> 1.0)
- rack (> 1, < 3)
- sprockets-rails (3.4.2)
- actionpack (>= 5.2)
- activesupport (>= 5.2)
- sprockets (>= 3.0.0)
- sqlite3 (1.5.3-x64-mingw32)
- sqlite3 (1.5.3-x86_64-linux)
+ sqlite3 (1.5.3)
+ mini_portile2 (~> 2.8.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
thor (1.2.1)
timeout (0.3.0)
+ turbo-rails (1.3.2)
+ actionpack (>= 6.0.0)
+ activejob (>= 6.0.0)
+ railties (>= 6.0.0)
tzinfo (2.0.5)
concurrent-ruby (~> 1.0)
tzinfo-data (1.2022.6)
@@ -303,10 +305,11 @@ GEM
websocket-driver (0.7.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
- zeitwerk (2.6.1)
+ zeitwerk (2.6.3)
zlib (2.1.1)
PLATFORMS
+ x64-mingw-ucrt
x64-mingw32
x86_64-linux
@@ -328,12 +331,14 @@ DEPENDENCIES
letter_opener
lokalise_rails (~> 5.1)
pagy (~> 5.0)
+ propshaft (~> 0.6.4)
pry-rails
puma (~> 6.0)
pundit (~> 2.1)
rack-mini-profiler (~> 3.0)
rails (~> 7.0, >= 7.0.4)
rails-i18n (~> 7.0, >= 7.0.5)
+ redis (~> 4.0)
rubocop (~> 1.18)
rubocop-i18n (~> 3)
rubocop-performance (~> 1.11)
@@ -341,13 +346,13 @@ DEPENDENCIES
rubyXL (~> 3.4)
rubyzip (~> 2)
sidekiq (~> 6.5, >= 6.5.7)
- sprockets-rails (~> 3.4, >= 3.4.2)
sqlite3 (~> 1.4)
+ turbo-rails (~> 1.3, >= 1.3.2)
tzinfo-data
web-console (>= 4.1.0)
RUBY VERSION
- ruby 3.0.3p157
+ ruby 3.1.2p20
BUNDLED WITH
- 2.3.24
+ 2.3.7
diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js
deleted file mode 100644
index 105a3a3..0000000
--- a/app/assets/config/manifest.js
+++ /dev/null
@@ -1,3 +0,0 @@
-//= link_tree ../images
-//= link_tree ../builds
-//= link_tree ../builds
diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
index 7f87970..915cb98 100644
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -21,6 +21,8 @@ def index
end
end
+ def edit; end
+
def create
if params[:archive].present?
UserBulkImportJob.perform_later create_blob, current_user
@@ -30,8 +32,6 @@ def create
redirect_to admin_users_path
end
- def edit; end
-
def update
if @user.update user_params
flash[:success] = t '.success'
@@ -44,7 +44,7 @@ def update
def destroy
@user.destroy
flash[:success] = t '.success'
- redirect_to admin_users_path
+ redirect_to admin_users_path, status: :see_other
end
private
@@ -71,4 +71,4 @@ def authorize_user!
authorize(@user || User)
end
end
-end
\ No newline at end of file
+end
diff --git a/app/controllers/answers_controller.rb b/app/controllers/answers_controller.rb
index ee7c813..76beabe 100644
--- a/app/controllers/answers_controller.rb
+++ b/app/controllers/answers_controller.rb
@@ -10,15 +10,6 @@ class AnswersController < ApplicationController
before_action :authorize_answer!
after_action :verify_authorized
- def update
- if @answer.update answer_update_params
- flash[:success] = t '.success'
- redirect_to question_path(@question, anchor: dom_id(@answer))
- else
- render :edit
- end
- end
-
def edit; end
def create
@@ -32,10 +23,19 @@ def create
end
end
+ def update
+ if @answer.update answer_update_params
+ flash[:success] = t '.success'
+ redirect_to question_path(@question, anchor: dom_id(@answer))
+ else
+ render :edit, status: :unprocessable_entity
+ end
+ end
+
def destroy
@answer.destroy
flash[:success] = t '.success'
- redirect_to question_path(@question)
+ redirect_to question_path(@question), status: :see_other
end
private
diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb
index 2898d2f..d4aabce 100644
--- a/app/controllers/comments_controller.rb
+++ b/app/controllers/comments_controller.rb
@@ -27,7 +27,7 @@ def destroy
comment.destroy
flash[:success] = t '.success'
- redirect_to question_path(@question)
+ redirect_to question_path(@question), status: :see_other
end
private
diff --git a/app/controllers/password_resets_controller.rb b/app/controllers/password_resets_controller.rb
index 7f272ca..e5d956d 100644
--- a/app/controllers/password_resets_controller.rb
+++ b/app/controllers/password_resets_controller.rb
@@ -5,6 +5,8 @@ class PasswordResetsController < ApplicationController
before_action :check_user_params, only: %i[edit update]
before_action :set_user, only: %i[edit update]
+ def edit; end
+
def create
@user = User.find_by email: params[:email]
@@ -18,8 +20,6 @@ def create
redirect_to new_session_path
end
- def edit; end
-
def update
if @user.update user_params
flash[:success] = t '.success'
@@ -45,4 +45,4 @@ def set_user
redirect_to(new_session_path, flash: { warning: t('.fail') }) unless @user&.password_reset_period_valid?
end
-end
\ No newline at end of file
+end
diff --git a/app/controllers/questions_controller.rb b/app/controllers/questions_controller.rb
index ec00f89..1f32397 100644
--- a/app/controllers/questions_controller.rb
+++ b/app/controllers/questions_controller.rb
@@ -7,47 +7,47 @@ class QuestionsController < ApplicationController
before_action :authorize_question!
after_action :verify_authorized
+ def index
+ @tags = Tag.where(id: params[:tag_ids]) if params[:tag_ids]
+ @pagy, @questions = pagy Question.all_by_tags(@tags)
+ @questions = @questions.decorate
+ end
+
def show
load_question_answers
end
- def destroy
- @question.destroy
- flash[:success] = t('.success')
- redirect_to questions_path
+ def new
+ @question = Question.new
end
def edit; end
- def update
- if @question.update question_params
+ def create
+ @question = current_user.questions.build question_params
+ if @question.save
flash[:success] = t('.success')
redirect_to questions_path
else
- render :edit
+ render :new, status: :unprocessable_entity
end
end
- def index
- @tags = Tag.where(id: params[:tag_ids]) if params[:tag_ids]
- @pagy, @questions = pagy Question.all_by_tags(@tags)
- @questions = @questions.decorate
- end
-
- def new
- @question = Question.new
- end
-
- def create
- @question = current_user.questions.build question_params
- if @question.save
+ def update
+ if @question.update question_params
flash[:success] = t('.success')
redirect_to questions_path
else
- render :new
+ render :edit, status: :unprocessable_entity
end
end
+ def destroy
+ @question.destroy
+ flash[:success] = t('.success')
+ redirect_to questions_path, status: :see_other
+ end
+
private
def question_params
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index 952fce8..172c1c3 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -21,7 +21,7 @@ def create
def destroy
sign_out
flash[:success] = t '.success'
- redirect_to root_path
+ redirect_to root_path, status: :see_other
end
private
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index e2fb9af..94bff14 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -7,21 +7,12 @@ class UsersController < ApplicationController
before_action :authorize_user!
after_action :verify_authorized
- def edit; end
-
- def update
- if @user.update user_params
- flash[:success] = t '.success'
- redirect_to edit_user_path(@user)
- else
- render :edit
- end
- end
-
def new
@user = User.new
end
+ def edit; end
+
def create
@user = User.new user_params
if @user.save
@@ -33,6 +24,15 @@ def create
end
end
+ def update
+ if @user.update user_params
+ flash[:success] = t '.success'
+ redirect_to edit_user_path(@user)
+ else
+ render :edit
+ end
+ end
+
private
def set_user!
diff --git a/app/javascript/application.js b/app/javascript/application.js
index d044f27..78d9138 100644
--- a/app/javascript/application.js
+++ b/app/javascript/application.js
@@ -1,13 +1,11 @@
// Entry point for the build script in your package.json
-import Rails from "@rails/ujs"
-import Turbolinks from "turbolinks"
+import "@hotwired/turbo-rails"
import * as ActiveStorage from "@rails/activestorage"
import 'bootstrap/js/dist/dropdown'
import 'bootstrap/js/dist/collapse'
import './scripts/select'
-Rails.start()
-Turbolinks.start()
ActiveStorage.start()
+
diff --git a/app/javascript/scripts/select.js b/app/javascript/scripts/select.js
index 2f18bb5..e061a7a 100644
--- a/app/javascript/scripts/select.js
+++ b/app/javascript/scripts/select.js
@@ -3,13 +3,13 @@ import Translations from './i18n/select.json'
let selects = []
-document.addEventListener("turbolinks:before-cache", function() {
+document.addEventListener("turbo:before-cache", function() {
selects.forEach((select) => {
select.destroy()
})
})
-document.addEventListener("turbolinks:load", function() {
+const rerender = function() {
const i18n = Translations[document.querySelector('body').dataset.lang]
document.querySelectorAll('.js-multiple-select').forEach((element) => {
@@ -46,4 +46,7 @@ document.addEventListener("turbolinks:load", function() {
const el = new TomSelect(element, opts)
selects.push(el)
})
-})
\ No newline at end of file
+}
+
+document.addEventListener("turbo:load", rerender)
+document.addEventListener("turbo:render", rerender)
\ No newline at end of file
diff --git a/app/jobs/user_bulk_export_job.rb b/app/jobs/user_bulk_export_job.rb
index 624875e..79b3f9a 100644
--- a/app/jobs/user_bulk_export_job.rb
+++ b/app/jobs/user_bulk_export_job.rb
@@ -9,4 +9,4 @@ def perform(initiator)
Admin::UserMailer.with(user: initiator, stream: stream)
.bulk_export_done.deliver_now
end
-end
\ No newline at end of file
+end
diff --git a/app/jobs/user_bulk_import_job.rb b/app/jobs/user_bulk_import_job.rb
index 9126c5e..46383ca 100644
--- a/app/jobs/user_bulk_import_job.rb
+++ b/app/jobs/user_bulk_import_job.rb
@@ -10,4 +10,4 @@ def perform(archive_key, initiator)
else
Admin::UserMailer.with(user: initiator).bulk_import_done.deliver_now
end
-end
\ No newline at end of file
+end
diff --git a/app/mailers/admin/user_mailer.rb b/app/mailers/admin/user_mailer.rb
index a284ce4..db7253c 100644
--- a/app/mailers/admin/user_mailer.rb
+++ b/app/mailers/admin/user_mailer.rb
@@ -23,4 +23,4 @@ def bulk_export_done
mail to: @user.email, subject: I18n.t('admin.user_mailer.bulk_export_done.subject')
end
end
-end
\ No newline at end of file
+end
diff --git a/app/mailers/password_reset_mailer.rb b/app/mailers/password_reset_mailer.rb
index 2d1b90b..bef3e2a 100644
--- a/app/mailers/password_reset_mailer.rb
+++ b/app/mailers/password_reset_mailer.rb
@@ -6,4 +6,4 @@ def reset_email
mail to: @user.email, subject: I18n.t('password_reset_mailer.reset_email.subject')
end
-end
\ No newline at end of file
+end
diff --git a/app/models/concerns/recoverable.rb b/app/models/concerns/recoverable.rb
index 41bcc90..f3b244e 100644
--- a/app/models/concerns/recoverable.rb
+++ b/app/models/concerns/recoverable.rb
@@ -20,4 +20,4 @@ def password_reset_period_valid?
password_reset_token_sent_at.present? && Time.current - password_reset_token_sent_at <= 60.minutes
end
end
-end
\ No newline at end of file
+end
diff --git a/app/models/concerns/rememberable.rb b/app/models/concerns/rememberable.rb
index 7250b61..78634f4 100644
--- a/app/models/concerns/rememberable.rb
+++ b/app/models/concerns/rememberable.rb
@@ -26,4 +26,4 @@ def remember_token_authenticated?(remember_token)
BCrypt::Password.new(remember_token_digest).is_password?(remember_token)
end
end
-end
\ No newline at end of file
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index d45d2c4..3a6ad87 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -67,4 +67,4 @@ def password_complexity
def password_presence
errors.add(:password, :blank) if password_digest.blank?
end
-end
\ No newline at end of file
+end
diff --git a/app/services/user_bulk_export_service.rb b/app/services/user_bulk_export_service.rb
index 7f8e461..b7ba5f3 100644
--- a/app/services/user_bulk_export_service.rb
+++ b/app/services/user_bulk_export_service.rb
@@ -22,4 +22,4 @@ def output_stream
end
end
end
-end
\ No newline at end of file
+end
diff --git a/app/services/user_bulk_import_service.rb b/app/services/user_bulk_import_service.rb
index 2ca565b..384184a 100644
--- a/app/services/user_bulk_import_service.rb
+++ b/app/services/user_bulk_import_service.rb
@@ -56,4 +56,4 @@ def users_from(data)
password_confirmation: cells[2]
end
end
-end
\ No newline at end of file
+end
diff --git a/app/validators/email_validator.rb b/app/validators/email_validator.rb
index cf11a9d..3b6f860 100644
--- a/app/validators/email_validator.rb
+++ b/app/validators/email_validator.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class EmailValidator < ActiveModel::EachValidator
def validate_each(rec, att, val)
msg = I18n.t 'global.errors.invalid_format'
@@ -9,4 +11,4 @@ def validate_each(rec, att, val)
def valid_email?(value)
URI::MailTo::EMAIL_REGEXP.match? value
end
-end
\ No newline at end of file
+end
diff --git a/app/views/admin/users/_user.html.erb b/app/views/admin/users/_user.html.erb
index 0344eb8..ac4e597 100644
--- a/app/views/admin/users/_user.html.erb
+++ b/app/views/admin/users/_user.html.erb
@@ -7,6 +7,6 @@
<%= link_to 'Edit', edit_admin_user_path(user), class: 'btn btn-secondary' %>
<%= link_to 'Delete', admin_user_path(user), class: 'btn btn-danger',
- data: {method: :delete, confirm: t('global.dialog.you_sure')} %>
+ data: {turbo_method: :delete, turbo_confirm: t('global.dialog.you_sure')} %>
|
\ No newline at end of file
diff --git a/app/views/admin/users/index.html.erb b/app/views/admin/users/index.html.erb
index b6a4b53..075ffec 100644
--- a/app/views/admin/users/index.html.erb
+++ b/app/views/admin/users/index.html.erb
@@ -5,7 +5,7 @@
<%= link_to t('.download_zipped'), admin_users_path(format: :zip),
- class: 'btn btn-secondary', data: {confirm: t('global.dialog.you_sure')} %>
+ class: 'btn btn-secondary', data: {turbo_confirm: t('global.dialog.you_sure')} %>
<%= pagination @pagy %>
diff --git a/app/views/answers/_answer.html.erb b/app/views/answers/_answer.html.erb
index 7c21fa3..40eba96 100644
--- a/app/views/answers/_answer.html.erb
+++ b/app/views/answers/_answer.html.erb
@@ -24,7 +24,7 @@
<% end %>
<% if policy(answer).destroy? %>
<%= link_to t('global.button.delete'), question_answer_path(question, answer), class: 'btn btn-danger btn-sm',
- data: {method: :delete, confirm: t('global.dialog.you_sure')} %>
+ data: {turbo_method: :delete, turbo_confirm: t('global.dialog.you_sure')} %>
<% end %>
diff --git a/app/views/comments/_comment.html.erb b/app/views/comments/_comment.html.erb
index fdb9b82..76ecd16 100644
--- a/app/views/comments/_comment.html.erb
+++ b/app/views/comments/_comment.html.erb
@@ -16,7 +16,7 @@
<%= link_to t('global.button.delete'),
polymorphic_path([comment.commentable, comment]),
class: 'btn btn-danger btn-sm',
- data: {method: :delete, confirm: t('global.dialog.you_sure')} %>
+ data: {turbo_method: :delete, turbo_confirm: t('global.dialog.you_sure')} %>
<% end %>
diff --git a/app/views/questions/_question.html.erb b/app/views/questions/_question.html.erb
index 4814cf6..982e18b 100644
--- a/app/views/questions/_question.html.erb
+++ b/app/views/questions/_question.html.erb
@@ -28,7 +28,7 @@
<% end %>
<% if policy(question).destroy? %>
<%= link_to t('global.button.delete'), question_path(question), class: 'btn btn-danger',
- data: {method: :delete, confirm: t('global.dialog.you_sure')} %>
+ data: {turbo_method: :delete, turbo_confirm: t('global.dialog.you_sure')} %>
<% end %>
diff --git a/app/views/questions/show.html.erb b/app/views/questions/show.html.erb
index 767b8d6..5356932 100644
--- a/app/views/questions/show.html.erb
+++ b/app/views/questions/show.html.erb
@@ -26,7 +26,7 @@
<% end %>
<% if policy(@question).destroy? %>
<%= link_to t('global.button.delete'), question_path(@question), class: 'btn btn-danger',
- data: {method: :delete, confirm: t('global.dialog.you_sure')} %>
+ data: {turbo_method: :delete, turbo_confirm: t('global.dialog.you_sure')} %>
<% end %>
diff --git a/app/views/shared/_menu.html.erb b/app/views/shared/_menu.html.erb
index 2226d2e..12ae28c 100644
--- a/app/views/shared/_menu.html.erb
+++ b/app/views/shared/_menu.html.erb
@@ -57,7 +57,7 @@
<%= link_to t('menu.log_out'), session_path,
- class: 'dropdown-item', data: {method: :delete} %>
+ class: 'dropdown-item', data: {turbo_method: :delete} %>
diff --git a/config/boot.rb b/config/boot.rb
index 988a5dd..c04863f 100644
--- a/config/boot.rb
+++ b/config/boot.rb
@@ -1,4 +1,6 @@
-ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+# frozen_string_literal: true
-require "bundler/setup" # Set up gems listed in the Gemfile.
-require "bootsnap/setup" # Speed up boot time by caching expensive operations.
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
+
+require 'bundler/setup' # Set up gems listed in the Gemfile.
+require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
diff --git a/config/cable.yml b/config/cable.yml
index 7a4e07c..1b07e6b 100644
--- a/config/cable.yml
+++ b/config/cable.yml
@@ -1,5 +1,6 @@
development:
- adapter: async
+ adapter: redis
+ url: redis://localhost:6379/1
test:
adapter: test
diff --git a/config/environment.rb b/config/environment.rb
index cac5315..d5abe55 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -1,5 +1,7 @@
+# frozen_string_literal: true
+
# Load the Rails application.
-require_relative "application"
+require_relative 'application'
# Initialize the Rails application.
Rails.application.initialize!
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 2bc7d20..2c1718a 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -86,4 +86,4 @@
# Uncomment if you wish to allow Action Cable access from any origin.
# config.action_cable.disable_request_forgery_protection = true
end
-# rubocop:enable Metrics/BlockLength
\ No newline at end of file
+# rubocop:enable Metrics/BlockLength
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 41e2def..0b69592 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -120,4 +120,4 @@
# in a proc. See guides for an example.
# config.active_record.shard_selector = { lock: true }
# config.active_record.shard_resolver = ->(request) { Tenant.find_by!(host: request.host).shard }
-end
\ No newline at end of file
+end
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 6ea4d1e..8f3f63c 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -1,4 +1,6 @@
-require "active_support/core_ext/integer/time"
+# frozen_string_literal: true
+
+require 'active_support/core_ext/integer/time'
# The test environment is used exclusively to run your application's
# test suite. You never need to work with it otherwise. Remember that
@@ -14,12 +16,12 @@
# Eager loading loads your whole application. When running a single test locally,
# this probably isn't necessary. It's a good idea to do in a continuous integration
# system, or in some way before deploying your code.
- config.eager_load = ENV["CI"].present?
+ config.eager_load = ENV['CI'].present?
# Configure public file server for tests with Cache-Control for performance.
config.public_file_server.enabled = true
config.public_file_server.headers = {
- "Cache-Control" => "public, max-age=#{1.hour.to_i}"
+ 'Cache-Control' => "public, max-age=#{1.hour.to_i}"
}
# Show full error reports and disable caching.
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
index 34a9f58..a9aa86b 100644
--- a/config/initializers/assets.rb
+++ b/config/initializers/assets.rb
@@ -1,13 +1,15 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
# Version of your assets, change this if you want to expire all your assets.
-Rails.application.config.assets.version = "1.0"
+Rails.application.config.assets.version = '1.0'
# Add additional assets to the asset load path.
# Rails.application.config.assets.paths << Emoji.images_path
-Rails.application.config.assets.paths << Rails.root.join("node_modules/bootstrap-icons/font")
+Rails.application.config.assets.paths << Rails.root.join('node_modules/bootstrap-icons/font')
# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in the app/assets
# folder are already added.
-# Rails.application.config.assets.precompile += %w( admin.js admin.css )
\ No newline at end of file
+# Rails.application.config.assets.precompile += %w( admin.js admin.css )
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
index 54f47cf..691cfa1 100644
--- a/config/initializers/content_security_policy.rb
+++ b/config/initializers/content_security_policy.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# Define an application-wide content security policy.
diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb
index adc6568..3df77c5 100644
--- a/config/initializers/filter_parameter_logging.rb
+++ b/config/initializers/filter_parameter_logging.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
# Configure parameters to be filtered from the log file. Use this to limit dissemination of
# sensitive information. See the ActiveSupport::ParameterFilter documentation for supported
# notations and behaviors.
-Rails.application.config.filter_parameters += [
- :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
+Rails.application.config.filter_parameters += %i[
+ passw secret token _key crypt salt certificate otp ssn
]
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
index 3860f65..6c78420 100644
--- a/config/initializers/inflections.rb
+++ b/config/initializers/inflections.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# Add new inflection rules using the following format. Inflections
diff --git a/config/initializers/new_framework_defaults_7_0.rb b/config/initializers/new_framework_defaults_7_0.rb
index 4d58024..5aefca5 100644
--- a/config/initializers/new_framework_defaults_7_0.rb
+++ b/config/initializers/new_framework_defaults_7_0.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
#
# This file eases your Rails 7.0 framework defaults upgrade.
@@ -97,7 +98,6 @@
# "Referrer-Policy" => "strict-origin-when-cross-origin"
# }
-
# ** Please read carefully, this must be configured in config/application.rb **
# Change the format of the cache entry.
# Changing this default means that all new cache entries added to the cache
@@ -107,9 +107,8 @@
# When you're ready to change format, add this to `config/application.rb` (NOT this file):
# config.active_support.cache_format_version = 7.0
-
# Cookie serializer: 2 options
-#
+#
# If you're upgrading and haven't set `cookies_serializer` previously, your cookie serializer
# is `:marshal`. The default for new apps is `:json`.
#
@@ -117,10 +116,10 @@
#
#
# To migrate an existing application to the `:json` serializer, use the `:hybrid` option.
-#
+#
# Rails transparently deserializes existing (Marshal-serialized) cookies on read and
# re-writes them in the JSON format.
-#
+#
# It is fine to use `:hybrid` long term; you should do that until you're confident *all* your cookies
# have been converted to JSON. To keep using `:hybrid` long term, move this config to its own
# initializer or to `config/application.rb`.
@@ -131,5 +130,5 @@
# If your cookies can't yet be serialized to JSON, keep using `:marshal` for backward-compatibility.
#
# If you have configured the serializer elsewhere, you can remove this section of the file.
-#
+#
# See https://guides.rubyonrails.org/action_controller_overview.html#cookies for more information.
diff --git a/config/initializers/permissions_policy.rb b/config/initializers/permissions_policy.rb
index 00f64d7..50bcf4e 100644
--- a/config/initializers/permissions_policy.rb
+++ b/config/initializers/permissions_policy.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Define an application-wide HTTP permissions policy. For further
# information see https://developers.google.com/web/updates/2018/06/feature-policy
#
diff --git a/config/lokalise_rails.rb b/config/lokalise_rails.rb
index b5f1135..d5cb76f 100644
--- a/config/lokalise_rails.rb
+++ b/config/lokalise_rails.rb
@@ -52,4 +52,4 @@
## Infer language ISO code for the translation file:
## c.lang_iso_inferer = ->(data) { YAML.safe_load(data)&.keys&.first }
-end
\ No newline at end of file
+end
diff --git a/config/routes.rb b/config/routes.rb
index f35e9c6..e48faaf 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -40,4 +40,4 @@ def matches?(request)
root 'pages#index'
end
-end
\ No newline at end of file
+end
diff --git a/db/migrate/20221017205449_add_password_reset_token_and_password_reset_token_sent_at_to_users.rb b/db/migrate/20221017205449_add_password_reset_token_and_password_reset_token_sent_at_to_users.rb
index 28b6762..3076e93 100644
--- a/db/migrate/20221017205449_add_password_reset_token_and_password_reset_token_sent_at_to_users.rb
+++ b/db/migrate/20221017205449_add_password_reset_token_and_password_reset_token_sent_at_to_users.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class AddPasswordResetTokenAndPasswordResetTokenSentAtToUsers < ActiveRecord::Migration[6.1]
def change
add_column :users, :password_reset_token, :string
diff --git a/db/migrate/20221019185831_create_active_storage_tables.active_storage.rb b/db/migrate/20221019185831_create_active_storage_tables.active_storage.rb
index ed3dfe6..02203ec 100644
--- a/db/migrate/20221019185831_create_active_storage_tables.active_storage.rb
+++ b/db/migrate/20221019185831_create_active_storage_tables.active_storage.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This migration comes from active_storage (originally 20170806125915)
class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
def change
@@ -14,7 +16,7 @@ def change
t.string :checksum, null: false
t.datetime :created_at, null: false
- t.index [ :key ], unique: true
+ t.index [:key], unique: true
end
create_table :active_storage_attachments, id: primary_key_type do |t|
@@ -24,7 +26,8 @@ def change
t.datetime :created_at, null: false
- t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true
+ t.index %i[record_type record_id name blob_id], name: 'index_active_storage_attachments_uniqueness',
+ unique: true
t.foreign_key :active_storage_blobs, column: :blob_id
end
@@ -32,17 +35,18 @@ def change
t.belongs_to :blob, null: false, index: false, type: foreign_key_type
t.string :variation_digest, null: false
- t.index %i[ blob_id variation_digest ], name: "index_active_storage_variant_records_uniqueness", unique: true
+ t.index %i[blob_id variation_digest], name: 'index_active_storage_variant_records_uniqueness', unique: true
t.foreign_key :active_storage_blobs, column: :blob_id
end
end
private
- def primary_and_foreign_key_types
- config = Rails.configuration.generators
- setting = config.options[config.orm][:primary_key_type]
- primary_key_type = setting || :primary_key
- foreign_key_type = setting || :bigint
- [primary_key_type, foreign_key_type]
- end
+
+ def primary_and_foreign_key_types
+ config = Rails.configuration.generators
+ setting = config.options[config.orm][:primary_key_type]
+ primary_key_type = setting || :primary_key
+ foreign_key_type = setting || :bigint
+ [primary_key_type, foreign_key_type]
+ end
end
diff --git a/db/migrate/20221027190626_add_service_name_to_active_storage_blobs.active_storage.rb b/db/migrate/20221027190626_add_service_name_to_active_storage_blobs.active_storage.rb
index a15c6ce..f6d9433 100644
--- a/db/migrate/20221027190626_add_service_name_to_active_storage_blobs.active_storage.rb
+++ b/db/migrate/20221027190626_add_service_name_to_active_storage_blobs.active_storage.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This migration comes from active_storage (originally 20190112182829)
class AddServiceNameToActiveStorageBlobs < ActiveRecord::Migration[6.0]
def up
diff --git a/db/migrate/20221027190627_create_active_storage_variant_records.active_storage.rb b/db/migrate/20221027190627_create_active_storage_variant_records.active_storage.rb
index 94ac83a..ca0e862 100644
--- a/db/migrate/20221027190627_create_active_storage_variant_records.active_storage.rb
+++ b/db/migrate/20221027190627_create_active_storage_variant_records.active_storage.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This migration comes from active_storage (originally 20191206030411)
class CreateActiveStorageVariantRecords < ActiveRecord::Migration[6.0]
def change
@@ -8,20 +10,21 @@ def change
t.belongs_to :blob, null: false, index: false, type: blobs_primary_key_type
t.string :variation_digest, null: false
- t.index %i[ blob_id variation_digest ], name: "index_active_storage_variant_records_uniqueness", unique: true
+ t.index %i[blob_id variation_digest], name: 'index_active_storage_variant_records_uniqueness', unique: true
t.foreign_key :active_storage_blobs, column: :blob_id
end
end
private
- def primary_key_type
- config = Rails.configuration.generators
- config.options[config.orm][:primary_key_type] || :primary_key
- end
- def blobs_primary_key_type
- pkey_name = connection.primary_key(:active_storage_blobs)
- pkey_column = connection.columns(:active_storage_blobs).find { |c| c.name == pkey_name }
- pkey_column.bigint? ? :bigint : pkey_column.type
- end
+ def primary_key_type
+ config = Rails.configuration.generators
+ config.options[config.orm][:primary_key_type] || :primary_key
+ end
+
+ def blobs_primary_key_type
+ pkey_name = connection.primary_key(:active_storage_blobs)
+ pkey_column = connection.columns(:active_storage_blobs).find { |c| c.name == pkey_name }
+ pkey_column.bigint? ? :bigint : pkey_column.type
+ end
end
diff --git a/db/migrate/20221027190628_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb b/db/migrate/20221027190628_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb
index 93c8b85..6f31822 100644
--- a/db/migrate/20221027190628_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb
+++ b/db/migrate/20221027190628_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This migration comes from active_storage (originally 20211119233751)
class RemoveNotNullOnActiveStorageBlobsChecksum < ActiveRecord::Migration[6.0]
def change
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..d3fabd2
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1335 @@
+{
+ "name": "ask-it",
+ "version": "0.1.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "ask-it",
+ "version": "0.1.0",
+ "dependencies": {
+ "@hotwired/turbo-rails": "^7.2.4",
+ "@popperjs/core": "^2.11.6",
+ "@rails/actioncable": "^6.0.0",
+ "@rails/activestorage": "^6.0.0",
+ "autoprefixer": "^10.3.1",
+ "bootstrap": "^5.2.2",
+ "bootstrap-icons": "^1.9.1",
+ "esbuild": "^0.15.12",
+ "sass": "^1.55.0",
+ "tom-select": "^2.0.0"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz",
+ "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz",
+ "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@hotwired/turbo": {
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.2.4.tgz",
+ "integrity": "sha512-c3xlOroHp/cCZHDOuLp6uzQYEbvXBUVaal0puXoGJ9M8L/KHwZ3hQozD4dVeSN9msHWLxxtmPT1TlCN7gFhj4w==",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@hotwired/turbo-rails": {
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-7.2.4.tgz",
+ "integrity": "sha512-givDUQqaccd19BvErz1Cf2j6MXF74m0G6I75oqFJGeXAa7vwkz9nDplefVNrALCR9Xi9j9gy32xmSI6wD0tZyA==",
+ "dependencies": {
+ "@hotwired/turbo": "^7.2.4",
+ "@rails/actioncable": "^7.0"
+ }
+ },
+ "node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.0.4.tgz",
+ "integrity": "sha512-tz4oM+Zn9CYsvtyicsa/AwzKZKL+ITHWkhiu7x+xF77clh2b4Rm+s6xnOgY/sGDWoFWZmtKsE95hxBPkgQQNnQ=="
+ },
+ "node_modules/@orchidjs/sifter": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@orchidjs/sifter/-/sifter-1.0.3.tgz",
+ "integrity": "sha512-zCZbwKegHytfsPm8Amcfh7v/4vHqTAaOu6xFswBYcn8nznBOuseu6COB2ON7ez0tFV0mKL0nRNnCiZZA+lU9/g==",
+ "dependencies": {
+ "@orchidjs/unicode-variants": "^1.0.4"
+ }
+ },
+ "node_modules/@orchidjs/unicode-variants": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@orchidjs/unicode-variants/-/unicode-variants-1.0.4.tgz",
+ "integrity": "sha512-NvVBRnZNE+dugiXERFsET1JlKZfM5lJDEpSMilKW4bToYJ7pxf0Zne78xyXB2ny2c2aHfJ6WLnz1AaTNHAmQeQ=="
+ },
+ "node_modules/@popperjs/core": {
+ "version": "2.11.6",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
+ "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
+ "node_modules/@rails/actioncable": {
+ "version": "6.1.7",
+ "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-6.1.7.tgz",
+ "integrity": "sha512-F6S74NGpxhbbDRFsQFGYqefRfZPgYvePNtz9hHKYOqLturrsqrDoG+UcrxEGHsvqDUorMYfx4Wl3K8smmk/u2g=="
+ },
+ "node_modules/@rails/activestorage": {
+ "version": "6.1.7",
+ "resolved": "https://registry.npmjs.org/@rails/activestorage/-/activestorage-6.1.7.tgz",
+ "integrity": "sha512-h++k8LBLns4O8AqzdaFp1TsCLP9VSc2hgWI37bjzJ+4D995X7Rd8kdkRmXRaNAUlHDJgy6RpnbhBJ5oiIgWTDw==",
+ "dependencies": {
+ "spark-md5": "^3.0.0"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.13",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
+ "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.21.4",
+ "caniuse-lite": "^1.0.30001426",
+ "fraction.js": "^4.2.0",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bootstrap": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.2.tgz",
+ "integrity": "sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/twbs"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/bootstrap"
+ }
+ ],
+ "peerDependencies": {
+ "@popperjs/core": "^2.11.6"
+ }
+ },
+ "node_modules/bootstrap-icons": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.9.1.tgz",
+ "integrity": "sha512-d4ZkO30MIkAhQ2nNRJqKXJVEQorALGbLWTuRxyCTJF96lRIV6imcgMehWGJUiJMJhglN0o2tqLIeDnMdiQEE9g=="
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+ "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001400",
+ "electron-to-chromium": "^1.4.251",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.9"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001427",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001427.tgz",
+ "integrity": "sha512-lfXQ73oB9c8DP5Suxaszm+Ta2sr/4tf8+381GkIm1MLj/YdLf+rEDyDSRCzeltuyTVGm+/s18gdZ0q+Wmp8VsQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ }
+ ]
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.284",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
+ },
+ "node_modules/esbuild": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz",
+ "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==",
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.15.12",
+ "@esbuild/linux-loong64": "0.15.12",
+ "esbuild-android-64": "0.15.12",
+ "esbuild-android-arm64": "0.15.12",
+ "esbuild-darwin-64": "0.15.12",
+ "esbuild-darwin-arm64": "0.15.12",
+ "esbuild-freebsd-64": "0.15.12",
+ "esbuild-freebsd-arm64": "0.15.12",
+ "esbuild-linux-32": "0.15.12",
+ "esbuild-linux-64": "0.15.12",
+ "esbuild-linux-arm": "0.15.12",
+ "esbuild-linux-arm64": "0.15.12",
+ "esbuild-linux-mips64le": "0.15.12",
+ "esbuild-linux-ppc64le": "0.15.12",
+ "esbuild-linux-riscv64": "0.15.12",
+ "esbuild-linux-s390x": "0.15.12",
+ "esbuild-netbsd-64": "0.15.12",
+ "esbuild-openbsd-64": "0.15.12",
+ "esbuild-sunos-64": "0.15.12",
+ "esbuild-windows-32": "0.15.12",
+ "esbuild-windows-64": "0.15.12",
+ "esbuild-windows-arm64": "0.15.12"
+ }
+ },
+ "node_modules/esbuild-android-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz",
+ "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-android-arm64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz",
+ "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz",
+ "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-arm64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz",
+ "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz",
+ "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-arm64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz",
+ "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-32": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz",
+ "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz",
+ "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz",
+ "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz",
+ "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-mips64le": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz",
+ "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==",
+ "cpu": [
+ "mips64el"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-ppc64le": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz",
+ "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-riscv64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz",
+ "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-s390x": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz",
+ "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-netbsd-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz",
+ "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-openbsd-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz",
+ "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-sunos-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz",
+ "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-32": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz",
+ "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz",
+ "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-arm64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz",
+ "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://www.patreon.com/infusion"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz",
+ "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ=="
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "peer": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz",
+ "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "peer": true,
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/sass": {
+ "version": "1.55.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz",
+ "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==",
+ "dependencies": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spark-md5": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz",
+ "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tom-select": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/tom-select/-/tom-select-2.2.2.tgz",
+ "integrity": "sha512-igGah1yY6yhrnN2h/Ky8I5muw/nE/YQxIsEZoYu5qaA4bsRibvKto3s8QZZosKpOd0uO8fNYhRfAwgHB4IAYew==",
+ "dependencies": {
+ "@orchidjs/sifter": "^1.0.3",
+ "@orchidjs/unicode-variants": "^1.0.4"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/tom-select"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+ "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "browserslist-lint": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ }
+ },
+ "dependencies": {
+ "@esbuild/android-arm": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz",
+ "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==",
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz",
+ "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==",
+ "optional": true
+ },
+ "@hotwired/turbo": {
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.2.4.tgz",
+ "integrity": "sha512-c3xlOroHp/cCZHDOuLp6uzQYEbvXBUVaal0puXoGJ9M8L/KHwZ3hQozD4dVeSN9msHWLxxtmPT1TlCN7gFhj4w=="
+ },
+ "@hotwired/turbo-rails": {
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-7.2.4.tgz",
+ "integrity": "sha512-givDUQqaccd19BvErz1Cf2j6MXF74m0G6I75oqFJGeXAa7vwkz9nDplefVNrALCR9Xi9j9gy32xmSI6wD0tZyA==",
+ "requires": {
+ "@hotwired/turbo": "^7.2.4",
+ "@rails/actioncable": "^7.0"
+ },
+ "dependencies": {
+ "@rails/actioncable": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.0.4.tgz",
+ "integrity": "sha512-tz4oM+Zn9CYsvtyicsa/AwzKZKL+ITHWkhiu7x+xF77clh2b4Rm+s6xnOgY/sGDWoFWZmtKsE95hxBPkgQQNnQ=="
+ }
+ }
+ },
+ "@orchidjs/sifter": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@orchidjs/sifter/-/sifter-1.0.3.tgz",
+ "integrity": "sha512-zCZbwKegHytfsPm8Amcfh7v/4vHqTAaOu6xFswBYcn8nznBOuseu6COB2ON7ez0tFV0mKL0nRNnCiZZA+lU9/g==",
+ "requires": {
+ "@orchidjs/unicode-variants": "^1.0.4"
+ }
+ },
+ "@orchidjs/unicode-variants": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@orchidjs/unicode-variants/-/unicode-variants-1.0.4.tgz",
+ "integrity": "sha512-NvVBRnZNE+dugiXERFsET1JlKZfM5lJDEpSMilKW4bToYJ7pxf0Zne78xyXB2ny2c2aHfJ6WLnz1AaTNHAmQeQ=="
+ },
+ "@popperjs/core": {
+ "version": "2.11.6",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
+ "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw=="
+ },
+ "@rails/actioncable": {
+ "version": "6.1.7",
+ "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-6.1.7.tgz",
+ "integrity": "sha512-F6S74NGpxhbbDRFsQFGYqefRfZPgYvePNtz9hHKYOqLturrsqrDoG+UcrxEGHsvqDUorMYfx4Wl3K8smmk/u2g=="
+ },
+ "@rails/activestorage": {
+ "version": "6.1.7",
+ "resolved": "https://registry.npmjs.org/@rails/activestorage/-/activestorage-6.1.7.tgz",
+ "integrity": "sha512-h++k8LBLns4O8AqzdaFp1TsCLP9VSc2hgWI37bjzJ+4D995X7Rd8kdkRmXRaNAUlHDJgy6RpnbhBJ5oiIgWTDw==",
+ "requires": {
+ "spark-md5": "^3.0.0"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "autoprefixer": {
+ "version": "10.4.13",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
+ "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
+ "requires": {
+ "browserslist": "^4.21.4",
+ "caniuse-lite": "^1.0.30001426",
+ "fraction.js": "^4.2.0",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+ },
+ "bootstrap": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.2.tgz",
+ "integrity": "sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ==",
+ "requires": {}
+ },
+ "bootstrap-icons": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.9.1.tgz",
+ "integrity": "sha512-d4ZkO30MIkAhQ2nNRJqKXJVEQorALGbLWTuRxyCTJF96lRIV6imcgMehWGJUiJMJhglN0o2tqLIeDnMdiQEE9g=="
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.21.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+ "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001400",
+ "electron-to-chromium": "^1.4.251",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.9"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001427",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001427.tgz",
+ "integrity": "sha512-lfXQ73oB9c8DP5Suxaszm+Ta2sr/4tf8+381GkIm1MLj/YdLf+rEDyDSRCzeltuyTVGm+/s18gdZ0q+Wmp8VsQ=="
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.4.284",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
+ },
+ "esbuild": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz",
+ "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==",
+ "requires": {
+ "@esbuild/android-arm": "0.15.12",
+ "@esbuild/linux-loong64": "0.15.12",
+ "esbuild-android-64": "0.15.12",
+ "esbuild-android-arm64": "0.15.12",
+ "esbuild-darwin-64": "0.15.12",
+ "esbuild-darwin-arm64": "0.15.12",
+ "esbuild-freebsd-64": "0.15.12",
+ "esbuild-freebsd-arm64": "0.15.12",
+ "esbuild-linux-32": "0.15.12",
+ "esbuild-linux-64": "0.15.12",
+ "esbuild-linux-arm": "0.15.12",
+ "esbuild-linux-arm64": "0.15.12",
+ "esbuild-linux-mips64le": "0.15.12",
+ "esbuild-linux-ppc64le": "0.15.12",
+ "esbuild-linux-riscv64": "0.15.12",
+ "esbuild-linux-s390x": "0.15.12",
+ "esbuild-netbsd-64": "0.15.12",
+ "esbuild-openbsd-64": "0.15.12",
+ "esbuild-sunos-64": "0.15.12",
+ "esbuild-windows-32": "0.15.12",
+ "esbuild-windows-64": "0.15.12",
+ "esbuild-windows-arm64": "0.15.12"
+ }
+ },
+ "esbuild-android-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz",
+ "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==",
+ "optional": true
+ },
+ "esbuild-android-arm64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz",
+ "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==",
+ "optional": true
+ },
+ "esbuild-darwin-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz",
+ "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==",
+ "optional": true
+ },
+ "esbuild-darwin-arm64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz",
+ "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==",
+ "optional": true
+ },
+ "esbuild-freebsd-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz",
+ "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==",
+ "optional": true
+ },
+ "esbuild-freebsd-arm64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz",
+ "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==",
+ "optional": true
+ },
+ "esbuild-linux-32": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz",
+ "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==",
+ "optional": true
+ },
+ "esbuild-linux-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz",
+ "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==",
+ "optional": true
+ },
+ "esbuild-linux-arm": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz",
+ "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==",
+ "optional": true
+ },
+ "esbuild-linux-arm64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz",
+ "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==",
+ "optional": true
+ },
+ "esbuild-linux-mips64le": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz",
+ "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==",
+ "optional": true
+ },
+ "esbuild-linux-ppc64le": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz",
+ "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==",
+ "optional": true
+ },
+ "esbuild-linux-riscv64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz",
+ "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==",
+ "optional": true
+ },
+ "esbuild-linux-s390x": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz",
+ "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==",
+ "optional": true
+ },
+ "esbuild-netbsd-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz",
+ "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==",
+ "optional": true
+ },
+ "esbuild-openbsd-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz",
+ "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==",
+ "optional": true
+ },
+ "esbuild-sunos-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz",
+ "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==",
+ "optional": true
+ },
+ "esbuild-windows-32": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz",
+ "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==",
+ "optional": true
+ },
+ "esbuild-windows-64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz",
+ "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==",
+ "optional": true
+ },
+ "esbuild-windows-arm64": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz",
+ "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==",
+ "optional": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "fraction.js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA=="
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "immutable": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz",
+ "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ=="
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "peer": true
+ },
+ "node-releases": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "postcss": {
+ "version": "8.4.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz",
+ "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==",
+ "peer": true,
+ "requires": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "sass": {
+ "version": "1.55.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz",
+ "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==",
+ "requires": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ }
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
+ "spark-md5": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz",
+ "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tom-select": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/tom-select/-/tom-select-2.2.2.tgz",
+ "integrity": "sha512-igGah1yY6yhrnN2h/Ky8I5muw/nE/YQxIsEZoYu5qaA4bsRibvKto3s8QZZosKpOd0uO8fNYhRfAwgHB4IAYew==",
+ "requires": {
+ "@orchidjs/sifter": "^1.0.3",
+ "@orchidjs/unicode-variants": "^1.0.4"
+ }
+ },
+ "update-browserslist-db": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+ "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+ "requires": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index 69bdd96..4a94599 100644
--- a/package.json
+++ b/package.json
@@ -2,17 +2,16 @@
"name": "ask-it",
"private": true,
"dependencies": {
+ "@hotwired/turbo-rails": "^7.2.4",
"@popperjs/core": "^2.11.6",
- "@rails/actioncable": "^6.0.0",
- "@rails/activestorage": "^6.0.0",
- "@rails/ujs": "^6.0.0",
- "autoprefixer": "^10.3.1",
+ "@rails/actioncable": "^7.0.4",
+ "@rails/activestorage": "^7.0.4",
+ "autoprefixer": "^10.4.13",
"bootstrap": "^5.2.2",
"bootstrap-icons": "^1.9.1",
"esbuild": "^0.15.12",
"sass": "^1.55.0",
- "tom-select": "^2.0.0",
- "turbolinks": "^5.2.0"
+ "tom-select": "^2.2.2"
},
"version": "0.1.0",
"browserslist": [
diff --git a/yarn.lock b/yarn.lock
index 8608dea..36ecc6c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -26,6 +26,23 @@ __metadata:
languageName: node
linkType: hard
+"@hotwired/turbo-rails@npm:^7.2.4":
+ version: 7.2.4
+ resolution: "@hotwired/turbo-rails@npm:7.2.4"
+ dependencies:
+ "@hotwired/turbo": ^7.2.4
+ "@rails/actioncable": ^7.0
+ checksum: 658059626a8f1ede0c3e88003f44d764c0da8a852ffb7bd7a09e26298228b2dd2961e1adce4ab0763d3abf5b989456c6ca16cb52bc93b42950ebe73aa6b2f4cf
+ languageName: node
+ linkType: hard
+
+"@hotwired/turbo@npm:^7.2.4":
+ version: 7.2.4
+ resolution: "@hotwired/turbo@npm:7.2.4"
+ checksum: 83cbcda22cf2fa251a30aa898a57ea6dd9a2b0de71f4d3e364baa300a01a8d52631ae13b44533b516965a557d663788325a930fbc3edab3f85616126b7834c4c
+ languageName: node
+ linkType: hard
+
"@npmcli/fs@npm:^2.1.0":
version: 2.1.2
resolution: "@npmcli/fs@npm:2.1.2"
@@ -69,26 +86,19 @@ __metadata:
languageName: node
linkType: hard
-"@rails/actioncable@npm:^6.0.0":
- version: 6.1.7
- resolution: "@rails/actioncable@npm:6.1.7"
- checksum: b9651d9991d6e5fffdadd64e392b8157463b63da48bc1b061541f23907b9c7d73d5d73ee1982c65c3e7d2879fe918bd7b2c776baba4fb21c8ca3c8da2dbec374
+"@rails/actioncable@npm:^7.0, @rails/actioncable@npm:^7.0.4":
+ version: 7.0.4
+ resolution: "@rails/actioncable@npm:7.0.4"
+ checksum: b31cae40511a3df4d3048779255219b92f7dd89514f3c9f2da2b219b9b0635261b17b05031c7070756d319bf9165d4d6c021a820b110d53a3e6c441a062accdd
languageName: node
linkType: hard
-"@rails/activestorage@npm:^6.0.0":
- version: 6.1.7
- resolution: "@rails/activestorage@npm:6.1.7"
+"@rails/activestorage@npm:^7.0.4":
+ version: 7.0.4
+ resolution: "@rails/activestorage@npm:7.0.4"
dependencies:
- spark-md5: ^3.0.0
- checksum: 7a47df6c1e031adb237184c3fb5b474f6df7c3e0a8fdc5a6d953c67dad326a80b23900bbb0ba42b5ad53b26c83e9c949dc28523f6e150529d41092ff16e8c4ee
- languageName: node
- linkType: hard
-
-"@rails/ujs@npm:^6.0.0":
- version: 6.1.7
- resolution: "@rails/ujs@npm:6.1.7"
- checksum: a597bdaee400f73d4a2b3b2de13433399166273b56e0655da1a4d3cd9e2406224c6506bfc205565e64a02068003647aa51c767bbc5a31d1bdfdc32048a86c618
+ spark-md5: ^3.0.1
+ checksum: f99eaf856782babbf54a79fdf22e797592ad2a90e83b35125cd2c546c56b9f1c2ee8fc9e9b73098356fbfbca05ea2ba832207d455d3ed6e57513ba33ccb74ea2
languageName: node
linkType: hard
@@ -174,26 +184,25 @@ __metadata:
version: 0.0.0-use.local
resolution: "ask-it@workspace:."
dependencies:
+ "@hotwired/turbo-rails": ^7.2.4
"@popperjs/core": ^2.11.6
- "@rails/actioncable": ^6.0.0
- "@rails/activestorage": ^6.0.0
- "@rails/ujs": ^6.0.0
- autoprefixer: ^10.3.1
+ "@rails/actioncable": ^7.0.4
+ "@rails/activestorage": ^7.0.4
+ autoprefixer: ^10.4.13
bootstrap: ^5.2.2
bootstrap-icons: ^1.9.1
esbuild: ^0.15.12
sass: ^1.55.0
- tom-select: ^2.0.0
- turbolinks: ^5.2.0
+ tom-select: ^2.2.2
languageName: unknown
linkType: soft
-"autoprefixer@npm:^10.3.1":
- version: 10.4.12
- resolution: "autoprefixer@npm:10.4.12"
+"autoprefixer@npm:^10.4.13":
+ version: 10.4.13
+ resolution: "autoprefixer@npm:10.4.13"
dependencies:
browserslist: ^4.21.4
- caniuse-lite: ^1.0.30001407
+ caniuse-lite: ^1.0.30001426
fraction.js: ^4.2.0
normalize-range: ^0.1.2
picocolors: ^1.0.0
@@ -202,7 +211,7 @@ __metadata:
postcss: ^8.1.0
bin:
autoprefixer: bin/autoprefixer
- checksum: 6ae79cbacd31fb3d464ec64eb6ad2600f4f689c3080bbe62c5536d539b41b472083a2e941ef99d14aa11142370d6c16e8b05a62f077374933ed991aceb5943d2
+ checksum: dcb1cb7ae96a3363d65d82e52f9a0a7d8c982256f6fd032d7e1ec311f099c23acfebfd517ff8e96bf93f716a66c4ea2b80c60aa19efd2f474ce434bd75ef7b79
languageName: node
linkType: hard
@@ -304,17 +313,10 @@ __metadata:
languageName: node
linkType: hard
-"caniuse-lite@npm:^1.0.30001400":
- version: 1.0.30001420
- resolution: "caniuse-lite@npm:1.0.30001420"
- checksum: dfa5027b2aeaba3ab1731735a46aecf62f286cdeec7f8ccb0f8cce0a3d02447e640e944d9bf5d9ea98b53fac6c2b168bb18f4c9ad598d92a2da7b05e2aea06e2
- languageName: node
- linkType: hard
-
-"caniuse-lite@npm:^1.0.30001407":
- version: 1.0.30001412
- resolution: "caniuse-lite@npm:1.0.30001412"
- checksum: 7f5f476355f25a9841c30785c11df5225e2e7613f3334573e8da5490f195ac897a525fe4b514fa926b7be7e7937f15743e466bbc3a3272e848fb7ace7432ae02
+"caniuse-lite@npm:^1.0.30001400, caniuse-lite@npm:^1.0.30001426":
+ version: 1.0.30001427
+ resolution: "caniuse-lite@npm:1.0.30001427"
+ checksum: 7b21a7d1f10c07130cecb7e7c7c38fd031f3dbd49afaee53fa4bb07355f9765686cad14f6296fbb49838f525c35292278b2c5ee9109c363edea5e134514ab6bb
languageName: node
linkType: hard
@@ -401,9 +403,9 @@ __metadata:
linkType: hard
"electron-to-chromium@npm:^1.4.251":
- version: 1.4.283
- resolution: "electron-to-chromium@npm:1.4.283"
- checksum: b005cdac737cecd0e7f875263b97da13ad914526f4e31b4051dd0179b82ccd4aff27b4a3e3a7814cbc1774efd73956f830ae7f6ef28b313175857c26928d80b5
+ version: 1.4.284
+ resolution: "electron-to-chromium@npm:1.4.284"
+ checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a
languageName: node
linkType: hard
@@ -737,21 +739,7 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:^7.1.3":
- version: 7.2.0
- resolution: "glob@npm:7.2.0"
- dependencies:
- fs.realpath: ^1.0.0
- inflight: ^1.0.4
- inherits: 2
- minimatch: ^3.0.4
- once: ^1.3.0
- path-is-absolute: ^1.0.0
- checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134
- languageName: node
- linkType: hard
-
-"glob@npm:^7.1.4":
+"glob@npm:^7.1.3, glob@npm:^7.1.4":
version: 7.2.3
resolution: "glob@npm:7.2.3"
dependencies:
@@ -983,7 +971,7 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1":
+"minimatch@npm:^3.1.1":
version: 3.1.2
resolution: "minimatch@npm:3.1.2"
dependencies:
@@ -1198,9 +1186,9 @@ __metadata:
linkType: hard
"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1":
- version: 2.3.0
- resolution: "picomatch@npm:2.3.0"
- checksum: 16818720ea7c5872b6af110760dee856c8e4cd79aed1c7a006d076b1cc09eff3ae41ca5019966694c33fbd2e1cc6ea617ab10e4adac6df06556168f13be3fca2
+ version: 2.3.1
+ resolution: "picomatch@npm:2.3.1"
+ checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf
languageName: node
linkType: hard
@@ -1294,13 +1282,13 @@ __metadata:
linkType: hard
"semver@npm:^7.3.5":
- version: 7.3.7
- resolution: "semver@npm:7.3.7"
+ version: 7.3.8
+ resolution: "semver@npm:7.3.8"
dependencies:
lru-cache: ^6.0.0
bin:
semver: bin/semver.js
- checksum: 2fa3e877568cd6ce769c75c211beaed1f9fce80b28338cadd9d0b6c40f2e2862bafd62c19a6cff42f3d54292b7c623277bcab8816a2b5521cf15210d43e75232
+ checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1
languageName: node
linkType: hard
@@ -1353,7 +1341,7 @@ __metadata:
languageName: node
linkType: hard
-"spark-md5@npm:^3.0.0":
+"spark-md5@npm:^3.0.1":
version: 3.0.2
resolution: "spark-md5@npm:3.0.2"
checksum: 5feebff0bfabcecf56ba03af3e38fdb068272ed41fbf0a94ff9ef65b9bb9cb1dd69be3684db6542e62497b1eac3ae324c07ac4dcb606465dc36ca048177077bf
@@ -1421,7 +1409,7 @@ __metadata:
languageName: node
linkType: hard
-"tom-select@npm:^2.0.0":
+"tom-select@npm:^2.2.2":
version: 2.2.2
resolution: "tom-select@npm:2.2.2"
dependencies:
@@ -1431,13 +1419,6 @@ __metadata:
languageName: node
linkType: hard
-"turbolinks@npm:^5.2.0":
- version: 5.2.0
- resolution: "turbolinks@npm:5.2.0"
- checksum: df393c321ed19d9761e632ff357d3cb032a9ca32c07f1ef8202e5f5bb9d17fcc93cdec0d9dfcf0fbca56c373a9dffa2c151639383e663a72897ae434a877819b
- languageName: node
- linkType: hard
-
"unique-filename@npm:^2.0.0":
version: 2.0.1
resolution: "unique-filename@npm:2.0.1"