From 9744082ab0051db6ac9cbca60cec261a0f471d28 Mon Sep 17 00:00:00 2001 From: Stanislav Lashmanov Date: Wed, 22 Mar 2023 09:45:11 +0400 Subject: [PATCH] Add Vite for javascript assets in development mode --- .gitignore | 7 + .gitlab/ci/frontend.gitlab-ci.yml | 1 + Gemfile | 2 + Gemfile.checksum | 3 + Gemfile.lock | 9 + .../entrypoints/jira_connect_app.js | 1 + app/assets/javascripts/entrypoints/main.js | 6 + app/assets/javascripts/entrypoints/main_ee.js | 5 + app/assets/javascripts/entrypoints/main_jh.js | 5 + .../entrypoints/performance_bar.js | 1 + .../entrypoints/redirect_listbox.js | 1 + .../entrypoints/sandboxed_mermaid.js | 1 + app/assets/javascripts/entrypoints/sentry.js | 1 + app/assets/javascripts/lib/utils/webpack.js | 5 +- app/assets/javascripts/run_modules.js | 9 + app/assets/javascripts/webpack.js | 3 +- app/controllers/application_controller.rb | 18 + app/helpers/application_helper.rb | 9 + app/helpers/vite_helper.rb | 29 + app/helpers/webpack_helper.rb | 10 +- app/views/layouts/_head.html.haml | 10 + bin/vite | 27 + config/feature_flags/development/vite.yml | 8 + config/vite.json | 18 + config/webpack.config.js | 27 +- config/webpack.constants.js | 31 ++ package.json | 7 + postcss.config.js | 5 + spec/helpers/application_helper_spec.rb | 34 ++ spec/helpers/vite_helper_spec.rb | 59 ++ spec/helpers/webpack_helper_spec.rb | 18 + spec/requests/content_security_policy_spec.rb | 28 + spec/spec_helper.rb | 2 + vite.config.js | 100 ++++ yarn.lock | 519 ++++++++++++++++-- 35 files changed, 949 insertions(+), 70 deletions(-) create mode 100644 app/assets/javascripts/entrypoints/jira_connect_app.js create mode 100644 app/assets/javascripts/entrypoints/main.js create mode 100644 app/assets/javascripts/entrypoints/main_ee.js create mode 100644 app/assets/javascripts/entrypoints/main_jh.js create mode 100644 app/assets/javascripts/entrypoints/performance_bar.js create mode 100644 app/assets/javascripts/entrypoints/redirect_listbox.js create mode 100644 app/assets/javascripts/entrypoints/sandboxed_mermaid.js create mode 100644 app/assets/javascripts/entrypoints/sentry.js create mode 100644 app/assets/javascripts/run_modules.js create mode 100644 app/helpers/vite_helper.rb create mode 100755 bin/vite create mode 100644 config/feature_flags/development/vite.yml create mode 100644 config/vite.json create mode 100644 config/webpack.constants.js create mode 100644 postcss.config.js create mode 100644 spec/helpers/vite_helper_spec.rb create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore index d6c6d41e3cad17..9dd73547646aea 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,10 @@ tags.lock tags.temp .stylelintcache .solargraph.yml + +# Vite Ruby +/public/vite* +# Vite uses dotenv and suggests to ignore local-only env files. See +# https://vitejs.dev/guide/env-and-mode.html#env-files +*.local + diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index f103032ee69894..1f1065a983047e 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -11,6 +11,7 @@ # https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384 BROWSERSLIST_IGNORE_OLD_DATA: "true" WEBPACK_COMPILE_LOG_PATH: "tmp/webpack-output.log" + VITE_RUBY_SKIP_ASSETS_PRECOMPILE_EXTENSION: "true" stage: prepare needs: [] script: diff --git a/Gemfile b/Gemfile index e95dba4cb1bbd4..f55eac0f475eff 100644 --- a/Gemfile +++ b/Gemfile @@ -19,6 +19,8 @@ gem 'rails', '~> 7.0.6' gem 'activerecord-gitlab', path: 'gems/activerecord-gitlab' +gem 'vite_rails' + gem 'bootsnap', '~> 1.16.0', require: false gem 'openssl', '~> 3.0' diff --git a/Gemfile.checksum b/Gemfile.checksum index e7d34d6f6262f9..748633e2fcce85 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -125,6 +125,7 @@ {"name":"doorkeeper","version":"5.6.6","platform":"ruby","checksum":"2344e86c77770526efcda893b5217aa13d1c7eb1b40de840b58b19eb1ff757e0"}, {"name":"doorkeeper-openid_connect","version":"1.8.7","platform":"ruby","checksum":"71edaf33118deefe25674ba3f8280c32835f057351f70e9beb222c0fd6b8e786"}, {"name":"dotenv","version":"2.7.6","platform":"ruby","checksum":"2451ed5e8e43776d7a787e51d6f8903b98e446146c7ad143d5678cc2c409d547"}, +{"name":"dry-cli","version":"1.0.0","platform":"ruby","checksum":"28ead169f872954dd08910eb8ead59cf86cd18b4aab321e8eeefe945749569f0"}, {"name":"dry-core","version":"1.0.0","platform":"ruby","checksum":"7a92099870967f0d2c9997950608cb8bb622dafeea20b2fe1dd49e9ba1d0f305"}, {"name":"dry-inflector","version":"1.0.0","platform":"ruby","checksum":"6ad22361ca2d6f3f001ae3037ffcfea01163f644280d13a9195d3c3a94dd1626"}, {"name":"dry-logic","version":"1.5.0","platform":"ruby","checksum":"99ed2180f1970c3d8247004f277a01dffbe8e82cf6680de9c7209312d86cd416"}, @@ -675,6 +676,8 @@ {"name":"version_sorter","version":"2.3.0","platform":"ruby","checksum":"2147f2a1a3804fbb8f60d268b7d7c1ec717e6dd727ffe2c165b4e05e82efe1da"}, {"name":"view_component","version":"3.2.0","platform":"ruby","checksum":"1dfaa85e13b5393f30b60bd3a03348b5298240a13137985d71eb2b8cc94c4c22"}, {"name":"virtus","version":"2.0.0","platform":"ruby","checksum":"8841dae4eb7fcc097320ba5ea516bf1839e5d056c61ee27138aa4bddd6e3d1c2"}, +{"name":"vite_rails","version":"3.0.15","platform":"ruby","checksum":"b8ec528aedf7e24b54f222b449cd9250810ea2456d5f8dd4ef87f06b475cf860"}, +{"name":"vite_ruby","version":"3.3.4","platform":"ruby","checksum":"025e438385a6dc2320c8c148dff453f5bb1d4f056ce69c3386f47d4c388ad80c"}, {"name":"vmstat","version":"2.3.0","platform":"ruby","checksum":"ab5446a3e3bd0a9cdb9d9ac69a0bbd119c4f161d945a0846a519dd7018af656d"}, {"name":"warden","version":"1.2.9","platform":"ruby","checksum":"46684f885d35a69dbb883deabf85a222c8e427a957804719e143005df7a1efd0"}, {"name":"warning","version":"1.3.0","platform":"ruby","checksum":"23695a5d8e50bd5c46068931b529bee0b28e4982cbcefbe77d867800dde8069e"}, diff --git a/Gemfile.lock b/Gemfile.lock index 824dadab3089ef..7f2f8307779ffa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -459,6 +459,7 @@ GEM doorkeeper (>= 5.5, < 5.7) jwt (>= 2.5) dotenv (2.7.6) + dry-cli (1.0.0) dry-core (1.0.0) concurrent-ruby (~> 1.0) zeitwerk (~> 2.6) @@ -1672,6 +1673,13 @@ GEM axiom-types (~> 0.1) coercible (~> 1.0) descendants_tracker (~> 0.0, >= 0.0.3) + vite_rails (3.0.15) + railties (>= 5.1, < 8) + vite_ruby (~> 3.0, >= 3.2.2) + vite_ruby (3.3.4) + dry-cli (>= 0.7, < 2) + rack-proxy (~> 0.6, >= 0.6.1) + zeitwerk (~> 2.2) vmstat (2.3.0) warden (1.2.9) rack (>= 2.0.9) @@ -2029,6 +2037,7 @@ DEPENDENCIES validates_hostname (~> 1.0.11) version_sorter (~> 2.3) view_component (~> 3.2.0) + vite_rails vmstat (~> 2.3.0) warning (~> 1.3.0) webauthn (~> 3.0) diff --git a/app/assets/javascripts/entrypoints/jira_connect_app.js b/app/assets/javascripts/entrypoints/jira_connect_app.js new file mode 100644 index 00000000000000..90ad39ea487b3b --- /dev/null +++ b/app/assets/javascripts/entrypoints/jira_connect_app.js @@ -0,0 +1 @@ +import '../jira_connect/subscriptions'; diff --git a/app/assets/javascripts/entrypoints/main.js b/app/assets/javascripts/entrypoints/main.js new file mode 100644 index 00000000000000..6d59e89cfd0d26 --- /dev/null +++ b/app/assets/javascripts/entrypoints/main.js @@ -0,0 +1,6 @@ +import '../main'; +import { runModules } from '~/run_modules'; + +const modules = import.meta.glob('../pages/**/index.js'); + +runModules(modules, '../pages/'); diff --git a/app/assets/javascripts/entrypoints/main_ee.js b/app/assets/javascripts/entrypoints/main_ee.js new file mode 100644 index 00000000000000..4a83be6be942d1 --- /dev/null +++ b/app/assets/javascripts/entrypoints/main_ee.js @@ -0,0 +1,5 @@ +import { runModules } from '~/run_modules'; + +const modules = import.meta.glob('../../../../ee/app/assets/javascripts/pages/**/index.js'); + +runModules(modules, '../../../../ee/app/assets/javascripts/pages/'); diff --git a/app/assets/javascripts/entrypoints/main_jh.js b/app/assets/javascripts/entrypoints/main_jh.js new file mode 100644 index 00000000000000..92a42a9ac706b3 --- /dev/null +++ b/app/assets/javascripts/entrypoints/main_jh.js @@ -0,0 +1,5 @@ +import { runModules } from '~/run_modules'; + +const modules = import.meta.glob('../../../../jh/app/assets/javascripts/pages/**/index.js'); + +runModules(modules, '../../../../jh/app/assets/javascripts/pages/'); diff --git a/app/assets/javascripts/entrypoints/performance_bar.js b/app/assets/javascripts/entrypoints/performance_bar.js new file mode 100644 index 00000000000000..3f6fc6272d0ae7 --- /dev/null +++ b/app/assets/javascripts/entrypoints/performance_bar.js @@ -0,0 +1 @@ +import '../performance_bar'; diff --git a/app/assets/javascripts/entrypoints/redirect_listbox.js b/app/assets/javascripts/entrypoints/redirect_listbox.js new file mode 100644 index 00000000000000..811a73fbf2f9c8 --- /dev/null +++ b/app/assets/javascripts/entrypoints/redirect_listbox.js @@ -0,0 +1 @@ +import './behaviors/redirect_listbox'; diff --git a/app/assets/javascripts/entrypoints/sandboxed_mermaid.js b/app/assets/javascripts/entrypoints/sandboxed_mermaid.js new file mode 100644 index 00000000000000..d3dd144ffba6d5 --- /dev/null +++ b/app/assets/javascripts/entrypoints/sandboxed_mermaid.js @@ -0,0 +1 @@ +import '../lib/mermaid'; diff --git a/app/assets/javascripts/entrypoints/sentry.js b/app/assets/javascripts/entrypoints/sentry.js new file mode 100644 index 00000000000000..debafc6fab3972 --- /dev/null +++ b/app/assets/javascripts/entrypoints/sentry.js @@ -0,0 +1 @@ +import '../sentry/index'; diff --git a/app/assets/javascripts/lib/utils/webpack.js b/app/assets/javascripts/lib/utils/webpack.js index 38d2f3d75512ed..f1e8714540694d 100644 --- a/app/assets/javascripts/lib/utils/webpack.js +++ b/app/assets/javascripts/lib/utils/webpack.js @@ -5,10 +5,11 @@ import { joinPaths } from '~/lib/utils/url_utility'; * See https://gitlab.com/gitlab-org/gitlab/-/issues/321656 for a fix */ export function resetServiceWorkersPublicPath() { + // No-op if we're running Vite instead of Webpack + if (typeof __webpack_public_path__ === 'undefined') return; // eslint-disable-line camelcase // __webpack_public_path__ is a global variable that can be used to adjust // the webpack publicPath setting at runtime. // see: https://webpack.js.org/guides/public-path/ const relativeRootPath = (gon && gon.relative_url_root) || ''; - const webpackAssetPath = joinPaths(relativeRootPath, '/assets/webpack/'); - __webpack_public_path__ = webpackAssetPath; // eslint-disable-line camelcase + __webpack_public_path__ = joinPaths(relativeRootPath, '/assets/webpack/'); // eslint-disable-line camelcase } diff --git a/app/assets/javascripts/run_modules.js b/app/assets/javascripts/run_modules.js new file mode 100644 index 00000000000000..fabdff9bb76048 --- /dev/null +++ b/app/assets/javascripts/run_modules.js @@ -0,0 +1,9 @@ +export const runModules = (modules, prefix) => { + document + .querySelector('meta[name="controller-path"]') + .content.split('/') + .forEach((part, index, arr) => { + const path = `${prefix}${[...arr.slice(0, index), part].join('/')}/index.js`; + modules[path]?.(); + }); +}; diff --git a/app/assets/javascripts/webpack.js b/app/assets/javascripts/webpack.js index 1c6e632135d5f5..ef82142289d3c8 100644 --- a/app/assets/javascripts/webpack.js +++ b/app/assets/javascripts/webpack.js @@ -7,6 +7,7 @@ * e.g. the `window` scope, because it needs to be executed in the scope of webpack. */ -if (gon && gon.webpack_public_path) { +// eslint-disable-next-line camelcase +if (gon && gon.webpack_public_path && typeof __webpack_public_path__ !== 'undefined') { __webpack_public_path__ = gon.webpack_public_path; // eslint-disable-line camelcase } diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 08e4f4956df1bf..cec4b9bbc122e1 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -115,6 +115,24 @@ def self.endpoint_id_for_action(action_name) content_security_policy do |p| next if p.directives.blank? + + if Rails.env.development? && Feature.enabled?(:vite) + vite_host = ViteRuby.instance.config.host + vite_port = ViteRuby.instance.config.port + vite_origin = "#{vite_host}:#{vite_port}" + http_origin = "http://#{vite_origin}" + ws_origin = "ws://#{vite_origin}" + wss_origin = "wss://#{vite_origin}" + gitlab_ws_origin = Gitlab::Utils.append_path(Gitlab.config.gitlab.url, 'vite-dev/') + http_path = Gitlab::Utils.append_path(http_origin, 'vite-dev/') + + connect_sources = p.directives['connect-src'] + p.connect_src(*(Array.wrap(connect_sources) | [ws_origin, wss_origin, http_path])) + + worker_sources = p.directives['worker-src'] + p.worker_src(*(Array.wrap(worker_sources) | [gitlab_ws_origin, http_path])) + end + next unless Gitlab::CurrentSettings.snowplow_enabled? && !Gitlab::CurrentSettings.snowplow_collector_hostname.blank? default_connect_src = p.directives['connect-src'] || p.directives['default-src'] diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 2bf239979f7453..9efb0c61f8b7c8 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -485,6 +485,15 @@ def hidden_resource_icon(resource, css_class: nil) end end + def controller_full_path + action = case controller.action_name + when 'create' then 'new' + when 'update' then 'edit' + else controller.action_name + end + "#{controller.controller_path}/#{action}" + end + private def browser_id diff --git a/app/helpers/vite_helper.rb b/app/helpers/vite_helper.rb new file mode 100644 index 00000000000000..4d1085a51695ca --- /dev/null +++ b/app/helpers/vite_helper.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module ViteHelper + def universal_javascript_include_tag(*args) + if vite_enabled + vite_javascript_tag(*args) + else + javascript_include_tag(*args) + end + end + + def universal_asset_path(*args) + if vite_enabled + vite_asset_path(*args) + else + asset_path(*args) + end + end + + private + + def vite_enabled + Feature.enabled?(:vite) && !Rails.env.test? && vite_running + end + + def vite_running + ViteRuby.instance.dev_server_running? + end +end diff --git a/app/helpers/webpack_helper.rb b/app/helpers/webpack_helper.rb index ba3c232bec418f..928741687980a2 100644 --- a/app/helpers/webpack_helper.rb +++ b/app/helpers/webpack_helper.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true module WebpackHelper + include ViteHelper + def prefetch_link_tag(source) href = asset_path(source) @@ -14,7 +16,11 @@ def prefetch_link_tag(source) end def webpack_bundle_tag(bundle) - javascript_include_tag(*webpack_entrypoint_paths(bundle)) + if vite_running + vite_javascript_tag bundle + else + javascript_include_tag(*webpack_entrypoint_paths(bundle)) + end end def webpack_preload_asset_tag(asset, options = {}) @@ -32,6 +38,8 @@ def webpack_preload_asset_tag(asset, options = {}) end def webpack_controller_bundle_tags + return if Feature.enabled?(:vite) && !Rails.env.test? + chunks = [] action = case controller.action_name diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml index 53ecad1b47497f..ccb8f3d388b64f 100644 --- a/app/views/layouts/_head.html.haml +++ b/app/views/layouts/_head.html.haml @@ -48,6 +48,16 @@ = webpack_bundle_tag 'legacy_sentry' = webpack_bundle_tag 'performance_bar' if performance_bar_enabled? + - if vite_enabled + %meta{ name: 'controller-path', content: controller_full_path } + - if Rails.env.development? + = vite_client_tag + = vite_javascript_tag "main" + - if Gitlab.ee? + = vite_javascript_tag "main_ee" + - if Gitlab.jh? + = vite_javascript_tag "main_jh" + = yield :page_specific_javascripts = webpack_bundle_tag 'super_sidebar' if show_super_sidebar? diff --git a/bin/vite b/bin/vite new file mode 100755 index 00000000000000..7527d097eb6e52 --- /dev/null +++ b/bin/vite @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'vite' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +bundle_binstub = File.expand_path("bundle", __dir__) + +if File.file?(bundle_binstub) + if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ + load(bundle_binstub) + else + abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. +Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") + end +end + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("vite_ruby", "vite") diff --git a/config/feature_flags/development/vite.yml b/config/feature_flags/development/vite.yml new file mode 100644 index 00000000000000..49a5e4c8a79370 --- /dev/null +++ b/config/feature_flags/development/vite.yml @@ -0,0 +1,8 @@ +--- +name: vite +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/94685 +rollout_issue_url: +milestone: '16.0' +type: development +group: group::foundations +default_enabled: false diff --git a/config/vite.json b/config/vite.json new file mode 100644 index 00000000000000..b428b0daec022d --- /dev/null +++ b/config/vite.json @@ -0,0 +1,18 @@ +{ + "all": { + "sourceCodeDir": "app/assets", + "entrypointsDir": "javascripts/entrypoints", + "devServerConnectTimeout": 3 + }, + "development": { + "autoBuild": true, + "publicOutputDir": "vite-dev", + "host": "localhost", + "port": 3038 + }, + "test": { + "autoBuild": true, + "publicOutputDir": "vite-test", + "port": 3037 + } +} diff --git a/config/webpack.config.js b/config/webpack.config.js index 3bcdc8245f5b93..3ea70ecefaa998 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -18,8 +18,6 @@ const fs = require('fs'); const path = require('path'); const BABEL_VERSION = require('@babel/core/package.json').version; -const SOURCEGRAPH_VERSION = require('@sourcegraph/code-host-integration/package.json').version; -const GITLAB_WEB_IDE_VERSION = require('@gitlab/web-ide/package.json').version; const BABEL_LOADER_VERSION = require('babel-loader/package.json').version; const CompressionPlugin = require('compression-webpack-plugin'); @@ -37,14 +35,23 @@ const { StatsWriterPlugin } = require('webpack-stats-plugin'); const WEBPACK_VERSION = require('webpack/package.json').version; const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); +const { + IS_EE, + IS_JH, + ROOT_PATH, + WEBPACK_OUTPUT_PATH, + WEBPACK_PUBLIC_PATH, + SOURCEGRAPH_PUBLIC_PATH, + SOURCEGRAPH_OUTPUT_PATH, + GITLAB_WEB_IDE_OUTPUT_PATH, + GITLAB_WEB_IDE_PUBLIC_PATH, +} = require('./webpack.constants'); + const createIncrementalWebpackCompiler = require('./helpers/incremental_webpack_compiler'); -const IS_EE = require('./helpers/is_ee_env'); -const IS_JH = require('./helpers/is_jh_env'); const vendorDllHash = require('./helpers/vendor_dll_hash'); const GraphqlKnownOperationsPlugin = require('./plugins/graphql_known_operations_plugin'); -const ROOT_PATH = path.resolve(__dirname, '..'); const SUPPORTED_BROWSERS = fs.readFileSync(path.join(ROOT_PATH, '.browserslistrc'), 'utf-8'); const SUPPORTED_BROWSERS_HASH = crypto .createHash('sha256') @@ -82,19 +89,9 @@ if (WEBPACK_REPORT) { NO_HASHED_CHUNKS = true; } -const WEBPACK_OUTPUT_PATH = path.join(ROOT_PATH, 'public/assets/webpack'); -const WEBPACK_PUBLIC_PATH = '/assets/webpack/'; const SOURCEGRAPH_PACKAGE = '@sourcegraph/code-host-integration'; const GITLAB_WEB_IDE_PACKAGE = '@gitlab/web-ide'; -const SOURCEGRAPH_PATH = path.join('sourcegraph', SOURCEGRAPH_VERSION, '/'); -const SOURCEGRAPH_OUTPUT_PATH = path.join(WEBPACK_OUTPUT_PATH, SOURCEGRAPH_PATH); -const SOURCEGRAPH_PUBLIC_PATH = path.join(WEBPACK_PUBLIC_PATH, SOURCEGRAPH_PATH); - -const GITLAB_WEB_IDE_PATH = path.join('gitlab-vscode', GITLAB_WEB_IDE_VERSION, '/'); -const GITLAB_WEB_IDE_OUTPUT_PATH = path.join(WEBPACK_OUTPUT_PATH, GITLAB_WEB_IDE_PATH); -const GITLAB_WEB_IDE_PUBLIC_PATH = path.join(WEBPACK_PUBLIC_PATH, GITLAB_WEB_IDE_PATH); - const devtool = IS_PRODUCTION ? 'source-map' : 'cheap-module-eval-source-map'; let autoEntriesCount = 0; diff --git a/config/webpack.constants.js b/config/webpack.constants.js new file mode 100644 index 00000000000000..0eb2ac70c82e5e --- /dev/null +++ b/config/webpack.constants.js @@ -0,0 +1,31 @@ +const path = require('path'); + +const ROOT_PATH = path.resolve(__dirname, '..'); +const WEBPACK_OUTPUT_PATH = path.join(ROOT_PATH, 'public/assets/webpack'); +const WEBPACK_PUBLIC_PATH = '/assets/webpack/'; +const SOURCEGRAPH_VERSION = require('@sourcegraph/code-host-integration/package.json').version; + +const SOURCEGRAPH_PATH = path.join('sourcegraph', SOURCEGRAPH_VERSION, '/'); +const SOURCEGRAPH_OUTPUT_PATH = path.join(WEBPACK_OUTPUT_PATH, SOURCEGRAPH_PATH); +const SOURCEGRAPH_PUBLIC_PATH = path.join(WEBPACK_PUBLIC_PATH, SOURCEGRAPH_PATH); + +const GITLAB_WEB_IDE_VERSION = require('@gitlab/web-ide/package.json').version; + +const GITLAB_WEB_IDE_PATH = path.join('gitlab-vscode', GITLAB_WEB_IDE_VERSION, '/'); +const GITLAB_WEB_IDE_OUTPUT_PATH = path.join(WEBPACK_OUTPUT_PATH, GITLAB_WEB_IDE_PATH); +const GITLAB_WEB_IDE_PUBLIC_PATH = path.join(WEBPACK_PUBLIC_PATH, GITLAB_WEB_IDE_PATH); + +const IS_EE = require('./helpers/is_ee_env'); +const IS_JH = require('./helpers/is_jh_env'); + +module.exports = { + IS_EE, + IS_JH, + ROOT_PATH, + WEBPACK_OUTPUT_PATH, + WEBPACK_PUBLIC_PATH, + SOURCEGRAPH_OUTPUT_PATH, + SOURCEGRAPH_PUBLIC_PATH, + GITLAB_WEB_IDE_OUTPUT_PATH, + GITLAB_WEB_IDE_PUBLIC_PATH, +}; diff --git a/package.json b/package.json index cc9924cc606264..fe1e275efd618c 100644 --- a/package.json +++ b/package.json @@ -234,8 +234,11 @@ "@gitlab/eslint-plugin": "19.0.0", "@gitlab/stylelint-config": "4.1.0", "@graphql-eslint/eslint-plugin": "3.20.1", + "@originjs/vite-plugin-commonjs": "^1.0.3", + "@rollup/plugin-graphql": "^2.0.3", "@testing-library/dom": "^7.16.2", "@types/jest": "^28.1.3", + "@vitejs/plugin-vue2": "^1.1.2", "@vue/compat": "^3.2.47", "@vue/compiler-sfc": "^3.2.47", "@vue/test-utils": "1.3.6", @@ -244,6 +247,7 @@ "@vue/vue3-jest": "^29.2.3", "ajv": "^8.10.0", "ajv-formats": "^2.1.1", + "autoprefixer": "^10.4.8", "axios-mock-adapter": "^1.15.0", "babel-jest": "^28.1.3", "chalk": "^2.4.1", @@ -283,6 +287,9 @@ "stylelint": "^14.9.1", "swagger-cli": "^4.0.4", "timezone-mock": "^1.0.8", + "vite": "^4.4.9", + "vite-plugin-ruby": "^3.2.2", + "vite-svg-loader": "^3.4.0", "vue-loader-vue3": "npm:vue-loader@17", "vue-test-utils-compat": "0.0.13", "vuex-mock-store": "^0.1.0", diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000000000..a47ef4f95284d3 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {}, + }, +}; diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index ad81c12505599a..1903b60a126e28 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -891,4 +891,38 @@ def stub_controller_method(method_name, value) end end end + + describe '#controller_full_path' do + let(:path) { 'some_path' } + let(:action) { 'show' } + + before do + allow(helper.controller).to receive(:controller_path).and_return(path) + allow(helper.controller).to receive(:action_name).and_return(action) + end + + context 'when is create action' do + let(:action) { 'create' } + + it 'transforms to "new" path' do + expect(helper.controller_full_path).to eq("#{path}/new") + end + end + + context 'when is update action' do + let(:action) { 'update' } + + it 'transforms to "edit" path' do + expect(helper.controller_full_path).to eq("#{path}/edit") + end + end + + context 'when is show action' do + let(:action) { 'show' } + + it 'passes through' do + expect(helper.controller_full_path).to eq("#{path}/#{action}") + end + end + end end diff --git a/spec/helpers/vite_helper_spec.rb b/spec/helpers/vite_helper_spec.rb new file mode 100644 index 00000000000000..edb5650ab1a308 --- /dev/null +++ b/spec/helpers/vite_helper_spec.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe ViteHelper, feature_category: :tooling do + let(:source) { 'foo.js' } + let(:vite_source) { 'vite/foo.js' } + let(:vite_tag) { '' } + let(:webpack_source) { 'webpack/foo.js' } + let(:webpack_tag) { '' } + + context 'when vite enabled' do + before do + stub_rails_env('development') + stub_feature_flags(vite: true) + + allow(helper).to receive(:vite_javascript_tag).and_return(vite_tag) + allow(helper).to receive(:vite_asset_path).and_return(vite_source) + allow(helper).to receive(:vite_stylesheet_tag).and_return(vite_tag) + allow(helper).to receive(:vite_asset_url).and_return(vite_source) + allow(helper).to receive(:vite_running).and_return(true) + end + + describe '#universal_javascript_include_tag' do + it 'returns vite javascript tag' do + expect(helper.universal_javascript_include_tag(source)).to eq(vite_tag) + end + end + + describe '#universal_asset_path' do + it 'returns vite asset path' do + expect(helper.universal_asset_path(source)).to eq(vite_source) + end + end + end + + context 'when vite disabled' do + before do + stub_feature_flags(vite: false) + + allow(helper).to receive(:javascript_include_tag).and_return(webpack_tag) + allow(helper).to receive(:asset_path).and_return(webpack_source) + allow(helper).to receive(:stylesheet_link_tag).and_return(webpack_tag) + allow(helper).to receive(:path_to_stylesheet).and_return(webpack_source) + end + + describe '#universal_javascript_include_tag' do + it 'returns webpack javascript tag' do + expect(helper.universal_javascript_include_tag(source)).to eq(webpack_tag) + end + end + + describe '#universal_asset_path' do + it 'returns ActionView asset path' do + expect(helper.universal_asset_path(source)).to eq(webpack_source) + end + end + end +end diff --git a/spec/helpers/webpack_helper_spec.rb b/spec/helpers/webpack_helper_spec.rb index f9e2d265153b1b..23585c4723998a 100644 --- a/spec/helpers/webpack_helper_spec.rb +++ b/spec/helpers/webpack_helper_spec.rb @@ -34,4 +34,22 @@ expect(output).to eq("") end end + + context 'when vite enabled' do + let(:bundle) { 'bundle.js' } + + before do + stub_rails_env('development') + stub_feature_flags(vite: true) + + allow(helper).to receive(:vite_javascript_tag).and_return('vite') + allow(helper).to receive(:vite_running).and_return(true) + end + + describe '#webpack_bundle_tag' do + it 'return vite javascript tag' do + expect(helper.webpack_bundle_tag(bundle)).to eq('vite') + end + end + end end diff --git a/spec/requests/content_security_policy_spec.rb b/spec/requests/content_security_policy_spec.rb index 3f0665f1ce572d..dcd55b1eeee89e 100644 --- a/spec/requests/content_security_policy_spec.rb +++ b/spec/requests/content_security_policy_spec.rb @@ -7,6 +7,7 @@ # of testing in application_controller_spec. RSpec.describe 'Content Security Policy', feature_category: :application_instrumentation do let(:snowplow_host) { 'snowplow.example.com' } + let(:vite_origin) { "#{ViteRuby.instance.config.host}:#{ViteRuby.instance.config.port}" } shared_examples 'snowplow is not in the CSP' do it 'does not add the snowplow collector hostname to the CSP' do @@ -46,5 +47,32 @@ it_behaves_like 'snowplow is not in the CSP' end + + context 'when vite enabled during development' do + before do + stub_rails_env('development') + stub_feature_flags(vite: true) + + get explore_root_url + end + + it 'adds vite csp' do + expect(response).to have_gitlab_http_status(:ok) + expect(response.headers['Content-Security-Policy']).to include(vite_origin) + end + end + + context 'when vite disabled' do + before do + stub_feature_flags(vite: false) + + get explore_root_url + end + + it "doesn't add vite csp" do + expect(response).to have_gitlab_http_status(:ok) + expect(response.headers['Content-Security-Policy']).not_to include(vite_origin) + end + end end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 60655a3cf501bf..1880acaeb0529e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -345,6 +345,8 @@ # Keep-around refs should only be turned off for specific projects/repositories. stub_feature_flags(disable_keep_around_refs: false) + stub_feature_flags(vite: false) + allow(Gitlab::GitalyClient).to receive(:can_use_disk?).and_return(enable_rugged) else unstub_all_feature_flags diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 00000000000000..fb036ae6068a25 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,100 @@ +import path from 'path'; +import { defineConfig } from 'vite'; +import svgLoader from 'vite-svg-loader'; +import vue from '@vitejs/plugin-vue2'; +import graphql from '@rollup/plugin-graphql'; +import RubyPlugin from 'vite-plugin-ruby'; +import { viteCommonjs } from '@originjs/vite-plugin-commonjs'; +import webpackConfig from './config/webpack.config'; +import { + IS_EE, + IS_JH, + SOURCEGRAPH_PUBLIC_PATH, + GITLAB_WEB_IDE_PUBLIC_PATH, +} from './config/webpack.constants'; +import viteSharedConfig from './config/vite.json'; + +const aliasArr = Object.entries(webpackConfig.resolve.alias).map(([find, replacement]) => ({ + find: find.includes('$') ? new RegExp(find) : find, + replacement, +})); + +const assetsPath = path.resolve(__dirname, 'app/assets'); +const javascriptsPath = path.resolve(assetsPath, 'javascripts'); + +const emptyComponent = path.resolve(javascriptsPath, 'vue_shared/components/empty_component.js'); + +const [rubyPlugin, ...rest] = RubyPlugin(); + +// We can't use regular 'resolve' which points to sourceCodeDir in vite.json +// Because we need for '~' alias to resolve to app/assets/javascripts +// We can't use javascripts folder in sourceCodeDir because we also need to resolve other assets +// With undefined 'resolve' an '~' alias from Webpack config is used instead +// See the issue for details: https://github.com/ElMassimo/vite_ruby/issues/237 +const fixedRubyPlugin = [ + { + ...rubyPlugin, + config: (...args) => { + const originalConfig = rubyPlugin.config(...args); + return { + ...originalConfig, + resolve: undefined, + }; + }, + }, + ...rest, +]; + +const EE_ALIAS_FALLBACK = [ + { + find: /^ee_component\/(.*)\.vue/, + replacement: emptyComponent, + }, +]; + +const JH_ALIAS_FALLBACK = [ + { + find: /^jh_component\/(.*)\.vue/, + replacement: emptyComponent, + }, +]; + +export default defineConfig({ + resolve: { + alias: [ + ...aliasArr, + ...(IS_EE ? [] : EE_ALIAS_FALLBACK), + ...(IS_JH ? [] : JH_ALIAS_FALLBACK), + { + find: '~/', + replacement: javascriptsPath, + }, + ], + }, + plugins: [ + fixedRubyPlugin, + vue(), + graphql(), + svgLoader({ + defaultImport: 'raw', + }), + viteCommonjs({ + include: [path.resolve(javascriptsPath, 'locale/ensure_single_line.cjs')], + }), + ], + define: { + IS_EE: IS_EE ? 'window.gon && window.gon.ee' : JSON.stringify(false), + IS_JH: IS_JH ? 'window.gon && window.gon.jh' : JSON.stringify(false), + 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), + 'process.env.SOURCEGRAPH_PUBLIC_PATH': JSON.stringify(SOURCEGRAPH_PUBLIC_PATH), + 'process.env.GITLAB_WEB_IDE_PUBLIC_PATH': JSON.stringify(GITLAB_WEB_IDE_PUBLIC_PATH), + }, + server: { + hmr: { + host: viteSharedConfig?.development?.host || 'localhost', + // ensure we stay compatible with HTTPS enabled for GDK + protocol: 'ws', + }, + https: false, + }, +}); diff --git a/yarn.lock b/yarn.lock index 8cd3137a593dbf..ae96623fe9c6fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -328,9 +328,9 @@ js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.4", "@babel/parser@^7.16.8", "@babel/parser@^7.18.10", "@babel/parser@^7.18.4", "@babel/parser@^7.19.0": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" - integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.3.tgz#1d285d67a19162ff9daa358d4cb41d50c06220b3" + integrity sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": version "7.17.12" @@ -1037,6 +1037,121 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@esbuild/android-arm64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.15.tgz#abbe87b815d2f95ec749ffb4eba65d7d5343411f" + integrity sha512-NI/gnWcMl2kXt1HJKOn2H69SYn4YNheKo6NZt1hyfKWdMbaGadxjZIkcj4Gjk/WPxnbFXs9/3HjGHaknCqjrww== + +"@esbuild/android-arm@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.15.tgz#6afedd79c68d5d4d1e434e20a9ab620bb5849372" + integrity sha512-wlkQBWb79/jeEEoRmrxt/yhn5T1lU236OCNpnfRzaCJHZ/5gf82uYx1qmADTBWE0AR/v7FiozE1auk2riyQd3w== + +"@esbuild/android-x64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.15.tgz#cdd886a58748b1584ad72d960c446fa958c11ab3" + integrity sha512-FM9NQamSaEm/IZIhegF76aiLnng1kEsZl2eve/emxDeReVfRuRNmvT28l6hoFD9TsCxpK+i4v8LPpEj74T7yjA== + +"@esbuild/darwin-arm64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.15.tgz#648b124a6a63022adb5b0cf441e264e8f5ba4af2" + integrity sha512-XmrFwEOYauKte9QjS6hz60FpOCnw4zaPAb7XV7O4lx1r39XjJhTN7ZpXqJh4sN6q60zbP6QwAVVA8N/wUyBH/w== + +"@esbuild/darwin-x64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.15.tgz#91cd2601c1604d123454d325e6b24fb6438350cf" + integrity sha512-bMqBmpw1e//7Fh5GLetSZaeo9zSC4/CMtrVFdj+bqKPGJuKyfNJ5Nf2m3LknKZTS+Q4oyPiON+v3eaJ59sLB5A== + +"@esbuild/freebsd-arm64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.15.tgz#575940b0fc2f52833de4f6360445586742a8ff8b" + integrity sha512-LoTK5N3bOmNI9zVLCeTgnk5Rk0WdUTrr9dyDAQGVMrNTh9EAPuNwSTCgaKOKiDpverOa0htPcO9NwslSE5xuLA== + +"@esbuild/freebsd-x64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.15.tgz#09694fc601dd8d3263a1075977ee7d3488514ef8" + integrity sha512-62jX5n30VzgrjAjOk5orYeHFq6sqjvsIj1QesXvn5OZtdt5Gdj0vUNJy9NIpjfdNdqr76jjtzBJKf+h2uzYuTQ== + +"@esbuild/linux-arm64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.15.tgz#2f5d226b024964f2b5b6bce7c874a8ad31785fa2" + integrity sha512-BWncQeuWDgYv0jTNzJjaNgleduV4tMbQjmk/zpPh/lUdMcNEAxy+jvneDJ6RJkrqloG7tB9S9rCrtfk/kuplsQ== + +"@esbuild/linux-arm@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.15.tgz#172331fc66bbe89ba96e5e2ad583b2faa132d85c" + integrity sha512-dT4URUv6ir45ZkBqhwZwyFV6cH61k8MttIwhThp2BGiVtagYvCToF+Bggyx2VI57RG4Fbt21f9TmXaYx0DeUJg== + +"@esbuild/linux-ia32@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.15.tgz#fa797051131ee5f46d70c65a7edd14b6230cfc2f" + integrity sha512-JPXORvgHRHITqfms1dWT/GbEY89u848dC08o0yK3fNskhp0t2TuNUnsrrSgOdH28ceb1hJuwyr8R/1RnyPwocw== + +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== + +"@esbuild/linux-loong64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.15.tgz#aeae1fa3d92b1486a91c0cb1cfd9c0ebe9168de4" + integrity sha512-kArPI0DopjJCEplsVj/H+2Qgzz7vdFSacHNsgoAKpPS6W/Ndh8Oe24HRDQ5QCu4jHgN6XOtfFfLpRx3TXv/mEg== + +"@esbuild/linux-mips64el@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.15.tgz#b63cfe356c33807c4d8ee5a75452922e98502073" + integrity sha512-b/tmngUfO02E00c1XnNTw/0DmloKjb6XQeqxaYuzGwHe0fHVgx5/D6CWi+XH1DvkszjBUkK9BX7n1ARTOst59w== + +"@esbuild/linux-ppc64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.15.tgz#7dcb394e69cb47e4dc8a5960dd58b1a273d07f5d" + integrity sha512-KXPY69MWw79QJkyvUYb2ex/OgnN/8N/Aw5UDPlgoRtoEfcBqfeLodPr42UojV3NdkoO4u10NXQdamWm1YEzSKw== + +"@esbuild/linux-riscv64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.15.tgz#fdfb9cf23b50d33112315e3194b9e16f7abf6c30" + integrity sha512-komK3NEAeeGRnvFEjX1SfVg6EmkfIi5aKzevdvJqMydYr9N+pRQK0PGJXk+bhoPZwOUgLO4l99FZmLGk/L1jWg== + +"@esbuild/linux-s390x@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.15.tgz#ce608d95989a502878d7cb1167df791e45268011" + integrity sha512-632T5Ts6gQ2WiMLWRRyeflPAm44u2E/s/TJvn+BP6M5mnHSk93cieaypj3VSMYO2ePTCRqAFXtuYi1yv8uZJNA== + +"@esbuild/linux-x64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.15.tgz#49bbba5607702709f63b41906b4f1bcc44cf2f8e" + integrity sha512-MsHtX0NgvRHsoOtYkuxyk4Vkmvk3PLRWfA4okK7c+6dT0Fu4SUqXAr9y4Q3d8vUf1VWWb6YutpL4XNe400iQ1g== + +"@esbuild/netbsd-x64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.15.tgz#08b5ccaf027c7e2174b9a19c29bebfe59dce1cfb" + integrity sha512-djST6s+jQiwxMIVQ5rlt24JFIAr4uwUnzceuFL7BQT4CbrRtqBPueS4GjXSiIpmwVri1Icj/9pFRJ7/aScvT+A== + +"@esbuild/openbsd-x64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.15.tgz#38ec4223ebab562f0a89ffe20a40f05d500f89f0" + integrity sha512-naeRhUIvhsgeounjkF5mvrNAVMGAm6EJWiabskeE5yOeBbLp7T89tAEw0j5Jm/CZAwyLe3c67zyCWH6fsBLCpw== + +"@esbuild/sunos-x64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.15.tgz#dbbebf641957a54b77f39ca9b10b0b38586799ba" + integrity sha512-qkT2+WxyKbNIKV1AEhI8QiSIgTHMcRctzSaa/I3kVgMS5dl3fOeoqkb7pW76KwxHoriImhx7Mg3TwN/auMDsyQ== + +"@esbuild/win32-arm64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.15.tgz#7f15fe5d14b9b24eb18ca211ad92e0f5df92a18b" + integrity sha512-HC4/feP+pB2Vb+cMPUjAnFyERs+HJN7E6KaeBlFdBv799MhD+aPJlfi/yk36SED58J9TPwI8MAcVpJgej4ud0A== + +"@esbuild/win32-ia32@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.15.tgz#a6609735a4a5e8fbdeb045720bc8be46825566fa" + integrity sha512-ovjwoRXI+gf52EVF60u9sSDj7myPixPxqzD5CmkEUmvs+W9Xd0iqISVBQn8xcx4ciIaIVlWCuTbYDOXOnOL44Q== + +"@esbuild/win32-x64@0.18.15": + version "0.18.15" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.15.tgz#41ee66253566124cc44bce1b4c760a87d9f5bf1d" + integrity sha512-imUxH9a3WJARyAvrG7srLyiK73XdX83NXQkjKvQ+7vPh3ZxoLrzvPkQKKw2DwZ+RV2ZB6vBfNHP8XScAmQC3aA== + "@eslint-community/eslint-utils@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz#a831e6e468b4b2b5ae42bf658bea015bf10bc518" @@ -1695,6 +1810,13 @@ consola "^2.15.0" node-fetch "^2.6.1" +"@originjs/vite-plugin-commonjs@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@originjs/vite-plugin-commonjs/-/vite-plugin-commonjs-1.0.3.tgz#2e3fb11ec78847da9422b79c103953f94d667f09" + integrity sha512-KuEXeGPptM2lyxdIEJ4R11+5ztipHoE7hy8ClZt3PYaOVQ/pyngd2alaSrPnwyFeOW1UagRBaQ752aA1dTMdOQ== + dependencies: + esbuild "^0.14.14" + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -1755,6 +1877,23 @@ dependencies: type-fest "^2.0.0" +"@rollup/plugin-graphql@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-graphql/-/plugin-graphql-2.0.3.tgz#35fea077e225e2982ce8483dd6c381e8cca03aea" + integrity sha512-IuuELo+0t29adRuLVg8izBFiUXFSFw8BmezespscynRfvfXSOV0S7g8RzQt75VzP6KHHVmNmlAgz+8qlkLur3w== + dependencies: + "@rollup/pluginutils" "^5.0.1" + graphql-tag "^2.12.6" + +"@rollup/pluginutils@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" + integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + "@sentry/core@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" @@ -2150,6 +2289,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + "@types/aria-query@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" @@ -2225,6 +2369,11 @@ dependencies: "@types/ms" "*" +"@types/estree@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + "@types/events@*": version "1.2.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" @@ -2567,6 +2716,11 @@ "@typescript-eslint/types" "5.38.0" eslint-visitor-keys "^3.3.0" +"@vitejs/plugin-vue2@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue2/-/plugin-vue2-1.1.2.tgz#891f0acc5a6a2b4886a74cb8d6359d42f19f968a" + integrity sha512-y6OEA+2UdJ0xrEQHodq20v9r3SpS62IOHrgN92JPLvVpNkhcissu7yvD5PXMzMESyazj0XNWGsc8UQk8+mVrjQ== + "@vue/apollo-components@^4.0.0-beta.4": version "4.0.0-beta.4" resolved "https://registry.yarnpkg.com/@vue/apollo-components/-/apollo-components-4.0.0-beta.4.tgz#cc2510cf22636c5b13fb42470578031631af6c51" @@ -2617,7 +2771,7 @@ postcss "^8.4.14" source-map "^0.6.1" -"@vue/compiler-sfc@^3.2.47": +"@vue/compiler-sfc@^3.2.20", "@vue/compiler-sfc@^3.2.47": version "3.2.47" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz#1bdc36f6cdc1643f72e2c397eb1a398f5004ad3d" integrity sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ== @@ -3293,6 +3447,18 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +autoprefixer@^10.4.8: + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + autosize@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/autosize/-/autosize-5.0.1.tgz#ed269b0fa9b7eb47627048a1bb3299e99e003a0f" @@ -3650,15 +3816,15 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.3: - version "4.21.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" - integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== +browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.3, browserslist@^4.21.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== dependencies: - caniuse-lite "^1.0.30001370" - electron-to-chromium "^1.4.202" - node-releases "^2.0.6" - update-browserslist-db "^1.0.5" + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" bser@2.1.1: version "2.1.1" @@ -3835,7 +4001,7 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001370: +caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: version "1.0.30001478" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz#0ef8a1cf8b16be47a0f9fc4ecfc952232724b32a" integrity sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw== @@ -4488,16 +4654,16 @@ css-loader@^2.1.1: postcss-value-parser "^3.3.0" schema-utils "^1.0.0" -css-select@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.2.tgz#8b52b6714ed3a80d8221ec971c543f3b12653286" - integrity sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw== +css-select@^4.1.2, css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" - css-what "^5.0.0" - domhandler "^4.2.0" - domutils "^2.6.0" - nth-check "^2.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" css-selector-parser@^1.3: version "1.3.0" @@ -4509,6 +4675,14 @@ css-shorthand-properties@^1.0.0: resolved "https://registry.yarnpkg.com/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz#1c808e63553c283f289f2dd56fcee8f3337bd935" integrity sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A== +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + css-tree@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.1.0.tgz#170e27ccf94e7c5facb183765c25898be843d1d2" @@ -4531,6 +4705,11 @@ css-what@^5.0.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -4541,6 +4720,13 @@ cssfontparser@^1.2.1: resolved "https://registry.yarnpkg.com/cssfontparser/-/cssfontparser-1.2.1.tgz#f4022fc8f9700c68029d542084afbaf425a3f3e3" integrity sha1-9AIvyPlwDGgCnVQghK+69CWj8+M= +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + cssom@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" @@ -5430,10 +5616,10 @@ domexception@^4.0.0: dependencies: webidl-conversions "^7.0.0" -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" - integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" @@ -5447,10 +5633,10 @@ dompurify@2.4.5, dompurify@^2.4.5: resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.5.tgz#0e89a27601f0bad978f9a924e7a05d5d2cccdd87" integrity sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA== -domutils@^2.5.2, domutils@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.6.0.tgz#2e15c04185d43fb16ae7057cb76433c6edb938b7" - integrity sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA== +domutils@^2.5.2, domutils@^2.6.0, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" domelementtype "^2.2.0" @@ -5509,10 +5695,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.4.202: - version "1.4.230" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.230.tgz#666909fdf5765acb1348b69752ee9955dc1664b7" - integrity sha512-3pwjAK0qHSDN9+YAF4fJknsSruP7mpjdWzUSruIJD/JCH77pEh0SorEyb3xVaKkfwk2tzjOt2D8scJ0KAdfXLA== +electron-to-chromium@^1.4.284: + version "1.4.335" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.335.tgz#69c08baa608bbb58e290d83320190fa82c835efe" + integrity sha512-l/eowQqTnrq3gu+WSrdfkhfNHnPgYqlKAwxz7MTOj6mom19vpEDHNXl6dxDxyTiYuhemydprKr/HCrHfgk+OfQ== elkjs@^0.8.2: version "0.8.2" @@ -5698,6 +5884,161 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== + +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== + +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== + +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== + +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== + +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== + +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== + +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== + +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== + +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== + +esbuild@^0.14.14: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== + optionalDependencies: + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" + +esbuild@^0.18.10: + version "0.18.15" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.15.tgz#5b5c1a22e608afd5675f82ad466c4d2cfd723f85" + integrity sha512-3WOOLhrvuTGPRzQPU6waSDWrDTnQriia72McWcn6UCi43GhCHrXH4S59hKMeez+IITmdUuUyvbU9JIp+t3xlPQ== + optionalDependencies: + "@esbuild/android-arm" "0.18.15" + "@esbuild/android-arm64" "0.18.15" + "@esbuild/android-x64" "0.18.15" + "@esbuild/darwin-arm64" "0.18.15" + "@esbuild/darwin-x64" "0.18.15" + "@esbuild/freebsd-arm64" "0.18.15" + "@esbuild/freebsd-x64" "0.18.15" + "@esbuild/linux-arm" "0.18.15" + "@esbuild/linux-arm64" "0.18.15" + "@esbuild/linux-ia32" "0.18.15" + "@esbuild/linux-loong64" "0.18.15" + "@esbuild/linux-mips64el" "0.18.15" + "@esbuild/linux-ppc64" "0.18.15" + "@esbuild/linux-riscv64" "0.18.15" + "@esbuild/linux-s390x" "0.18.15" + "@esbuild/linux-x64" "0.18.15" + "@esbuild/netbsd-x64" "0.18.15" + "@esbuild/openbsd-x64" "0.18.15" + "@esbuild/sunos-x64" "0.18.15" + "@esbuild/win32-arm64" "0.18.15" + "@esbuild/win32-ia32" "0.18.15" + "@esbuild/win32-x64" "0.18.15" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -6435,6 +6776,11 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -6775,7 +7121,7 @@ graphql-sse@^1.0.1: resolved "https://registry.yarnpkg.com/graphql-sse/-/graphql-sse-1.0.4.tgz#051598b0e06c225327aac659f19fcc18bcaa0191" integrity sha512-oB43ifRcEdElgep9jTP9qsj5cJ7Ny/1tAFyIl1W3A0hXRRg/P71tUHzMFBrRkEsJ9IA7MTp+RKSJfh52QR6PBQ== -graphql-tag@^2.11.0, graphql-tag@^2.12.3: +graphql-tag@^2.11.0, graphql-tag@^2.12.3, graphql-tag@^2.12.6: version "2.12.6" resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== @@ -8447,9 +8793,9 @@ loader-runner@^4.1.0: integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + version "1.4.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" + integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" @@ -8953,6 +9299,11 @@ mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz#56c506d065fbf769515235e577b5a261552d56e9" integrity sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA== +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + mdn-data@2.0.27: version "2.0.27" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.27.tgz#1710baa7b0db8176d3b3d565ccb7915fc69525ab" @@ -9683,10 +10034,10 @@ multicast-dns@^7.2.4: dns-packet "^5.2.2" thunky "^1.0.2" -nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@^3.3.4, nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== nanomatch@^1.2.9: version "1.2.13" @@ -9776,10 +10127,10 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== nodemon@^2.0.19: version "2.0.19" @@ -9848,6 +10199,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -9855,7 +10211,7 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nth-check@^2.0.0, nth-check@^2.0.1: +nth-check@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== @@ -10418,7 +10774,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@8.4.14, postcss@^8.1.10, postcss@^8.2.1, postcss@^8.4.14: +postcss@8.4.14: version "8.4.14" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== @@ -10435,6 +10791,15 @@ postcss@^7.0.14, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6: picocolors "^0.2.1" source-map "^0.6.1" +postcss@^8.1.10, postcss@^8.2.1, postcss@^8.4.14, postcss@^8.4.27: + version "8.4.27" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057" + integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -11197,6 +11562,13 @@ robust-predicates@^3.0.0: resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a" integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g== +rollup@^3.27.1: + version "3.27.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.27.2.tgz#59adc973504408289be89e5978e938ce852c9520" + integrity sha512-YGwmHf7h2oUHkVBT248x0yt6vZkYQ3/rvE5iQuVBh3WO8GcJ6BNeOkpoX1yMHIiBm18EMLjBPIoUDkhgnyxGOQ== + optionalDependencies: + fsevents "~2.3.2" + rope-sequence@^1.3.0: version "1.3.3" resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.3.tgz#3f67fc106288b84b71532b4a5fd9d4881e4457f0" @@ -11803,6 +12175,11 @@ ssri@^8.0.0: dependencies: minipass "^3.1.1" +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + stack-utils@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" @@ -12118,6 +12495,19 @@ svg-tags@^1.0.0: resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= +svgo@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + swagger-cli@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/swagger-cli/-/swagger-cli-4.0.4.tgz#c3f0b94277073c776b9bcc3ae7507b372f3ff414" @@ -12775,10 +13165,10 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -update-browserslist-db@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" - integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -12939,6 +13329,33 @@ visibilityjs@^1.2.4: resolved "https://registry.yarnpkg.com/visibilityjs/-/visibilityjs-1.2.4.tgz#bff8663da62c8c10ad4ee5ae6a1ae6fac4259d63" integrity sha1-v/hmPaYsjBCtTuWuahrm+sQlnWM= +vite-plugin-ruby@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/vite-plugin-ruby/-/vite-plugin-ruby-3.2.2.tgz#a174bc435b11350cfcb1b976342ca740d0bcaed2" + integrity sha512-cuHG1MajRWPR8YdfF6lvgsQRnKFEBRwZF//asFbRiI1psacxB5aPlHSvYZYxAu5IflrAa0MdR0HxEq+g98M3iQ== + dependencies: + debug "^4.3.4" + fast-glob "^3.2.12" + +vite-svg-loader@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/vite-svg-loader/-/vite-svg-loader-3.6.0.tgz#71d246cba5e808c7f183a2a56a9dde6856bb0c92" + integrity sha512-bZJffcgCREW57kNkgMhuNqeDznWXyQwJ3wKrRhHLMMzwDnP5jr3vXW3cqsmquRR7VTP5mLdKj1/zzPPooGUuPw== + dependencies: + "@vue/compiler-sfc" "^3.2.20" + svgo "^2.7.0" + +vite@^4.4.9: + version "4.4.9" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" + integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== + dependencies: + esbuild "^0.18.10" + postcss "^8.4.27" + rollup "^3.27.1" + optionalDependencies: + fsevents "~2.3.2" + vm-browserify@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" -- GitLab