From 47a9ba3e2ff6daca404d061d965a8e3ab56ce765 Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 10:40:56 -0800 Subject: [PATCH 01/17] Don't run branch check --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2147efc16..a1f263fbb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,7 +64,7 @@ jobs: - run: | pip install pre-commit pre-commit install - pre-commit run --all-files + SKIP=no-commit-to-branch pre-commit run --all-files unit-test: From 38788d77adc9079b529137c624977ca040bfdded Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 11:23:01 -0800 Subject: [PATCH 02/17] fix pre-commit; telemetry_ids --- .ci/functional_test.sh | 15 +++++++++++++++ omnibus/cookbooks/firezone/recipes/telemetry.rb | 3 +-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.ci/functional_test.sh b/.ci/functional_test.sh index cafdff6b3..0abb09ac6 100755 --- a/.ci/functional_test.sh +++ b/.ci/functional_test.sh @@ -40,3 +40,18 @@ echo $page echo "Testing for sign in button" echo $page | grep '' + + +echo "Testing telemetry_id survives reconfigures" +tid1=`sudo grep 'telemetry_id' /etc/firezone/firezone-running.json` +sudo firezone-ctl reconfigure +tid2=`sudo grep 'telemetry_id' /etc/firezone/firezone-running.json` + +if [ "$tid1" = "$tid2" ]; then + echo "telemetry_ids match!" +else + echo "telemetry_ids differ:" + echo $tid1 + echo $tid2 + exit 1 +fi diff --git a/omnibus/cookbooks/firezone/recipes/telemetry.rb b/omnibus/cookbooks/firezone/recipes/telemetry.rb index b842b3049..98ae0d80e 100644 --- a/omnibus/cookbooks/firezone/recipes/telemetry.rb +++ b/omnibus/cookbooks/firezone/recipes/telemetry.rb @@ -18,7 +18,6 @@ if node['firezone']['telemetry']['enabled'] == false user node['firezone']['user'] group node['firezone']['group'] end - node['firezone']['telemetry_id'] = nil else file 'disable_telemetry' do path disable_telemetry_path @@ -27,5 +26,5 @@ else end unless /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node['firezone']['telemetry_id'].to_s) - node.normal['firezone']['telemetry_id'] = SecureRandom.uuid() + node.default['firezone']['telemetry_id'] = SecureRandom.uuid() end From c6dde15f5d1034731c51f78e08478ea7e204b833 Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 11:41:30 -0800 Subject: [PATCH 03/17] Gah telemetry_id --- .../cookbooks/firezone/libraries/config.rb | 54 +++++-------------- .../cookbooks/firezone/recipes/telemetry.rb | 20 ++++++- 2 files changed, 30 insertions(+), 44 deletions(-) diff --git a/omnibus/cookbooks/firezone/libraries/config.rb b/omnibus/cookbooks/firezone/libraries/config.rb index f8f836380..002e4834a 100644 --- a/omnibus/cookbooks/firezone/libraries/config.rb +++ b/omnibus/cookbooks/firezone/libraries/config.rb @@ -67,48 +67,18 @@ class Firezone node.consume_attributes('firezone' => secrets) rescue Errno::ENOENT begin - secret_key_base = if node['firezone'] && node['firezone']['secret_key_base'] - Chef::Log.warn 'Using secret_key_base from firezone.json. This value should really be managed in secrets.json. Writing to secrets.json.' - node['firezone']['secret_key_base'] - else - Chef::Log.warn 'No secret_key_base set! Generating and writing one to secrets.json. If this Firezone installation has multiple hosts, you must duplicate the secrets.json file exactly across all hosts.' - SecureRandom.base64(48) - end - live_view_signing_salt = if node['firezone'] && node['firezone']['live_view_signing_salt'] - Chef::Log.warn 'Using live_view_signing_salt from firezone.json. This value should really be managed in secrets.json. Writing to secrets.json.' - node['firezone']['live_view_signing_salt'] - else - Chef::Log.warn 'No live_view_signing_salt set! Generating and writing one to secrets.json. If this Firezone installation has multiple hosts, you must duplicate the secrets.json file exactly across all hosts.' - SecureRandom.base64(24) - end - cookie_signing_salt = if node['firezone'] && node['firezone']['cookie_signing_salt'] - Chef::Log.warn 'Using cookie_signing_salt from firezone.json. This value should really be managed in secrets.json. Writing to secrets.json.' - node['firezone']['cookie_signing_salt'] - else - Chef::Log.warn 'No cookie_signing_salt set! Generating and writing one to secrets.json. If this Firezone installation has multiple hosts, you must duplicate the secrets.json file exactly across all hosts.' - SecureRandom.base64(6) - end - wireguard_private_key = if node['firezone'] && node['firezone']['wireguard_private_key'] - Chef::Log.warn 'Using wireguard_private_key from firezone.json. This value should really be managed in secrets.json. Writing to secrets.json.' - node['firezone']['wireguard_private_key'] - else - Chef::Log.warn 'No wireguard_private_key set! Generating and writing one to secrets.json. If this Firezone installation has multiple hosts, you must duplicate the secrets.json file exactly across all hosts.' - `#{node['firezone']['install_directory']}/embedded/bin/wg genkey`.chomp - end - database_encryption_key = if node['firezone'] && node['firezone']['database_encryption_key'] - Chef::Log.warn 'Using database_encryption_key from firezone.json. This value should really be managed in secrets.json. Writing to secrets.json.' - node['firezone']['database_encryption_key'] - else - Chef::Log.warn 'No database_encryption_key set! Generating and writing one to secrets.json. If this Firezone installation has multiple hosts, you must duplicate the secrets.json file exactly across all hosts.' - SecureRandom.base64(32) - end - default_admin_password = if node['firezone'] && node['firezone']['default_admin_password'] - Chef::Log.warn 'Using default_admin_password from firezone.json. This value should really be managed in secrets.json. Writing to secrets.json.' - node['firezone']['default_admin_password'] - else - Chef::Log.warn 'No default_admin_password set! Generating and writing one to secrets.json. If this Firezone installation has multiple hosts, you must duplicate the secrets.json file exactly across all hosts.' - SecureRandom.base64(8) - end + secret_key_base = + node.dig('firezone', 'secret_key_base') || SecureRandom.base64(48) + live_view_signing_salt = + node.dig('firezone', 'live_view_signing_salt') || SecureRandom.base64(24) + cookie_signing_salt = + node.dig('firezone', 'cookie_signing_salt') || SecureRandom.base64(6) + wireguard_private_key = + node.dig('firezone', 'wireguard_private_key') || `#{node['firezone']['install_directory']}/embedded/bin/wg genkey`.chomp + database_encryption_key = + node.dig('firezone', 'database_encryption_key') || SecureRandom.base64(32) + default_admin_password = + node.dig('firezone', 'default_admin_password') || SecureRandom.base64(8) secrets = { 'secret_key_base' => secret_key_base, diff --git a/omnibus/cookbooks/firezone/recipes/telemetry.rb b/omnibus/cookbooks/firezone/recipes/telemetry.rb index 98ae0d80e..3ef141019 100644 --- a/omnibus/cookbooks/firezone/recipes/telemetry.rb +++ b/omnibus/cookbooks/firezone/recipes/telemetry.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "securerandom" + # Cookbook:: firezone # Recipe:: telemetry # @@ -10,6 +12,14 @@ include_recipe 'firezone::config' disable_telemetry_path = "#{node['firezone']['install_directory']}/.disable-telemetry" +telemetry_id_path = "#{node['firezone']['var_directory']}/cache/telemetry_id" +telemetry_id = + if /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node['firezone']['telemetry_id'].to_s) + # already generated + node["firezone"]["telemetry_id"] + else + SecureRandom.uuid + end if node['firezone']['telemetry']['enabled'] == false file 'disable_telemetry' do @@ -25,6 +35,12 @@ else end end -unless /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node['firezone']['telemetry_id'].to_s) - node.default['firezone']['telemetry_id'] = SecureRandom.uuid() +file "telemetry-id" do + path telemetry_id_path + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0440" + content telemetry_id + action :create_if_missing end +node.default["firezone"]["telemetry_id"] = File.read(telemetry_id_path) From e3a6eea5daa382658c0c385afb288378d825f89d Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 12:00:16 -0800 Subject: [PATCH 04/17] try consume_attributes --- omnibus/cookbooks/firezone/recipes/telemetry.rb | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/omnibus/cookbooks/firezone/recipes/telemetry.rb b/omnibus/cookbooks/firezone/recipes/telemetry.rb index 3ef141019..0c57cc370 100644 --- a/omnibus/cookbooks/firezone/recipes/telemetry.rb +++ b/omnibus/cookbooks/firezone/recipes/telemetry.rb @@ -12,7 +12,6 @@ require "securerandom" include_recipe 'firezone::config' disable_telemetry_path = "#{node['firezone']['install_directory']}/.disable-telemetry" -telemetry_id_path = "#{node['firezone']['var_directory']}/cache/telemetry_id" telemetry_id = if /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node['firezone']['telemetry_id'].to_s) # already generated @@ -20,6 +19,7 @@ telemetry_id = else SecureRandom.uuid end +node.consume_attributes("firezone" => { "telemetry_id" => telemetry_id }) if node['firezone']['telemetry']['enabled'] == false file 'disable_telemetry' do @@ -34,13 +34,3 @@ else action :delete end end - -file "telemetry-id" do - path telemetry_id_path - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0440" - content telemetry_id - action :create_if_missing -end -node.default["firezone"]["telemetry_id"] = File.read(telemetry_id_path) From de0d10ed01e0f17763dafdde77b2a217571f6a25 Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 12:15:51 -0800 Subject: [PATCH 05/17] Update npm --- .github/workflows/ci.yml | 2 + .../admin-one-bulma-dashboard/package.json | 2 +- apps/fz_http/assets/package-lock.json | 9501 +++++++++++++++-- 3 files changed, 8894 insertions(+), 611 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a1f263fbb..66ad0e1d8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -121,6 +121,8 @@ jobs: mix coveralls.github --umbrella || mix test build-package-test: + # Doesn't really need, but don't run this stage when iterating over docs + needs: lint-docs env: TELEMETRY_ENABLED: "false" runs-on: ${{ matrix.platform }} diff --git a/apps/fz_http/assets/local_modules/admin-one-bulma-dashboard/package.json b/apps/fz_http/assets/local_modules/admin-one-bulma-dashboard/package.json index c98516dd1..4169e0ebf 100644 --- a/apps/fz_http/assets/local_modules/admin-one-bulma-dashboard/package.json +++ b/apps/fz_http/assets/local_modules/admin-one-bulma-dashboard/package.json @@ -22,6 +22,6 @@ "bulma-responsive-tables": "^1.2.3", "bulma-switch-control": "^1.1.1", "bulma-upload-control": "^1.2.0", - "node-sass": "^6.0.1" + "node-sass": "^7.0.1" } } diff --git a/apps/fz_http/assets/package-lock.json b/apps/fz_http/assets/package-lock.json index 0893f3071..87b4ba15d 100644 --- a/apps/fz_http/assets/package-lock.json +++ b/apps/fz_http/assets/package-lock.json @@ -1,88 +1,8124 @@ { "name": "firezone", "version": "0.1.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" + "packages": { + "": { + "name": "firezone", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "buffer": "^6.0.3", + "buffer-from": "^1.1.1", + "glob": "^7.1.7", + "highlight.js": "^11.4.0", + "moment": "^2.29.1", + "phoenix": "file:../../../deps/phoenix", + "phoenix_html": "file:../../../deps/phoenix_html", + "phoenix_live_view": "file:../../../deps/phoenix_live_view", + "qrcode": "^1.3.3" + }, + "devDependencies": { + "@babel/core": "^7.16.12", + "@babel/preset-env": "^7.16.11", + "@creativebulma/bulma-tooltip": "^1.2.0", + "@fontsource/fira-mono": "^4.5.1", + "@fontsource/fira-sans": "^4.5.1", + "@fontsource/open-sans": "^4.5.3", + "@fortawesome/fontawesome-free": "^5.15.3", + "@mdi/font": "^6.5.95", + "admin-one-bulma-dashboard": "file:local_modules/admin-one-bulma-dashboard", + "autoprefixer": "^10.4.2", + "babel-loader": "^8.2.3", + "copy-webpack-plugin": "^8.1.1", + "css-loader": "^5.2.7", + "css-minimizer-webpack-plugin": "^3.4.1", + "file-loader": "^6.2.0", + "mini-css-extract-plugin": "^1.5.0", + "postcss": "^8.3.11", + "postcss-loader": "^6.2.1", + "sass": "^1.49.0", + "sass-loader": "^11.0.1", + "source-map": "^0.7.3", + "url-loader": "^4.1.1", + "webpack": "5.36.0", + "webpack-cli": "^4.9.2" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", - "dev": true + "../../../deps/phoenix": { + "version": "1.6.6", + "license": "MIT" }, - "@babel/core": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", - "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", + "../../../deps/phoenix_html": { + "version": "3.1.0" + }, + "../../../deps/phoenix_live_view": { + "version": "0.17.6", + "license": "MIT" + }, + "local_modules/admin-one-bulma-dashboard": { + "version": "1.5.5", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { + "bulma": "^0.9.0", + "bulma-checkbox": "^1.1.1", + "bulma-radio": "^1.1.1", + "bulma-responsive-tables": "^1.2.3", + "bulma-switch-control": "^1.1.1", + "bulma-upload-control": "^1.2.0", + "node-sass": "^7.0.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.3.tgz", + "integrity": "sha512-DmIAguV77yFP0MGVFWknCMgSLAtsLR3VlRTteR6xgMpIfYtwaZuMvjGv5YlpiqN7S/5q87DHyuIx8oa15kiyag==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.9", + "@jridgewell/trace-mapping": "^0.2.7" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", + "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.0.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.17.0", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.12", + "@babel/helpers": "^7.17.0", + "@babel/parser": "^7.17.0", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.10", - "@babel/types": "^7.16.8", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "semver": "^6.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", "source-map": "^0.5.0" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", + "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", + "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", + "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", + "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.0.tgz", + "integrity": "sha512-etcO/ohMNaNA2UBdaXBBSX/3aEzFMRrVfaPv8Ptc0k+cWpWW0QFiGZ2XnVqQZI1Cf734LbPGmqBKWESfW4x/dQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@creativebulma/bulma-tooltip": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@creativebulma/bulma-tooltip/-/bulma-tooltip-1.2.0.tgz", + "integrity": "sha512-ooImbeXEBxf77cttbzA7X5rC5aAWm9UsXIGViFOnsqB+6M944GkB28S5R4UWRqjFd2iW4zGEkEifAU+q43pt2w==", + "dev": true + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@fontsource/fira-mono": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.2.tgz", + "integrity": "sha512-0R6s18VVU07z883ecmsaGSpB81LVCorxuJzNNIjR+oLYfCs9d7AJ3+5Yfni39+OfIz0gqPRLWm+826jp7So1UA==", + "dev": true + }, + "node_modules/@fontsource/fira-sans": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@fontsource/fira-sans/-/fira-sans-4.5.2.tgz", + "integrity": "sha512-4r4Miy1ilx4c0imrpSWKb6PqzFKi5NwbQX9KJGqK/XEa+nJNilEU6JL+F8o+c1eosOEsdevVxMf2LaP3Y/PipA==", + "dev": true + }, + "node_modules/@fontsource/open-sans": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@fontsource/open-sans/-/open-sans-4.5.4.tgz", + "integrity": "sha512-iaEuU7l3VGA/bqWW9UsBD2bgFwCwDFwKlmOUft4Jps3pD3Zc9POMNYV0+mNyKbA4OIcIice32l+BMif8vY6pdg==", + "dev": true + }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", + "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", + "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "dev": true + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", + "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", + "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.2.7.tgz", + "integrity": "sha512-ZKfRhw6eK2vvdWqpU7DQq49+BZESqh5rmkYpNhuzkz01tapssl2sNNy6uMUIgrTtUWQDijomWJzJRCoevVrfgw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.9" + } + }, + "node_modules/@mdi/font": { + "version": "6.5.95", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-6.5.95.tgz", + "integrity": "sha512-ES5rj6J39FUkHe/b3C9SJs8bqIungYhuU7rBINTBaHOv/Ce4RCb3Gw08CZVl32W33UEkgRkzyWaIedV4at+QHg==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.0.tgz", + "integrity": "sha512-VhP1qZLXcrXRIaPoqb4YA55JQxLNF3jNR4T55IdOJa3+IFJKNYHtPvtXx8slmeMavj37vCzCfrqQM1vWLsYKLA==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.15.tgz", + "integrity": "sha512-zWt4SDDv1S9WRBNxLFxFRHxdD9tvH8f5/kg5/IaLFdnSNXsDY4eL3Q3XXN+VxUnWIhyVFDwcsmAprvwXoM/ClA==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", + "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", + "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", + "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true } } }, - "@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/admin-one-bulma-dashboard": { + "resolved": "local_modules/admin-one-bulma-dashboard", + "link": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz", + "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", + "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.19.1", + "caniuse-lite": "^1.0.30001297", + "fraction.js": "^4.1.2", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bulma": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.3.tgz", + "integrity": "sha512-0d7GNW1PY4ud8TWxdNcP6Cc8Bu7MxcntD/RRLGWuiw/s0a9P+XlH/6QoOIrmbj6o8WWJzJYhytiu9nFjTszk1g==", + "dev": true + }, + "node_modules/bulma-checkbox": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bulma-checkbox/-/bulma-checkbox-1.2.1.tgz", + "integrity": "sha512-Ad7kSzwYwHLYyow92IJPz9jgolDDo5ivlFdSBe7W4LR9WnLt/Gd2iE07m3uhoU/g37oIZcMHNC33ZxJKqAuSzQ==", + "dev": true, + "dependencies": { + "bulma": "^0.9.0" + } + }, + "node_modules/bulma-radio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bulma-radio/-/bulma-radio-1.2.0.tgz", + "integrity": "sha512-rIzqALGakpKf9Eju4sGMt2Pwnn7X+AdYh6itjsCxLCJ/Ext4Cdd/M7uevQlXDy0MSwrQBMBLR8buSToBCuI+zA==", + "dev": true, + "dependencies": { + "bulma": "^0.9.0" + } + }, + "node_modules/bulma-responsive-tables": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bulma-responsive-tables/-/bulma-responsive-tables-1.2.3.tgz", + "integrity": "sha512-3BMCFxqlfDytNEsLU/WXEJPaTI5YJFtTxrSPv40Fz37r2BpOgPkdIvaxP3E/mgAM1WzPfmgdi5U/vknglOzogg==", + "dev": true, + "dependencies": { + "bulma": "^0.9.0" + } + }, + "node_modules/bulma-switch-control": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bulma-switch-control/-/bulma-switch-control-1.2.1.tgz", + "integrity": "sha512-iU4ju2Nq2mNhRxOeutBzW2pRMdx4EuI7oqaVIM2ihjA/gL6CCKAdzFqjNRNLF63tFM42Xg3EgsravMIXiTF87A==", + "dev": true, + "dependencies": { + "bulma": "^0.9.0" + } + }, + "node_modules/bulma-upload-control": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bulma-upload-control/-/bulma-upload-control-1.2.0.tgz", + "integrity": "sha512-2raueVPVoG3KjHH+7Aok44nGSPIl76qzdkLKX/ziHAOwbiXBrlEYHXca8Hk0UDa0KElLiPT6Eb2Cvz+8FFUwBw==", + "dev": true, + "dependencies": { + "bulma": "^0.9.0" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001307", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001307.tgz", + "integrity": "sha512-+MXEMczJ4FuxJAUp0jvAl6Df0NI/OfW1RWEE61eSmzS7hw6lz4IKutbhbXendwq8BljfFuHtu26VWsg4afQ7Ng==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "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/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz", + "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.5", + "glob-parent": "^5.1.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/core-js-compat": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", + "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", + "dev": true, + "dependencies": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", + "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", + "dev": true, + "dependencies": { + "timsort": "^0.3.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/css-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dev": true, + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.0.16", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz", + "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.1.11", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz", + "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^3.0.1", + "postcss-calc": "^8.2.0", + "postcss-colormin": "^5.2.4", + "postcss-convert-values": "^5.0.3", + "postcss-discard-comments": "^5.0.2", + "postcss-discard-duplicates": "^5.0.2", + "postcss-discard-empty": "^5.0.2", + "postcss-discard-overridden": "^5.0.3", + "postcss-merge-longhand": "^5.0.5", + "postcss-merge-rules": "^5.0.5", + "postcss-minify-font-values": "^5.0.3", + "postcss-minify-gradients": "^5.0.5", + "postcss-minify-params": "^5.0.4", + "postcss-minify-selectors": "^5.1.2", + "postcss-normalize-charset": "^5.0.2", + "postcss-normalize-display-values": "^5.0.2", + "postcss-normalize-positions": "^5.0.3", + "postcss-normalize-repeat-style": "^5.0.3", + "postcss-normalize-string": "^5.0.3", + "postcss-normalize-timing-functions": "^5.0.2", + "postcss-normalize-unicode": "^5.0.3", + "postcss-normalize-url": "^5.0.4", + "postcss-normalize-whitespace": "^5.0.3", + "postcss-ordered-values": "^5.0.4", + "postcss-reduce-initial": "^5.0.2", + "postcss-reduce-transforms": "^5.0.3", + "postcss-svgo": "^5.0.3", + "postcss-unique-selectors": "^5.0.3" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", + "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/dijkstrajs": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", + "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", + "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "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==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fraction.js": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", + "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "dependencies": { + "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globule": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.3.tgz", + "integrity": "sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==", + "dev": true, + "dependencies": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "node_modules/highlight.js": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.4.0.tgz", + "integrity": "sha512-nawlpCBCSASs7EdvZOYOYVkJpGmAOKMYZgZtUqSRqodZE0GRVcFKwo1RcpeOemqh9hyttTdd5wDBwHkuSyUfnA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.0.tgz", + "integrity": "sha512-8OEHiPNOPTfaWnJ2SUHM8fmgeGq37uuGsQBvGKQJl1f+6WIy6g7G3fE2ruI5294bUKUI9FaCWt5hDvO8HSwsSg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz", + "integrity": "sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.0.tgz", + "integrity": "sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/node-sass": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz", + "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "async-foreach": "^0.1.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "meow": "^9.0.0", + "nan": "^2.13.2", + "node-gyp": "^8.4.1", + "npmlog": "^5.0.0", + "request": "^2.88.0", + "sass-graph": "4.0.0", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "bin": { + "node-sass": "bin/node-sass" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/node-sass/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/node-sass/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/node-sass/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/node-sass/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/node-sass/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-sass/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "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": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/phoenix": { + "resolved": "../../../deps/phoenix", + "link": true + }, + "node_modules/phoenix_html": { + "resolved": "../../../deps/phoenix_html", + "link": true + }, + "node_modules/phoenix_live_view": { + "resolved": "../../../deps/phoenix_live_view", + "link": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", + "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", + "dev": true, + "dependencies": { + "nanoid": "^3.2.0", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.3.tgz", + "integrity": "sha512-EGM2EBBWqP57N0E7N7WOLT116PJ39dwHVU01WO4XPPQLJfkL2xVgkMZ+TZvCfapj/uJH07UEfKHQNPHzSw/14Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz", + "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz", + "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", + "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", + "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", + "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", + "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz", + "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz", + "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.0.1", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz", + "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz", + "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz", + "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz", + "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", + "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", + "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz", + "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz", + "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz", + "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", + "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz", + "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", + "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz", + "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz", + "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", + "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz", + "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", + "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz", + "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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==", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.0.tgz", + "integrity": "sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.49.7", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.7.tgz", + "integrity": "sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==", + "dev": true, + "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/sass-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz", + "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "lodash": "^4.17.11", + "scss-tokenizer": "^0.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "sassgraph": "bin/sassgraph" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/sass-graph/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/sass-graph/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/sass-graph/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/sass-graph/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/sass-graph/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/sass-graph/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/sass-graph/node_modules/yargs": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/sass-graph/node_modules/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/sass-loader": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-11.1.1.tgz", + "integrity": "sha512-fOCp/zLmj1V1WHDZbUbPgrZhA7HKXHEqkslzB+05U5K9SbSbcmH91C7QLW31AsXikxUMaxXRhhcqWZAxUMLDyA==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", + "sass": "^1.3.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/scss-tokenizer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz", + "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==", + "dev": true, + "dependencies": { + "js-base64": "^2.4.3", + "source-map": "^0.7.1" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "node_modules/stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/stdout-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stdout-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylehacks": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz", + "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "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" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "acorn": "^8.5.0" + }, + "peerDependenciesMeta": { + "acorn": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "dev": true, + "dependencies": { + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "dependencies": { + "glob": "^7.1.2" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.36.0.tgz", + "integrity": "sha512-HdOhLXClUEwTnzQnzpSG9iL00ej23ojvfnGpF49ba0MkuAT2q+WhQilHFFJHOIVRBqbzakQ1vCWQV2K+QLX0Qw==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.47", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.2.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.4.0", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", + "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.3.tgz", + "integrity": "sha512-DmIAguV77yFP0MGVFWknCMgSLAtsLR3VlRTteR6xgMpIfYtwaZuMvjGv5YlpiqN7S/5q87DHyuIx8oa15kiyag==", "dev": true, "requires": { - "@babel/types": "^7.16.8", + "@jridgewell/sourcemap-codec": "^1.4.9", + "@jridgewell/trace-mapping": "^0.2.7" + } + }, + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "dev": true + }, + "@babel/core": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", + "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.0.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.0", + "@babel/parser": "^7.17.0", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -127,9 +8163,9 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz", - "integrity": "sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==", + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", @@ -142,13 +8178,13 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", - "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^4.7.1" + "regexpu-core": "^5.0.1" } }, "@babel/helper-define-polyfill-provider": { @@ -246,14 +8282,6 @@ "@babel/template": "^7.16.7", "@babel/traverse": "^7.16.7", "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - } } }, "@babel/helper-optimise-call-expression": { @@ -323,9 +8351,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/helper-validator-option": { @@ -347,31 +8375,31 @@ } }, "@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", + "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" } }, "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", - "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -851,14 +8879,6 @@ "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - } } }, "@babel/plugin-transform-modules-umd": { @@ -1096,9 +9116,9 @@ } }, "@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.0.tgz", + "integrity": "sha512-etcO/ohMNaNA2UBdaXBBSX/3aEzFMRrVfaPv8Ptc0k+cWpWW0QFiGZ2XnVqQZI1Cf734LbPGmqBKWESfW4x/dQ==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -1113,98 +9133,34 @@ "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - } } }, "@babel/traverse": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", - "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.17.0", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.10", - "@babel/types": "^7.16.8", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - } } }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - } } }, "@creativebulma/bulma-tooltip": { @@ -1220,21 +9176,21 @@ "dev": true }, "@fontsource/fira-mono": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.1.tgz", - "integrity": "sha512-4IuUqpI0Rk0Fd6XVcS8uTpwB0cIIvdyzcCP+dTF4xwqESQN6e9BbhlLY7zcko6ACJRfa/wdbgwKoZmqEKCbloQ==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.2.tgz", + "integrity": "sha512-0R6s18VVU07z883ecmsaGSpB81LVCorxuJzNNIjR+oLYfCs9d7AJ3+5Yfni39+OfIz0gqPRLWm+826jp7So1UA==", "dev": true }, "@fontsource/fira-sans": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@fontsource/fira-sans/-/fira-sans-4.5.1.tgz", - "integrity": "sha512-KB9fqfgaOM39rvI446dBHYp479RrHxKXAE31mBId9+0wBUSkaLuLbbgwpcTvsa120BmrbnQcTe075LbxnHLf/A==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@fontsource/fira-sans/-/fira-sans-4.5.2.tgz", + "integrity": "sha512-4r4Miy1ilx4c0imrpSWKb6PqzFKi5NwbQX9KJGqK/XEa+nJNilEU6JL+F8o+c1eosOEsdevVxMf2LaP3Y/PipA==", "dev": true }, "@fontsource/open-sans": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/@fontsource/open-sans/-/open-sans-4.5.3.tgz", - "integrity": "sha512-zabYpvz2XkZ4Vp1EN2/k0r5X9kQgwjdj1+kJ6B0T/oN4h9yqJqr9VKxa+JspRxClxDEo23K5GqfuIEH1+WyFOw==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@fontsource/open-sans/-/open-sans-4.5.4.tgz", + "integrity": "sha512-iaEuU7l3VGA/bqWW9UsBD2bgFwCwDFwKlmOUft4Jps3pD3Zc9POMNYV0+mNyKbA4OIcIice32l+BMif8vY6pdg==", "dev": true }, "@fortawesome/fontawesome-free": { @@ -1243,6 +9199,34 @@ "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==", "dev": true }, + "@gar/promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", + "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", + "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", + "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.2.7.tgz", + "integrity": "sha512-ZKfRhw6eK2vvdWqpU7DQq49+BZESqh5rmkYpNhuzkz01tapssl2sNNy6uMUIgrTtUWQDijomWJzJRCoevVrfgw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.9" + } + }, "@mdi/font": { "version": "6.5.95", "resolved": "https://registry.npmjs.org/@mdi/font/-/font-6.5.95.tgz", @@ -1275,6 +9259,43 @@ "fastq": "^1.6.0" } }, + "@npmcli/fs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.0.tgz", + "integrity": "sha512-VhP1qZLXcrXRIaPoqb4YA55JQxLNF3jNR4T55IdOJa3+IFJKNYHtPvtXx8slmeMavj37vCzCfrqQM1vWLsYKLA==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -1282,9 +9303,9 @@ "dev": true }, "@types/eslint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", - "integrity": "sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", "dev": true, "requires": { "@types/estree": "*", @@ -1292,9 +9313,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "requires": { "@types/eslint": "*", @@ -1320,9 +9341,9 @@ "dev": true }, "@types/node": { - "version": "16.11.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", - "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", + "version": "17.0.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.15.tgz", + "integrity": "sha512-zWt4SDDv1S9WRBNxLFxFRHxdD9tvH8f5/kg5/IaLFdnSNXsDY4eL3Q3XXN+VxUnWIhyVFDwcsmAprvwXoM/ClA==", "dev": true }, "@types/normalize-package-data": { @@ -1487,7 +9508,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", - "dev": true + "dev": true, + "requires": {} }, "@webpack-cli/info": { "version": "1.4.1", @@ -1502,7 +9524,8 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", - "dev": true + "dev": true, + "requires": {} }, "@xtuc/ieee754": { "version": "1.2.0", @@ -1523,14 +9546,13 @@ "dev": true }, "acorn": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", - "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, "admin-one-bulma-dashboard": { "version": "file:local_modules/admin-one-bulma-dashboard", - "dev": true, "requires": { "bulma": "^0.9.0", "bulma-checkbox": "^1.1.1", @@ -1538,7 +9560,37 @@ "bulma-responsive-tables": "^1.2.3", "bulma-switch-control": "^1.1.1", "bulma-upload-control": "^1.2.0", - "node-sass": "^6.0.1" + "node-sass": "^7.0.1" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz", + "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, "ajv": { @@ -1563,9 +9615,9 @@ }, "dependencies": { "ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -1586,13 +9638,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "dev": true, + "requires": {} }, "ansi-regex": { "version": "5.0.1", @@ -1619,19 +9666,19 @@ } }, "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "dev": true, "requires": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^3.6.0" } }, "array-union": { @@ -1732,13 +9779,13 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", - "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.20.0" + "core-js-compat": "^3.21.0" } }, "babel-plugin-polyfill-regenerator": { @@ -1839,18 +9886,18 @@ "dev": true }, "bulma-checkbox": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bulma-checkbox/-/bulma-checkbox-1.1.1.tgz", - "integrity": "sha512-16aTRbXQBCdfk8nrWSVJCasD28FudeVF+G+mZfMJc2N/xTcU4XXjzQ6Iya1neKOgXkXQMx9nJOH2n8H7LRztNg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bulma-checkbox/-/bulma-checkbox-1.2.1.tgz", + "integrity": "sha512-Ad7kSzwYwHLYyow92IJPz9jgolDDo5ivlFdSBe7W4LR9WnLt/Gd2iE07m3uhoU/g37oIZcMHNC33ZxJKqAuSzQ==", "dev": true, "requires": { "bulma": "^0.9.0" } }, "bulma-radio": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bulma-radio/-/bulma-radio-1.1.1.tgz", - "integrity": "sha512-aIHuMbpBGyZYx8KxbQRdjIy/0M9WHWz5VyxMggwxmCadnN0gd7gC/G96WUy9mhaoIfo9yX/Cf8pKQNinKH+w7w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bulma-radio/-/bulma-radio-1.2.0.tgz", + "integrity": "sha512-rIzqALGakpKf9Eju4sGMt2Pwnn7X+AdYh6itjsCxLCJ/Ext4Cdd/M7uevQlXDy0MSwrQBMBLR8buSToBCuI+zA==", "dev": true, "requires": { "bulma": "^0.9.0" @@ -1866,9 +9913,9 @@ } }, "bulma-switch-control": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bulma-switch-control/-/bulma-switch-control-1.1.1.tgz", - "integrity": "sha512-uvPhLeiip1P/JZf9nidbA+7cQmUYKzS5vVbzhEAUk0oz6H3hPhHDIef/rUwqig1veRUd7vXBZ1hOcsM9gLxv/A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bulma-switch-control/-/bulma-switch-control-1.2.1.tgz", + "integrity": "sha512-iU4ju2Nq2mNhRxOeutBzW2pRMdx4EuI7oqaVIM2ihjA/gL6CCKAdzFqjNRNLF63tFM42Xg3EgsravMIXiTF87A==", "dev": true, "requires": { "bulma": "^0.9.0" @@ -1883,6 +9930,32 @@ "bulma": "^0.9.0" } }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1928,9 +10001,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001301", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz", - "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==", + "version": "1.0.30001307", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001307.tgz", + "integrity": "sha512-+MXEMczJ4FuxJAUp0jvAl6Df0NI/OfW1RWEE61eSmzS7hw6lz4IKutbhbXendwq8BljfFuHtu26VWsg4afQ7Ng==", "dev": true }, "caseless": { @@ -1978,6 +10051,12 @@ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -1999,12 +10078,6 @@ "shallow-clone": "^3.0.0" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2020,6 +10093,12 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, "colord": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", @@ -2102,9 +10181,9 @@ } }, "core-js-compat": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", - "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", + "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", "dev": true, "requires": { "browserslist": "^4.19.1", @@ -2120,9 +10199,9 @@ } }, "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "cosmiconfig": { @@ -2224,9 +10303,9 @@ }, "dependencies": { "ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -2374,7 +10453,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", - "dev": true + "dev": true, + "requires": {} }, "csso": { "version": "4.2.0", @@ -2447,6 +10527,12 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, "dijkstrajs": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", @@ -2509,9 +10595,9 @@ } }, "electron-to-chromium": { - "version": "1.4.53", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.53.tgz", - "integrity": "sha512-rFveSKQczlcav+H3zkKqykU6ANseFwXwkl855jOIap5/0gnEcuIhv2ecz6aoTrXavF6I/CEBeRnBnkB51k06ew==", + "version": "1.4.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", + "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==", "dev": true }, "emoji-regex": { @@ -2530,6 +10616,16 @@ "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, "enhanced-resolve": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", @@ -2558,6 +10654,12 @@ "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2666,9 +10768,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -2813,56 +10915,20 @@ "dev": true }, "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dev": true, "requires": { - "aproba": "^1.0.3", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" } }, "gaze": { @@ -2952,16 +11018,16 @@ "dev": true }, "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } }, @@ -2993,9 +11059,9 @@ } }, "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "har-schema": { @@ -3029,23 +11095,6 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -3070,14 +11119,31 @@ "integrity": "sha512-nawlpCBCSASs7EdvZOYOYVkJpGmAOKMYZgZtUqSRqodZE0GRVcFKwo1RcpeOemqh9hyttTdd5wDBwHkuSyUfnA==" }, "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -3089,17 +11155,47 @@ "sshpk": "^1.7.0" } }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, "icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "ieee754": { "version": "1.2.1", @@ -3107,9 +11203,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "immutable": { @@ -3138,12 +11234,24 @@ "resolve-cwd": "^3.0.0" } }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3164,6 +11272,12 @@ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3180,9 +11294,9 @@ } }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { "has": "^1.0.3" @@ -3208,6 +11322,12 @@ "is-extglob": "^2.1.1" } }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3266,9 +11386,9 @@ "dev": true }, "jest-worker": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz", - "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==", + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.0.tgz", + "integrity": "sha512-8OEHiPNOPTfaWnJ2SUHM8fmgeGq37uuGsQBvGKQJl1f+6WIy6g7G3fE2ruI5294bUKUI9FaCWt5hDvO8HSwsSg==", "dev": true, "requires": { "@types/node": "*", @@ -3470,6 +11590,30 @@ "semver": "^6.0.0" } }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, "map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -3628,6 +11772,54 @@ "yallist": "^4.0.0" } }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -3667,6 +11859,12 @@ "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -3674,23 +11872,52 @@ "dev": true }, "node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", "dev": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", - "graceful-fs": "^4.2.3", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", + "npmlog": "^6.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", "which": "^2.0.2" }, "dependencies": { + "gauge": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz", + "integrity": "sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "npmlog": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.0.tgz", + "integrity": "sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q==", + "dev": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.0", + "set-blocking": "^2.0.0" + } + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -3709,13 +11936,13 @@ "dev": true }, "node-sass": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-6.0.1.tgz", - "integrity": "sha512-f+Rbqt92Ful9gX0cGtdYwjTrWAaGURgaK5rZCWOgCNyGWusFYHhbqCCBoFBeat+HKETOU02AyTxNhJV0YZf2jQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz", + "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==", "dev": true, "requires": { "async-foreach": "^0.1.3", - "chalk": "^1.1.1", + "chalk": "^4.1.2", "cross-spawn": "^7.0.3", "gaze": "^1.0.0", "get-stdin": "^4.0.1", @@ -3723,53 +11950,62 @@ "lodash": "^4.17.15", "meow": "^9.0.0", "nan": "^2.13.2", - "node-gyp": "^7.1.0", - "npmlog": "^4.0.0", + "node-gyp": "^8.4.1", + "npmlog": "^5.0.0", "request": "^2.88.0", - "sass-graph": "2.2.5", + "sass-graph": "4.0.0", "stdout-stream": "^1.4.0", "true-case-path": "^1.0.2" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -3833,15 +12069,15 @@ } }, "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "dev": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" } }, "nth-check": { @@ -3853,12 +12089,6 @@ "boolbase": "^1.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -3933,6 +12163,15 @@ } } }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -4009,9 +12248,9 @@ "dev": true }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pkg-dir": { @@ -4029,14 +12268,14 @@ "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" }, "postcss": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", - "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", + "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", "dev": true, "requires": { - "nanoid": "^3.1.30", + "nanoid": "^3.2.0", "picocolors": "^1.0.0", - "source-map-js": "^1.0.1" + "source-map-js": "^1.0.2" } }, "postcss-calc": { @@ -4074,25 +12313,29 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", - "dev": true + "dev": true, + "requires": {} }, "postcss-discard-duplicates": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", - "dev": true + "dev": true, + "requires": {} }, "postcss-discard-empty": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", - "dev": true + "dev": true, + "requires": {} }, "postcss-discard-overridden": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", - "dev": true + "dev": true, + "requires": {} }, "postcss-loader": { "version": "6.2.1", @@ -4182,7 +12425,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -4217,7 +12461,8 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", - "dev": true + "dev": true, + "requires": {} }, "postcss-normalize-display-values": { "version": "5.0.2", @@ -4323,9 +12568,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.7.tgz", - "integrity": "sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -4363,6 +12608,22 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -4387,9 +12648,9 @@ } }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true }, "queue-microtask": { @@ -4477,18 +12738,14 @@ } }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "readdirp": { @@ -4526,9 +12783,9 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, "requires": { "regenerate": "^1.4.2" @@ -4550,29 +12807,29 @@ } }, "regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", "dev": true, "requires": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" } }, "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, "regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -4631,13 +12888,14 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { @@ -4663,6 +12921,12 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -4700,9 +12964,9 @@ "dev": true }, "sass": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.0.tgz", - "integrity": "sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw==", + "version": "1.49.7", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.7.tgz", + "integrity": "sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -4711,147 +12975,89 @@ } }, "sass-graph": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", - "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz", + "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==", "dev": true, "requires": { "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^13.3.2" + "lodash": "^4.17.11", + "scss-tokenizer": "^0.3.0", + "yargs": "^17.2.1" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "dev": true } } }, @@ -4877,24 +13083,13 @@ } }, "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz", + "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==", "dev": true, "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "js-base64": "^2.4.3", + "source-map": "^0.7.1" } }, "semver": { @@ -4942,9 +13137,9 @@ "dev": true }, "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "slash": { @@ -4953,6 +13148,33 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -4966,9 +13188,9 @@ "dev": true }, "source-map-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, "source-map-support": { @@ -5022,9 +13244,9 @@ "dev": true }, "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -5038,6 +13260,15 @@ "tweetnacl": "~0.14.0" } }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -5051,6 +13282,49 @@ "dev": true, "requires": { "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "string-width": { @@ -5063,15 +13337,6 @@ "strip-ansi": "^6.0.1" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -5114,6 +13379,12 @@ "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "svgo": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", @@ -5169,12 +13440,12 @@ } }, "terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", "dev": true, "requires": { - "jest-worker": "^27.0.6", + "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", @@ -5304,6 +13575,24 @@ "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -5379,14 +13668,6 @@ "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - } } }, "watchpack": { From b4ed7311be90d994c4239d0586dfd8e01f9065ed Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 12:49:59 -0800 Subject: [PATCH 06/17] fix markdownlint basedir --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 66ad0e1d8..115a0b929 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,8 @@ jobs: - name: Lint Docs run: | npm install -g markdownlint-cli - markdownlint docs/ + cd docs + markdownlint . static-analysis: runs-on: ubuntu-18.04 From 5a019cd57e57e4823bf8a40b0154c401b8cf4f3a Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 13:44:16 -0800 Subject: [PATCH 07/17] Use telemetry_id file --- .../default/ctl-commands/create_admin.rb | 4 +-- .../files/default/ctl-commands/reconfigure.rb | 4 +-- .../cookbooks/firezone/libraries/config.rb | 1 - omnibus/cookbooks/firezone/recipes/app.rb | 3 ++- omnibus/cookbooks/firezone/recipes/phoenix.rb | 1 + .../cookbooks/firezone/recipes/telemetry.rb | 27 ++++++++++++------- .../firezone/templates/sv-phoenix-finish.erb | 6 ++--- omnibus/omnibus.rb | 6 +---- omnibus/package-scripts/firezone/postinst | 6 ++--- omnibus/package-scripts/firezone/postrm | 6 ++--- omnibus/package-scripts/firezone/preinst | 6 ++--- omnibus/package-scripts/firezone/prerm | 6 ++--- scripts/version.exs | 9 +++++-- 13 files changed, 48 insertions(+), 37 deletions(-) diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb index da49bc5cf..0087d5d6f 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb @@ -10,7 +10,7 @@ Resets the password for admin with email specified by default['firezone']['admin DESC def capture - telemetry_file = "/opt/firezone/sv/phoenix/env/TELEMETRY_ID" + telemetry_file = "/var/opt/firezone/cache/telemetry_id" if File.exist?(telemetry_file) telemetry_id = File.read(telemetry_file) if telemetry_id @@ -22,7 +22,7 @@ def capture distinct_id: telemetry_id } } - unless File.exist?("#{base_path}/.disable-telemetry") || ENV["TELEMETRY_ENABLED"] == "false" + unless File.exist?("/var/opt/firezone/.disable_telemetry") || ENV["TELEMETRY_ENABLED"] == "false" Net::HTTP.post(uri, data.to_json, "Content-Type" => "application/json") end end diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb index ea487096d..a33987946 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb @@ -6,7 +6,7 @@ require 'net/http' require 'json' def capture - telemetry_file = "/opt/firezone/sv/phoenix/env/TELEMETRY_ID" + telemetry_file = "/var/opt/firezone/cache/telemetry_id" if File.exist?(telemetry_file) telemetry_id = File.read(telemetry_file) if telemetry_id @@ -18,7 +18,7 @@ def capture distinct_id: telemetry_id } } - unless File.exist?("#{base_path}/.disable-telemetry") || ENV["TELEMETRY_ENABLED"] == "false" + unless File.exist?("/var/opt/firezone/.disable_telemetry") || ENV["TELEMETRY_ENABLED"] == "false" Net::HTTP.post(uri, data.to_json, "Content-Type" => "application/json") end end diff --git a/omnibus/cookbooks/firezone/libraries/config.rb b/omnibus/cookbooks/firezone/libraries/config.rb index 002e4834a..6b8865390 100644 --- a/omnibus/cookbooks/firezone/libraries/config.rb +++ b/omnibus/cookbooks/firezone/libraries/config.rb @@ -225,7 +225,6 @@ class Firezone 'WIREGUARD_IPV6_ADDRESS' => attributes['wireguard']['ipv6']['address'], # Allow env var to override config 'TELEMETRY_ENABLED' => ENV.fetch('TELEMETRY_ENABLED', attributes['telemetry']['enabled'] == false ? "false" : "true"), - 'TELEMETRY_ID' => attributes['telemetry_id'], 'CONNECTIVITY_CHECKS_ENABLED' => attributes['connectivity_checks']['enabled'].to_s, 'CONNECTIVITY_CHECKS_INTERVAL' => attributes['connectivity_checks']['interval'].to_s, diff --git a/omnibus/cookbooks/firezone/recipes/app.rb b/omnibus/cookbooks/firezone/recipes/app.rb index ae964bd8c..764ed0b67 100644 --- a/omnibus/cookbooks/firezone/recipes/app.rb +++ b/omnibus/cookbooks/firezone/recipes/app.rb @@ -41,7 +41,8 @@ file 'environment-variables' do # updated when config is updated. attributes.merge!( 'force_ssl' => node['firezone']['nginx']['force_ssl'], - 'mix_env' => 'prod' + 'mix_env' => 'prod', + 'telemetry_id' => File.read("#{node["firezone"]["var_directory"]}/cache/telemetry_id") ) content Firezone::Config.environment_variables_from(attributes) diff --git a/omnibus/cookbooks/firezone/recipes/phoenix.rb b/omnibus/cookbooks/firezone/recipes/phoenix.rb index 4c070365b..8edd2e927 100644 --- a/omnibus/cookbooks/firezone/recipes/phoenix.rb +++ b/omnibus/cookbooks/firezone/recipes/phoenix.rb @@ -60,6 +60,7 @@ if node['firezone']['phoenix']['enabled'] action :enable subscribes :restart, 'file[environment-variables]' subscribes :restart, 'file[disable-telemetry]' + subscribes :restart, 'file[telemetry-id]' end else runit_service 'phoenix' do diff --git a/omnibus/cookbooks/firezone/recipes/telemetry.rb b/omnibus/cookbooks/firezone/recipes/telemetry.rb index 0c57cc370..f19f2a36d 100644 --- a/omnibus/cookbooks/firezone/recipes/telemetry.rb +++ b/omnibus/cookbooks/firezone/recipes/telemetry.rb @@ -11,15 +11,7 @@ require "securerandom" include_recipe 'firezone::config' -disable_telemetry_path = "#{node['firezone']['install_directory']}/.disable-telemetry" -telemetry_id = - if /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node['firezone']['telemetry_id'].to_s) - # already generated - node["firezone"]["telemetry_id"] - else - SecureRandom.uuid - end -node.consume_attributes("firezone" => { "telemetry_id" => telemetry_id }) +disable_telemetry_path = "#{node['firezone']['var_directory']}/.disable_telemetry" if node['firezone']['telemetry']['enabled'] == false file 'disable_telemetry' do @@ -34,3 +26,20 @@ else action :delete end end + +file "telemetry-id" do + telemetry_id = + if /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node['firezone']['telemetry_id'].to_s) + # already generated + node["firezone"]["telemetry_id"] + else + SecureRandom.uuid + end + + path "#{node['firezone']['var_directory']}/cache/telemetry_id" + mode "0440" + owner node["firezone"]["user"] + group node["firezone"]["group"] + content telemetry_id + action :create_if_missing +end diff --git a/omnibus/cookbooks/firezone/templates/sv-phoenix-finish.erb b/omnibus/cookbooks/firezone/templates/sv-phoenix-finish.erb index 4cbba653c..d538f5892 100644 --- a/omnibus/cookbooks/firezone/templates/sv-phoenix-finish.erb +++ b/omnibus/cookbooks/firezone/templates/sv-phoenix-finish.erb @@ -3,8 +3,8 @@ exec 2>&1 capture () { if type curl > /dev/null; then - if [ -e /opt/firezone/sv/phoenix/env/TELEMETRY_ID ]; then - telemetry_id=`cat /opt/firezone/sv/phoenix/env/TELEMETRY_ID` + if [ -e /var/opt/firezone/cache/telemetry_id ]; then + telemetry_id=`cat /var/opt/firezone/cache/telemetry_id` if [ ! -z "$telemetry_id" ]; then curl -s -XPOST \ -H 'Content-Type: application/json' \ @@ -22,7 +22,7 @@ capture () { } if [ $1 -eq "1" ]; then - if [ ! -e /opt/firezone/.disable-telemetry ]; then + if [ ! -e /var/opt/firezone/.disable_telemetry ]; then capture || true fi diff --git a/omnibus/omnibus.rb b/omnibus/omnibus.rb index a2838aa4c..9fddf4b00 100644 --- a/omnibus/omnibus.rb +++ b/omnibus/omnibus.rb @@ -16,12 +16,8 @@ # ------------------------------------------------------------------- if ENV["CI"] base_dir("/opt/runner/omnibus-local") -elsif Dir.exist?("/vagrant") - # Running inside vagrant, use tmp dir - base_dir("/tmp/omnibus-local") else - # Running on build server, use fast SSD array dir - base_dir("/data/omnibus-local") + base_dir("/tmp/omnibus-local") end # # Alternatively you can tune the individual values diff --git a/omnibus/package-scripts/firezone/postinst b/omnibus/package-scripts/firezone/postinst index 6b446e3c0..3e69aa1e9 100755 --- a/omnibus/package-scripts/firezone/postinst +++ b/omnibus/package-scripts/firezone/postinst @@ -4,8 +4,8 @@ capture () { if type curl > /dev/null; then - if [ -e /opt/firezone/sv/phoenix/env/TELEMETRY_ID ]; then - telemetry_id=`cat /opt/firezone/sv/phoenix/env/TELEMETRY_ID` + if [ -e /var/opt/firezone/cache/telemetry_id ]; then + telemetry_id=`cat /var/opt/firezone/cache/telemetry_id` if [ ! -z "$telemetry_id" ]; then curl -s -XPOST \ -H 'Content-Type: application/json' \ @@ -21,7 +21,7 @@ capture () { fi fi } -if [ ! -e /opt/firezone/.disable-telemetry ]; then +if [ ! -e /var/opt/firezone/.disable_telemetry ]; then capture || true fi diff --git a/omnibus/package-scripts/firezone/postrm b/omnibus/package-scripts/firezone/postrm index 4433e4493..63b7894be 100755 --- a/omnibus/package-scripts/firezone/postrm +++ b/omnibus/package-scripts/firezone/postrm @@ -7,8 +7,8 @@ set -e capture () { if type curl > /dev/null; then - if [ -e /opt/firezone/sv/phoenix/env/TELEMETRY_ID ]; then - telemetry_id=`cat /opt/firezone/sv/phoenix/env/TELEMETRY_ID` + if [ -e /var/opt/firezone/cache/telemetry_id ]; then + telemetry_id=`cat /var/opt/firezone/cache/telemetry_id` if [ ! -z "$telemetry_id" ]; then curl -s -XPOST \ -H 'Content-Type: application/json' \ @@ -24,7 +24,7 @@ capture () { fi fi } -if [ ! -e /opt/firezone/.disable-telemetry ]; then +if [ ! -e /var/opt/firezone/.disable_telemetry ]; then capture || true fi diff --git a/omnibus/package-scripts/firezone/preinst b/omnibus/package-scripts/firezone/preinst index f389ec659..3aa5c6965 100755 --- a/omnibus/package-scripts/firezone/preinst +++ b/omnibus/package-scripts/firezone/preinst @@ -7,8 +7,8 @@ set -e capture () { if type curl > /dev/null; then - if [ -e /opt/firezone/sv/phoenix/env/TELEMETRY_ID ]; then - telemetry_id=`cat /opt/firezone/sv/phoenix/env/TELEMETRY_ID` + if [ -e /var/opt/firezone/cache/telemetry_id ]; then + telemetry_id=`cat /var/opt/firezone/cache/telemetry_id` if [ ! -z "$telemetry_id" ]; then curl -s -XPOST \ -H 'Content-Type: application/json' \ @@ -24,7 +24,7 @@ capture () { fi fi } -if [ ! -e /opt/firezone/.disable-telemetry ]; then +if [ ! -e /var/opt/firezone/.disable_telemetry ]; then capture || true fi diff --git a/omnibus/package-scripts/firezone/prerm b/omnibus/package-scripts/firezone/prerm index 48ace227d..6b6e902df 100755 --- a/omnibus/package-scripts/firezone/prerm +++ b/omnibus/package-scripts/firezone/prerm @@ -8,8 +8,8 @@ PROGNAME=`basename $0` capture () { if type curl > /dev/null; then - if [ -e /opt/firezone/sv/phoenix/env/TELEMETRY_ID ]; then - telemetry_id=`cat /opt/firezone/sv/phoenix/env/TELEMETRY_ID` + if [ -e /var/opt/firezone/cache/telemetry_id ]; then + telemetry_id=`cat /var/opt/firezone/cache/telemetry_id` if [ ! -z "$telemetry_id" ]; then curl -s -XPOST \ -H 'Content-Type: application/json' \ @@ -26,7 +26,7 @@ capture () { fi } -if [ ! -e /opt/firezone/.disable-telemetry ]; then +if [ ! -e /var/opt/firezone/.disable_telemetry ]; then capture || true fi diff --git a/scripts/version.exs b/scripts/version.exs index d40d906e7..5bda3701e 100644 --- a/scripts/version.exs +++ b/scripts/version.exs @@ -1,2 +1,7 @@ -{result, 0} = System.cmd(Path.join([__DIR__, "semver.sh"]), [], stderr_to_stdout: true) -result |> String.trim() +case System.cmd(Path.join([__DIR__, "semver.sh"]), [], stderr_to_stdout: true) do + {result, 0} -> + result |> String.trim() + + {_error, _exit_code} -> + "0.0.0+git.0.deadbeef" +end From b3e05b64912b08f1b0022b63ebe25c4f2b4e81b7 Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 13:54:06 -0800 Subject: [PATCH 08/17] Fix markdownlint issue --- docs/docs/deploy/supported-platforms.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/docs/deploy/supported-platforms.md b/docs/docs/deploy/supported-platforms.md index 82ba3232a..e20afdf59 100644 --- a/docs/docs/deploy/supported-platforms.md +++ b/docs/docs/deploy/supported-platforms.md @@ -43,7 +43,7 @@ Note that we only support RPM and DEB based packaging systems. Others, like Arch Linux are currently being investigated [ in this issue](https://github.com/firezone/firezone/issues/378). -### AmazonLinux 2 Notes +## AmazonLinux 2 Notes Kernel upgrade required: @@ -51,7 +51,7 @@ Kernel upgrade required: sudo amazon-linux-extras install -y kernel-5.10 ``` -### CentOS 7 Notes +## CentOS 7 Notes Kernel upgrade to 5.6+ required. To upgrade to the latest mainline kernel and select it as the default boot kernel: @@ -66,7 +66,7 @@ sudo grub2-mkconfig -o /boot/grub2/grub.cfg sudo reboot ``` -### CentOS 8 Notes +## CentOS 8 Notes The WireGuard kernel module needs to be installed: @@ -75,25 +75,25 @@ yum install elrepo-release epel-release yum install kmod-wireguard ``` -### RHEL 7 Notes +## RHEL 7 Notes Red Hat Enterprise Linux is binary compatible with CentOS, so the Firezone package for CentOS 7 should work just fine for RHEL 7. You'll still need to upgrade your kernel to 5.6+ however. To do so, follow the steps for [CentOS 7 Notes](#centos-7-notes) above. -### RHEL 8 Notes +## RHEL 8 Notes Red Hat Enterprise Linux is binary compatible with CentOS, so the Firezone package for CentOS 8 should work just fine for RHEL 8. You'll still need to install the WireGuard kernel module, however. See [CentOS 8 Notes ](#centos-8-notes) above. -### RHEL 9 Notes +## RHEL 9 Notes Use the package for CentOS 9. -### Ubuntu 18.04 Notes +## Ubuntu 18.04 Notes Kernel upgrade to 5.4+ required: @@ -101,13 +101,13 @@ Kernel upgrade to 5.4+ required: sudo apt install linux-image-generic-hwe-18.04 ``` -### Debian 10 Notes +## Debian 10 Notes Kernel upgrade to 5.6+ required. See [this guide ](https://jensd.be/968/linux/install-a-newer-kernel-in-debian-10-buster-stable) for an example. -### openSUSE Notes +## openSUSE Notes Firezone requires the `setcap` utility, but some recent openSUSE releases may not have it installed by default. To fix, ensure `libcap-progs` is installed: From 8ec2a7247a34ad35455fc17e5fce8cbeebc6f79c Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 13:55:58 -0800 Subject: [PATCH 09/17] telemetry_id test --- .ci/functional_test.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci/functional_test.sh b/.ci/functional_test.sh index 0abb09ac6..8a52192fa 100755 --- a/.ci/functional_test.sh +++ b/.ci/functional_test.sh @@ -43,9 +43,9 @@ echo $page | grep '' echo "Testing telemetry_id survives reconfigures" -tid1=`sudo grep 'telemetry_id' /etc/firezone/firezone-running.json` +tid1=`cat /var/opt/firezone/cache/telemetry_id` sudo firezone-ctl reconfigure -tid2=`sudo grep 'telemetry_id' /etc/firezone/firezone-running.json` +tid2=`cat /var/opt/firezone/cache/telemetry_id` if [ "$tid1" = "$tid2" ]; then echo "telemetry_ids match!" From 1260e8eae0637b69a5a2ce7ec47a08246b40d85e Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 14:08:38 -0800 Subject: [PATCH 10/17] Read from file in different spot --- omnibus/cookbooks/firezone/libraries/config.rb | 1 + omnibus/cookbooks/firezone/recipes/app.rb | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/omnibus/cookbooks/firezone/libraries/config.rb b/omnibus/cookbooks/firezone/libraries/config.rb index 6b8865390..eee1c52a3 100644 --- a/omnibus/cookbooks/firezone/libraries/config.rb +++ b/omnibus/cookbooks/firezone/libraries/config.rb @@ -225,6 +225,7 @@ class Firezone 'WIREGUARD_IPV6_ADDRESS' => attributes['wireguard']['ipv6']['address'], # Allow env var to override config 'TELEMETRY_ENABLED' => ENV.fetch('TELEMETRY_ENABLED', attributes['telemetry']['enabled'] == false ? "false" : "true"), + 'TELEMETRY_ID' => File.read("#{node["firezone"]["var_directory"]}/cache/telemetry_id"), 'CONNECTIVITY_CHECKS_ENABLED' => attributes['connectivity_checks']['enabled'].to_s, 'CONNECTIVITY_CHECKS_INTERVAL' => attributes['connectivity_checks']['interval'].to_s, diff --git a/omnibus/cookbooks/firezone/recipes/app.rb b/omnibus/cookbooks/firezone/recipes/app.rb index 764ed0b67..ae964bd8c 100644 --- a/omnibus/cookbooks/firezone/recipes/app.rb +++ b/omnibus/cookbooks/firezone/recipes/app.rb @@ -41,8 +41,7 @@ file 'environment-variables' do # updated when config is updated. attributes.merge!( 'force_ssl' => node['firezone']['nginx']['force_ssl'], - 'mix_env' => 'prod', - 'telemetry_id' => File.read("#{node["firezone"]["var_directory"]}/cache/telemetry_id") + 'mix_env' => 'prod' ) content Firezone::Config.environment_variables_from(attributes) From 94ef82e03c8ec48ba571cfc165f735970a1f77f9 Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 14:15:50 -0800 Subject: [PATCH 11/17] Please work this time --- omnibus/cookbooks/firezone/libraries/config.rb | 2 +- omnibus/cookbooks/firezone/recipes/config.rb | 5 +++++ omnibus/cookbooks/firezone/recipes/telemetry.rb | 13 ++----------- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/omnibus/cookbooks/firezone/libraries/config.rb b/omnibus/cookbooks/firezone/libraries/config.rb index eee1c52a3..3cee71578 100644 --- a/omnibus/cookbooks/firezone/libraries/config.rb +++ b/omnibus/cookbooks/firezone/libraries/config.rb @@ -225,7 +225,7 @@ class Firezone 'WIREGUARD_IPV6_ADDRESS' => attributes['wireguard']['ipv6']['address'], # Allow env var to override config 'TELEMETRY_ENABLED' => ENV.fetch('TELEMETRY_ENABLED', attributes['telemetry']['enabled'] == false ? "false" : "true"), - 'TELEMETRY_ID' => File.read("#{node["firezone"]["var_directory"]}/cache/telemetry_id"), + 'TELEMETRY_ID' => attributes["telemetry_id"], 'CONNECTIVITY_CHECKS_ENABLED' => attributes['connectivity_checks']['enabled'].to_s, 'CONNECTIVITY_CHECKS_INTERVAL' => attributes['connectivity_checks']['interval'].to_s, diff --git a/omnibus/cookbooks/firezone/recipes/config.rb b/omnibus/cookbooks/firezone/recipes/config.rb index f0a3a6005..581395007 100644 --- a/omnibus/cookbooks/firezone/recipes/config.rb +++ b/omnibus/cookbooks/firezone/recipes/config.rb @@ -39,6 +39,11 @@ Firezone::Config.load_or_create_secrets!( node ) +# Generate new telemetry_id if doesn't exist +unless /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node["firezone"]["telemetry_id"].to_s) + node.default['firezone']['telemetry_id'] = SecureRandom.uuid +end + node.default['firezone']['wireguard_public_key'] = `echo '#{node['firezone']['wireguard_private_key']}' | #{node['firezone']['install_directory']}/embedded/bin/wg pubkey`.chomp diff --git a/omnibus/cookbooks/firezone/recipes/telemetry.rb b/omnibus/cookbooks/firezone/recipes/telemetry.rb index f19f2a36d..0d5d0607c 100644 --- a/omnibus/cookbooks/firezone/recipes/telemetry.rb +++ b/omnibus/cookbooks/firezone/recipes/telemetry.rb @@ -28,18 +28,9 @@ else end file "telemetry-id" do - telemetry_id = - if /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node['firezone']['telemetry_id'].to_s) - # already generated - node["firezone"]["telemetry_id"] - else - SecureRandom.uuid - end - - path "#{node['firezone']['var_directory']}/cache/telemetry_id" + path "#{node["firezone"]["var_directory"]}/cache/telemetry_id" mode "0440" owner node["firezone"]["user"] group node["firezone"]["group"] - content telemetry_id - action :create_if_missing + content node["firezone"]["telemetry_id"] end From 09750a7ddafef631f5e769fd212c3b3f631cbf00 Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 14:18:45 -0800 Subject: [PATCH 12/17] Bump deps --- mix.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.lock b/mix.lock index a2c69ecab..bbabb795b 100644 --- a/mix.lock +++ b/mix.lock @@ -24,7 +24,7 @@ "excoveralls": {:hex, :excoveralls, "0.14.4", "295498f1ae47bdc6dce59af9a585c381e1aefc63298d48172efaaa90c3d251db", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "e3ab02f2df4c1c7a519728a6f0a747e71d7d6e846020aae338173619217931c1"}, "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, "floki": {:hex, :floki, "0.32.0", "f915dc15258bc997d49be1f5ef7d3992f8834d6f5695270acad17b41f5bcc8e2", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "1c5a91cae1fd8931c26a4826b5e2372c284813904c8bacb468b5de39c7ececbd"}, - "gettext": {:hex, :gettext, "0.19.0", "6909d61b38bb33339558f128f8af5913d5d5fe304a770217bf352b1620fb7ec4", [:mix], [], "hexpm", "3f7a274f52ebda9bb6655dfeda3d6b0dc4537ae51ce41dcccc7f73ca7379ad5e"}, + "gettext": {:hex, :gettext, "0.19.1", "564953fd21f29358e68b91634799d9d26989f8d039d7512622efb3c3b1c97892", [:mix], [], "hexpm", "10c656c0912b8299adba9b061c06947511e3f109ab0d18b44a866a4498e77222"}, "hackney": {:hex, :hackney, "1.18.0", "c4443d960bb9fba6d01161d01cd81173089686717d9490e5d3606644c48d121f", [:rebar3], [{:certifi, "~>2.8.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "9afcda620704d720db8c6a3123e9848d09c87586dc1c10479c42627b905b5c5e"}, "hammer": {:hex, :hammer, "6.0.0", "72ec6fff10e9d63856968988a22ee04c4d6d5248071ddccfbda50aa6c455c1d7", [:mix], [{:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}], "hexpm", "d8e1ec2e534c4aae508b906759e077c3c1eb3e2b9425235d4b7bbab0b016210a"}, "hammer_plug": {:hex, :hammer_plug, "2.1.1", "eb5390380eff6600e24e93edfe6a34d39f35280cbdd1caa0995b58bb8489f00d", [:make, :mix], [{:hammer, "~> 6.0", [hex: :hammer, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "0fbc3e8b1aacecb7affea65c85c349fdbd00ff28a74bbe6ca30c9f4c76d71e4b"}, From a38b97fde67007b62fbd05fb1466e6867f25b81b Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 14:22:06 -0800 Subject: [PATCH 13/17] Fix rubocop issues --- docs/Gemfile | 4 +- omnibus/Berksfile | 10 +- omnibus/Gemfile | 4 +- omnibus/config/projects/firezone.rb | 4 +- omnibus/config/software/autoconf.rb | 4 +- omnibus/config/software/cacerts.rb | 6 +- omnibus/config/software/erlang.rb | 6 +- omnibus/config/software/firezone-cookbooks.rb | 8 +- omnibus/config/software/firezone-ctl.rb | 4 +- omnibus/config/software/firezone-scripts.rb | 10 +- omnibus/config/software/firezone.rb | 22 +- omnibus/config/software/gmp.rb | 4 +- omnibus/config/software/icu.rb | 5 +- omnibus/config/software/libedit.rb | 5 +- omnibus/config/software/libffi.rb | 11 +- omnibus/config/software/libiconv.rb | 2 +- omnibus/config/software/liblzma.rb | 2 +- omnibus/config/software/libxml2.rb | 2 +- omnibus/config/software/libyaml.rb | 16 +- omnibus/config/software/ncurses.rb | 20 +- omnibus/config/software/openssl.rb | 11 +- omnibus/config/software/perl.rb | 34 +-- omnibus/config/software/pkg-config.rb | 8 +- omnibus/config/software/python.rb | 2 +- omnibus/config/software/ruby.rb | 144 ++++----- omnibus/config/software/rubygems.rb | 38 +-- omnibus/config/software/runit.rb | 23 +- omnibus/config/software/zlib.rb | 4 +- omnibus/cookbooks/firezone/Berksfile | 6 +- omnibus/cookbooks/firezone/Gemfile | 2 +- omnibus/cookbooks/firezone/Policyfile.rb | 6 +- .../cookbooks/firezone/attributes/default.rb | 284 +++++++++--------- .../default/ctl-commands/create_admin.rb | 12 +- .../files/default/ctl-commands/reconfigure.rb | 12 +- .../files/default/ctl-commands/teardown.rb | 5 +- .../files/default/ctl-commands/version.rb | 18 +- .../cookbooks/firezone/libraries/config.rb | 189 ++++++------ omnibus/cookbooks/firezone/metadata.rb | 20 +- omnibus/cookbooks/firezone/recipes/app.rb | 40 +-- omnibus/cookbooks/firezone/recipes/config.rb | 86 +++--- .../firezone/recipes/create_admin.rb | 16 +- .../cookbooks/firezone/recipes/database.rb | 18 +- omnibus/cookbooks/firezone/recipes/default.rb | 18 +- .../firezone/recipes/log_management.rb | 36 +-- omnibus/cookbooks/firezone/recipes/network.rb | 16 +- omnibus/cookbooks/firezone/recipes/nginx.rb | 68 ++--- omnibus/cookbooks/firezone/recipes/phoenix.rb | 58 ++-- .../cookbooks/firezone/recipes/postgresql.rb | 32 +- omnibus/cookbooks/firezone/recipes/setcap.rb | 22 +- .../cookbooks/firezone/recipes/show_config.rb | 2 +- omnibus/cookbooks/firezone/recipes/ssl.rb | 56 ++-- .../cookbooks/firezone/recipes/teardown.rb | 12 +- .../cookbooks/firezone/recipes/telemetry.rb | 16 +- .../cookbooks/firezone/recipes/wireguard.rb | 20 +- .../test/integration/default/default_test.rb | 2 +- omnibus/omnibus.rb | 7 +- 56 files changed, 737 insertions(+), 755 deletions(-) diff --git a/docs/Gemfile b/docs/Gemfile index ee7b036f2..0ebe67463 100644 --- a/docs/Gemfile +++ b/docs/Gemfile @@ -12,8 +12,8 @@ gem "just-the-docs", github: "firezone/just-the-docs" # gem "github-pages", group: :jekyll_plugins # If you have any plugins, put them here! group :jekyll_plugins do - gem "jekyll-feed", "~> 0.12" gem "github-pages" + gem "jekyll-feed", "~> 0.12" end # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem @@ -24,4 +24,4 @@ platforms :mingw, :x64_mingw, :mswin, :jruby do end # Performance-booster for watching directories on Windows -gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin] +gem "wdm", "~> 0.1.1", platforms: %i[mingw x64_mingw mswin] diff --git a/omnibus/Berksfile b/omnibus/Berksfile index acac58e70..bf3ceaf9c 100644 --- a/omnibus/Berksfile +++ b/omnibus/Berksfile @@ -1,12 +1,12 @@ -source 'https://supermarket.chef.io' +source "https://supermarket.chef.io" -cookbook 'omnibus' +cookbook "omnibus" # Uncomment to use the latest version of the Omnibus cookbook from GitHub # cookbook 'omnibus', github: 'chef-cookbooks/omnibus' group :integration do - cookbook 'apt', '~> 2.8' - cookbook 'freebsd', '~> 0.3' - cookbook 'yum-epel', '~> 0.6' + cookbook "apt", "~> 2.8" + cookbook "freebsd", "~> 0.3" + cookbook "yum-epel", "~> 0.6" end diff --git a/omnibus/Gemfile b/omnibus/Gemfile index b63d86905..844b00567 100644 --- a/omnibus/Gemfile +++ b/omnibus/Gemfile @@ -3,8 +3,8 @@ source "https://rubygems.org" # Install omnibus -gem "omnibus", "~> 8.2.2" gem "chef", "~> 16.17.18" +gem "omnibus", "~> 8.2.2" # Use Chef"s software definitions. It is recommended that you write your own # software definitions, but you can clone/fork Chef"s to get you started. @@ -21,6 +21,6 @@ group :development do gem "rubocop" # Use Test Kitchen with Vagrant for converging the build environment - gem "test-kitchen" gem "kitchen-vagrant" + gem "test-kitchen" end diff --git a/omnibus/config/projects/firezone.rb b/omnibus/config/projects/firezone.rb index 38196a149..5c55305ae 100644 --- a/omnibus/config/projects/firezone.rb +++ b/omnibus/config/projects/firezone.rb @@ -32,9 +32,7 @@ install_dir "#{default_root}/#{name}" if ENV["CI"] stage_path = "/opt/runner/omnibus-local/stage" # Prevent runner tmp dir from filling up - unless Dir.exist?(stage_path) - staging_dir = stage_path - end + staging_dir = stage_path unless Dir.exist?(stage_path) end build_version Omnibus::BuildVersion.semver diff --git a/omnibus/config/software/autoconf.rb b/omnibus/config/software/autoconf.rb index ac5d1b2fa..a472d8353 100644 --- a/omnibus/config/software/autoconf.rb +++ b/omnibus/config/software/autoconf.rb @@ -35,9 +35,7 @@ relative_path "autoconf-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) - if solaris2? - env["M4"] = "#{install_dir}/embedded/bin/m4" - end + env["M4"] = "#{install_dir}/embedded/bin/m4" if solaris2? command "./configure" \ " --prefix=#{install_dir}/embedded", env: env diff --git a/omnibus/config/software/cacerts.rb b/omnibus/config/software/cacerts.rb index 46ac706a9..c8acce05b 100644 --- a/omnibus/config/software/cacerts.rb +++ b/omnibus/config/software/cacerts.rb @@ -42,9 +42,9 @@ build do # Windows does not support symlinks unless windows? link "certs/cacert.pem", "#{install_dir}/embedded/ssl/cert.pem", - unchecked: true, - force: true + unchecked: true, + force: true - block { File.chmod(0644, "#{install_dir}/embedded/ssl/certs/cacert.pem") } + block { File.chmod(0o644, "#{install_dir}/embedded/ssl/certs/cacert.pem") } end end diff --git a/omnibus/config/software/erlang.rb b/omnibus/config/software/erlang.rb index ee200d824..25e641b6e 100644 --- a/omnibus/config/software/erlang.rb +++ b/omnibus/config/software/erlang.rb @@ -62,7 +62,7 @@ build do env = with_standard_compiler_flags(with_embedded_path).merge( # WARNING! - "CFLAGS" => "-L#{install_dir}/embedded/lib -I#{install_dir}/embedded/erlang/include", + "CFLAGS" => "-L#{install_dir}/embedded/lib -I#{install_dir}/embedded/erlang/include", "LDFLAGS" => "-Wl,-rpath #{install_dir}/embedded/lib -L#{install_dir}/embedded/lib -I#{install_dir}/embedded/erlang/include" ) env.delete("CPPFLAGS") @@ -93,7 +93,7 @@ build do # In future releases of erlang, someone should check if these flags (or # environment variables) are avaiable to remove this ugly hack. # Doesn't seem to be necessary for 24.0.5 - %w{ncurses openssl zlib.h zconf.h}.each do |name| + %w[ncurses openssl zlib.h zconf.h].each do |name| link "#{install_dir}/embedded/include/#{name}", "#{install_dir}/embedded/erlang/include/#{name}" end @@ -114,7 +114,7 @@ build do # Building from github source requires this step command "./otp_build autoconf" end - # Note: et, debugger and observer applications require wx to + # NOTE: et, debugger and observer applications require wx to # build. The tarballs from the downloads site has prebuilt the beam # files, so we were able to get away without disabling them and # still build. When building from raw source we must disable them diff --git a/omnibus/config/software/firezone-cookbooks.rb b/omnibus/config/software/firezone-cookbooks.rb index 21f91fde4..7920ef81d 100644 --- a/omnibus/config/software/firezone-cookbooks.rb +++ b/omnibus/config/software/firezone-cookbooks.rb @@ -27,10 +27,10 @@ build do block do all_the_gem_deps = {} - Dir.glob(cookbooks_path + '/**/metadata.json').each do |metadata| + Dir.glob(cookbooks_path + "/**/metadata.json").each do |metadata| cookbook_name = File.basename(File.dirname(metadata)) metadata_json = FFI_Yajl::Parser.parse(File.read(metadata)) - gem_deps = metadata_json.fetch('gems', []) + gem_deps = metadata_json.fetch("gems", []) all_the_gem_deps[cookbook_name] = gem_deps unless gem_deps.empty? end @@ -43,12 +43,12 @@ build do block do open("#{cookbooks_path}/dna.json", "w") do |file| - file.write FFI_Yajl::Encoder.encode(run_list: ['recipe[firezone::default]']) + file.write FFI_Yajl::Encoder.encode(run_list: ["recipe[firezone::default]"]) end open("#{cookbooks_path}/show-config.json", "w") do |file| file.write FFI_Yajl::Encoder.encode( - run_list: ['recipe[firezone::show_config]'] + run_list: ["recipe[firezone::show_config]"] ) end diff --git a/omnibus/config/software/firezone-ctl.rb b/omnibus/config/software/firezone-ctl.rb index 973f491b8..3fd060874 100644 --- a/omnibus/config/software/firezone-ctl.rb +++ b/omnibus/config/software/firezone-ctl.rb @@ -32,10 +32,10 @@ build do block do erb source: "firezone-ctl.erb", dest: "#{install_dir}/bin/firezone-ctl", - mode: 0755, + mode: 0o755, vars: { embedded_bin: "#{install_dir}/embedded/bin", - embedded_service: "#{install_dir}/embedded/service", + embedded_service: "#{install_dir}/embedded/service" } end diff --git a/omnibus/config/software/firezone-scripts.rb b/omnibus/config/software/firezone-scripts.rb index e7f8070c9..6a040efa9 100644 --- a/omnibus/config/software/firezone-scripts.rb +++ b/omnibus/config/software/firezone-scripts.rb @@ -16,15 +16,15 @@ # limitations under the License. # -name 'firezone-scripts' +name "firezone-scripts" -license 'Apache-2.0' -license_file File.expand_path('LICENSE', Omnibus::Config.project_root) +license "Apache-2.0" +license_file File.expand_path("LICENSE", Omnibus::Config.project_root) skip_transitive_dependency_licensing true -source path: File.expand_path('files/firezone-scripts', Omnibus::Config.project_root) +source path: File.expand_path("files/firezone-scripts", Omnibus::Config.project_root) build do - copy '*', "#{install_dir}/embedded/bin/" + copy "*", "#{install_dir}/embedded/bin/" end diff --git a/omnibus/config/software/firezone.rb b/omnibus/config/software/firezone.rb index e7c2da48d..0044716ef 100644 --- a/omnibus/config/software/firezone.rb +++ b/omnibus/config/software/firezone.rb @@ -27,17 +27,17 @@ dependency "ruby" version("1.0.0") do source path: File.expand_path("../", Omnibus::Config.project_root), - options: { exclude: [ - ".env", - ".git", - ".ci", - ".vagrant", - ".github", - "_build", - "deps", - "omnibus", - "apps/fz_http/assets/node_modules" - ] } + options: { exclude: [ + ".env", + ".git", + ".ci", + ".vagrant", + ".github", + "_build", + "deps", + "omnibus", + "apps/fz_http/assets/node_modules" + ] } end license :project_license diff --git a/omnibus/config/software/gmp.rb b/omnibus/config/software/gmp.rb index df3cbe90d..7bd5256fd 100644 --- a/omnibus/config/software/gmp.rb +++ b/omnibus/config/software/gmp.rb @@ -35,9 +35,7 @@ end build do env = with_standard_compiler_flags(with_embedded_path) - if solaris2? - env["ABI"] = "32" - end + env["ABI"] = "32" if solaris2? configure_command = ["./configure", "--prefix=#{install_dir}/embedded"] diff --git a/omnibus/config/software/icu.rb b/omnibus/config/software/icu.rb index c31bf5659..8711c2687 100644 --- a/omnibus/config/software/icu.rb +++ b/omnibus/config/software/icu.rb @@ -3,7 +3,10 @@ license_file "LICENSE" skip_transitive_dependency_licensing true default_version "69.1" -source url: "https://github.com/unicode-org/icu/releases/download/release-#{version.gsub(".", "-")}/icu4c-#{version.gsub(".", "_")}-src.tgz" +source url: "https://github.com/unicode-org/icu/releases/download/release-#{version.gsub(".", + "-")}/icu4c-#{version.gsub( + ".", "_" + )}-src.tgz" version("69.1") do source sha256: "4cba7b7acd1d3c42c44bb0c14be6637098c7faf2b330ce876bc5f3b915d09745" end diff --git a/omnibus/config/software/libedit.rb b/omnibus/config/software/libedit.rb index 5c13be5e7..7a754e234 100644 --- a/omnibus/config/software/libedit.rb +++ b/omnibus/config/software/libedit.rb @@ -1,4 +1,3 @@ - # Copyright 2012-2014 Chef Software, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -47,9 +46,7 @@ build do # The patch is from the FreeBSD ports tree and is for GCC compatibility. # http://svnweb.freebsd.org/ports/head/devel/libedit/files/patch-vi.c?annotate=300896 - if version.to_i < 20150325 && (freebsd? || openbsd?) - patch source: "freebsd-vi-fix.patch", env: env - end + patch source: "freebsd-vi-fix.patch", env: env if version.to_i < 20_150_325 && (freebsd? || openbsd?) if openbsd? patch source: "openbsd-weak-alias-fix.patch", plevel: 1, env: env diff --git a/omnibus/config/software/libffi.rb b/omnibus/config/software/libffi.rb index ad8dd422d..74055f575 100644 --- a/omnibus/config/software/libffi.rb +++ b/omnibus/config/software/libffi.rb @@ -37,12 +37,9 @@ build do # disable option checking as disable-docs is 3.3+ only configure_command = ["--disable-option-checking", - "--disable-docs", - ] + "--disable-docs"] - if version == "3.3" && mac_os_x? && arm? - patch source: "libffi-3.3-arm64.patch", plevel: 1, env: env - end + patch source: "libffi-3.3-arm64.patch", plevel: 1, env: env if version == "3.3" && mac_os_x? && arm? # AIX's old version of patch doesn't like the patch here unless aix? @@ -51,9 +48,7 @@ build do configure_command << "--disable-multi-os-directory" # add the --disable-multi-os-directory flag to 3.2.1 - if version == "3.2.1" - patch source: "libffi-3.2.1-disable-multi-os-directory.patch", plevel: 1, env: env - end + patch source: "libffi-3.2.1-disable-multi-os-directory.patch", plevel: 1, env: env if version == "3.2.1" end configure(*configure_command, env: env) diff --git a/omnibus/config/software/libiconv.rb b/omnibus/config/software/libiconv.rb index b245a8b9f..9cd425ca9 100644 --- a/omnibus/config/software/libiconv.rb +++ b/omnibus/config/software/libiconv.rb @@ -46,7 +46,7 @@ build do configure(env: env) pmake = "-j #{workers}" - make "#{pmake}", env: env + make pmake.to_s, env: env make "#{pmake} install-lib" \ " libdir=#{install_dir}/embedded/lib" \ " includedir=#{install_dir}/embedded/include", env: env diff --git a/omnibus/config/software/liblzma.rb b/omnibus/config/software/liblzma.rb index 3c0b1d518..b1188826a 100644 --- a/omnibus/config/software/liblzma.rb +++ b/omnibus/config/software/liblzma.rb @@ -48,7 +48,7 @@ build do "--disable-lzmainfo", "--disable-lzmadec", "--disable-xzdec", - "--disable-xz", + "--disable-xz" ] config_command << "--disable-nls" if windows? diff --git a/omnibus/config/software/libxml2.rb b/omnibus/config/software/libxml2.rb index 5065b651c..1c632e9e6 100644 --- a/omnibus/config/software/libxml2.rb +++ b/omnibus/config/software/libxml2.rb @@ -49,7 +49,7 @@ build do "--without-run-debug", "--without-legacy", # we don't need legacy interfaces "--without-catalog", - "--without-docbook", + "--without-docbook" ] update_config_guess diff --git a/omnibus/config/software/libyaml.rb b/omnibus/config/software/libyaml.rb index b3c0b3573..81b4a44e4 100644 --- a/omnibus/config/software/libyaml.rb +++ b/omnibus/config/software/libyaml.rb @@ -14,15 +14,15 @@ # limitations under the License. # -name 'libyaml' -default_version '0.1.7' +name "libyaml" +default_version "0.1.7" -license 'MIT' -license_file 'LICENSE' +license "MIT" +license_file "LICENSE" skip_transitive_dependency_licensing true -dependency 'config_guess' +dependency "config_guess" version("0.1.7") { source sha256: "8088e457264a98ba451a90b8661fcb4f9d6f478f7265d48322a196cec2480729" } @@ -33,13 +33,13 @@ relative_path "yaml-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) - update_config_guess(target: 'config') + update_config_guess(target: "config") - configure '--enable-shared', env: env + configure "--enable-shared", env: env # Windows had worse automake/libtool version issues. # Just patch the output instead. - patch source: 'v0.1.6.windows-configure.patch', plevel: 1, env: env if version >= '0.1.6' && windows? + patch source: "v0.1.6.windows-configure.patch", plevel: 1, env: env if version >= "0.1.6" && windows? make "-j #{workers}", env: env make "-j #{workers} install", env: env diff --git a/omnibus/config/software/ncurses.rb b/omnibus/config/software/ncurses.rb index 4a1f049f9..a009e5142 100644 --- a/omnibus/config/software/ncurses.rb +++ b/omnibus/config/software/ncurses.rb @@ -79,16 +79,14 @@ build do update_config_guess # AIX's old version of patch doesn't like the patches here - unless aix? - if version == "5.9" - # Patch to add support for GCC 5, doesn't break previous versions - patch source: "ncurses-5.9-gcc-5.patch", plevel: 1, env: env - end + if !aix? && (version == "5.9") + # Patch to add support for GCC 5, doesn't break previous versions + patch source: "ncurses-5.9-gcc-5.patch", plevel: 1, env: env end if mac_os_x? || - # Clang became the default compiler in FreeBSD 10+ - (freebsd? && ohai["os_version"].to_i >= 1000024) + # Clang became the default compiler in FreeBSD 10+ + (freebsd? && ohai["os_version"].to_i >= 1_000_024) # References: # https://github.com/Homebrew/homebrew-dupes/issues/43 # http://invisible-island.net/ncurses/NEWS.html#t20110409 @@ -99,9 +97,7 @@ build do patch source: "ncurses-clang.patch", env: env end - if openbsd? - patch source: "patch-ncurses_tinfo_lib__baudrate.c", plevel: 0, env: env - end + patch source: "patch-ncurses_tinfo_lib__baudrate.c", plevel: 0, env: env if openbsd? configure_command = [ "./configure", @@ -158,7 +154,5 @@ build do make "-j #{workers} install", env: env # Ensure embedded ncurses wins in the LD search path - if smartos? - link "#{install_dir}/embedded/lib/libcurses.so", "#{install_dir}/embedded/lib/libcurses.so.1" - end + link "#{install_dir}/embedded/lib/libcurses.so", "#{install_dir}/embedded/lib/libcurses.so.1" if smartos? end diff --git a/omnibus/config/software/openssl.rb b/omnibus/config/software/openssl.rb index 48829bbea..12d55e43d 100644 --- a/omnibus/config/software/openssl.rb +++ b/omnibus/config/software/openssl.rb @@ -51,7 +51,6 @@ version("1.0.2x") { source sha256: "79cb4e20004a0d1301210aee7e154ddfba3d6a33d0df version("1.0.2w") { source sha256: "a675ad1a9df59015cebcdf713de76a422347c5d99f11232fe75758143defd680" } version("1.0.2i") { source sha256: "9287487d11c9545b6efb287cdb70535d4e9b284dd10d51441d9b9963d000de6f" } - relative_path "openssl-#{version}" build do @@ -84,7 +83,7 @@ build do "no-ssl2", "no-ssl3", "no-zlib", - "shared", + "shared" ] configure_args += ["--with-fipsdir=#{install_dir}/embedded", "fips"] if fips_mode? @@ -139,9 +138,7 @@ build do patch source: "openssl-1.1.0f-do-not-install-docs.patch", env: patch_env end - if version.start_with?("1.0.2") && mac_os_x? && arm? - patch source: "openssl-1.0.2x-darwin-arm64.patch" - end + patch source: "openssl-1.0.2x-darwin-arm64.patch" if version.start_with?("1.0.2") && mac_os_x? && arm? if version.start_with?("1.0.2") && windows? # Patch Makefile.org to update the compiler flags/options table for mingw. @@ -156,9 +153,7 @@ build do command configure_command, env: env, in_msys_bash: true - if version.start_with?("1.0.2") && windows? - patch source: "openssl-1.0.1j-windows-relocate-dll.patch", env: env - end + patch source: "openssl-1.0.1j-windows-relocate-dll.patch", env: env if version.start_with?("1.0.2") && windows? make "depend", env: env # make -j N on openssl is not reliable diff --git a/omnibus/config/software/perl.rb b/omnibus/config/software/perl.rb index 2cb55bec7..4eb1611c9 100644 --- a/omnibus/config/software/perl.rb +++ b/omnibus/config/software/perl.rb @@ -41,25 +41,25 @@ build do patch source: "perl-#{version}-remove_lnsl.patch", plevel: 1, env: env - if solaris2? - cc_command = "-Dcc='gcc -m64 -static-libgcc'" - elsif aix? - cc_command = "-Dcc='/opt/IBM/xlc/13.1.0/bin/cc_r -q64'" - elsif freebsd? && ohai["os_version"].to_i >= 1000024 - cc_command = "-Dcc='clang'" - elsif mac_os_x? - cc_command = "-Dcc='clang'" - else - cc_command = "-Dcc='gcc -static-libgcc'" - end + cc_command = if solaris2? + "-Dcc='gcc -m64 -static-libgcc'" + elsif aix? + "-Dcc='/opt/IBM/xlc/13.1.0/bin/cc_r -q64'" + elsif freebsd? && ohai["os_version"].to_i >= 1_000_024 + "-Dcc='clang'" + elsif mac_os_x? + "-Dcc='clang'" + else + "-Dcc='gcc -static-libgcc'" + end configure_command = ["sh Configure", - " -de", - " -Dprefix=#{install_dir}/embedded", - " -Duseshrplib", - " -Dusethreads", - " #{cc_command}", - " -Dnoextensions='DB_File GDBM_File NDBM_File ODBM_File'"] + " -de", + " -Dprefix=#{install_dir}/embedded", + " -Duseshrplib", + " -Dusethreads", + " #{cc_command}", + " -Dnoextensions='DB_File GDBM_File NDBM_File ODBM_File'"] if aix? configure_command << "-Dmake=gmake" diff --git a/omnibus/config/software/pkg-config.rb b/omnibus/config/software/pkg-config.rb index 9cb179803..cb19dbf72 100644 --- a/omnibus/config/software/pkg-config.rb +++ b/omnibus/config/software/pkg-config.rb @@ -36,9 +36,7 @@ build do # pkg-config (at least up to 0.28) includes an older version of # libcharset/lib/config.charset that doesn't know about openbsd - if openbsd? - patch source: "openbsd-charset.patch", plevel: 1, env: env - end + patch source: "openbsd-charset.patch", plevel: 1, env: env if openbsd? command "./configure" \ " --prefix=#{install_dir}/embedded" \ @@ -60,7 +58,5 @@ build do # ensure charset.alias gets installed on openbsd else pkg-config will # exit with byte conversion errors. - if openbsd? - copy "#{project_dir}/glib/glib/libcharset/charset.alias", "#{install_dir}/embedded/lib/charset.alias" - end + copy "#{project_dir}/glib/glib/libcharset/charset.alias", "#{install_dir}/embedded/lib/charset.alias" if openbsd? end diff --git a/omnibus/config/software/python.rb b/omnibus/config/software/python.rb index 461c5c483..ef8ea25a8 100644 --- a/omnibus/config/software/python.rb +++ b/omnibus/config/software/python.rb @@ -40,7 +40,7 @@ relative_path "Python-#{version}" build do # Disables nis and dbm -- both cause build issues - patch source: 'disable_modules.patch', target: 'Modules/Setup' + patch source: "disable_modules.patch", target: "Modules/Setup" env = with_standard_compiler_flags(with_embedded_path) update_config_guess diff --git a/omnibus/config/software/ruby.rb b/omnibus/config/software/ruby.rb index 2fbc4ab48..61ce0b5bb 100644 --- a/omnibus/config/software/ruby.rb +++ b/omnibus/config/software/ruby.rb @@ -14,11 +14,11 @@ # limitations under the License. # -name 'ruby' -license 'BSD-2-Clause' -license_file 'BSDL' -license_file 'COPYING' -license_file 'LEGAL' +name "ruby" +license "BSD-2-Clause" +license_file "BSDL" +license_file "COPYING" +license_file "LEGAL" skip_transitive_dependency_licensing true @@ -28,26 +28,26 @@ skip_transitive_dependency_licensing true # - verify that all ffi libs are available for your version on all platforms. # - when upgrading please check the ABI version and update the exclusion until # https://gitlab.com/gitlab-org/omnibus-gitlab/issues/3414 is addressed -default_version '2.7.5' +default_version "2.7.5" fips_enabled = (project.overrides[:fips] && project.overrides[:fips][:enabled]) || false -dependency 'patch' if (solaris? && platform_version.satisfies?("10")) -dependency 'ncurses' unless windows? || version.satisfies?('>= 2.1') -dependency 'zlib' -dependency 'openssl' -dependency 'libffi' -dependency 'libyaml' +dependency "patch" if solaris? && platform_version.satisfies?("10") +dependency "ncurses" unless windows? || version.satisfies?(">= 2.1") +dependency "zlib" +dependency "openssl" +dependency "libffi" +dependency "libyaml" # Needed for chef_gem installs of (e.g.) nokogiri on upgrades - # they expect to see our libiconv instead of a system version. # Ignore on windows - TDM GCC comes with libiconv in the runtime # and that's the only one we will ever use. -dependency 'libiconv' +dependency "libiconv" -version('2.7.5') { source sha256: '2755b900a21235b443bb16dadd9032f784d4a88f143d852bc5d154f22b8781f1' } -version('2.7.4') { source sha256: '3043099089608859fc8cce7f9fdccaa1f53a462457e3838ec3b25a7d609fbc5b' } -version('2.7.3') { source sha256: '8925a95e31d8f2c81749025a52a544ea1d05dad18794e6828709268b92e55338' } -version('2.7.2') { source sha256: '6e5706d0d4ee4e1e2f883db9d768586b4d06567debea353c796ec45e8321c3d4' } +version("2.7.5") { source sha256: "2755b900a21235b443bb16dadd9032f784d4a88f143d852bc5d154f22b8781f1" } +version("2.7.4") { source sha256: "3043099089608859fc8cce7f9fdccaa1f53a462457e3838ec3b25a7d609fbc5b" } +version("2.7.3") { source sha256: "8925a95e31d8f2c81749025a52a544ea1d05dad18794e6828709268b92e55338" } +version("2.7.2") { source sha256: "6e5706d0d4ee4e1e2f883db9d768586b4d06567debea353c796ec45e8321c3d4" } source url: "https://cache.ruby-lang.org/pub/ruby/#{version.match(/^(\d+\.\d+)/)[0]}/ruby-#{version}.tar.gz" @@ -62,8 +62,8 @@ if mac_os_x? # would be harmless, except that autoconf treats any output to stderr as # a failure when it makes a test program to check your CFLAGS (regardless # of the actual exit code from the compiler). - env['CFLAGS'] << " -I#{install_dir}/embedded/include/ncurses -arch x86_64 -m64 -O3 -g -pipe -Qunused-arguments" - env['LDFLAGS'] << ' -arch x86_64' + env["CFLAGS"] << " -I#{install_dir}/embedded/include/ncurses -arch x86_64 -m64 -O3 -g -pipe -Qunused-arguments" + env["LDFLAGS"] << " -arch x86_64" elsif freebsd? # Stops "libtinfo.so.5.9: could not read symbols: Bad value" error when # compiling ext/readline. See the following for more info: @@ -71,50 +71,50 @@ elsif freebsd? # https://lists.freebsd.org/pipermail/freebsd-current/2013-October/045425.html # http://mailing.freebsd.ports-bugs.narkive.com/kCgK8sNQ/ports-183106-patch-sysutils-libcdio-does-not-build-on-10-0-and-head # - env['LDFLAGS'] << ' -ltinfow' + env["LDFLAGS"] << " -ltinfow" elsif aix? # this magic per IBM - env['LDSHARED'] = 'xlc -G' - env['CFLAGS'] = "-I#{install_dir}/embedded/include/ncurses -I#{install_dir}/embedded/include" + env["LDSHARED"] = "xlc -G" + env["CFLAGS"] = "-I#{install_dir}/embedded/include/ncurses -I#{install_dir}/embedded/include" # this magic per IBM - env['XCFLAGS'] = '-DRUBY_EXPORT' + env["XCFLAGS"] = "-DRUBY_EXPORT" # need CPPFLAGS set so ruby doesn't try to be too clever - env['CPPFLAGS'] = "-I#{install_dir}/embedded/include/ncurses -I#{install_dir}/embedded/include" - env['SOLIBS'] = '-lm -lc' + env["CPPFLAGS"] = "-I#{install_dir}/embedded/include/ncurses -I#{install_dir}/embedded/include" + env["SOLIBS"] = "-lm -lc" # need to use GNU m4, default m4 doesn't work - env['M4'] = '/opt/freeware/bin/m4' + env["M4"] = "/opt/freeware/bin/m4" elsif solaris? && platform_version.satisfies?("10") if sparc? # Known issue with rubby where too much GCC optimization blows up miniruby on sparc - env['CFLAGS'] << ' -std=c99 -O0 -g -pipe -mcpu=v9' - env['LDFLAGS'] << ' -mcpu=v9' + env["CFLAGS"] << " -std=c99 -O0 -g -pipe -mcpu=v9" + env["LDFLAGS"] << " -mcpu=v9" else - env['CFLAGS'] << ' -std=c99 -O3 -g -pipe' + env["CFLAGS"] << " -std=c99 -O3 -g -pipe" end elsif windows? - env['CPPFLAGS'] << ' -DFD_SETSIZE=2048' + env["CPPFLAGS"] << " -DFD_SETSIZE=2048" else # including linux - env['CFLAGS'] << if version.satisfies?('>= 2.3.0') && - rhel? && platform_version.satisfies?('< 6.0') - ' -O2 -g -pipe' + env["CFLAGS"] << if version.satisfies?(">= 2.3.0") && + rhel? && platform_version.satisfies?("< 6.0") + " -O2 -g -pipe" else - ' -O3 -g -pipe' + " -O3 -g -pipe" end end build do - env['CFLAGS'] << ' -fno-omit-frame-pointer' + env["CFLAGS"] << " -fno-omit-frame-pointer" # AIX needs /opt/freeware/bin only for patch patch_env = env.dup - patch_env['PATH'] = "/opt/freeware/bin:#{env['PATH']}" if aix? + patch_env["PATH"] = "/opt/freeware/bin:#{env["PATH"]}" if aix? - if solaris? && platform_version.satisfies?("10") && version.satisfies?('>= 2.1') - patch source: 'ruby-no-stack-protector.patch', plevel: 1, env: patch_env + if solaris? && platform_version.satisfies?("10") && version.satisfies?(">= 2.1") + patch source: "ruby-no-stack-protector.patch", plevel: 1, env: patch_env elsif solaris? && platform_version.satisfies?("10") && version =~ /^1.9/ - patch source: 'ruby-sparc-1.9.3-c99.patch', plevel: 1, env: patch_env + patch source: "ruby-sparc-1.9.3-c99.patch", plevel: 1, env: patch_env elsif solaris? && platform_version.satisfies?("11") && version =~ /^2.1/ - patch source: 'ruby-solaris-linux-socket-compat.patch', plevel: 1, env: patch_env + patch source: "ruby-solaris-linux-socket-compat.patch", plevel: 1, env: patch_env end # wrlinux7/ios_xr build boxes from Cisco include libssp and there is no way to @@ -132,79 +132,79 @@ build do # and ruby trying to set LD_LIBRARY_PATH itself gets it wrong. # # Also, fix paths emitted in the makefile on windows on both msys and msys2. - if version.satisfies?('>= 2.1') - patch source: 'ruby-mkmf.patch', plevel: 1, env: patch_env + if version.satisfies?(">= 2.1") + patch source: "ruby-mkmf.patch", plevel: 1, env: patch_env # should intentionally break and fail to apply on 2.2, patch will need to # be fixed. end # Enable custom patch created by ayufan that allows to count memory allocations # per-thread. This is asked to be upstreamed as part of https://github.com/ruby/ruby/pull/3978 - patch source: 'thread-memory-allocations-2.7.patch', plevel: 1, env: patch_env + patch source: "thread-memory-allocations-2.7.patch", plevel: 1, env: patch_env # Fix reserve stack segmentation fault when building on RHEL5 or below # Currently only affects 2.1.7 and 2.2.3. This patch taken from the fix # in Ruby trunk and expected to be included in future point releases. # https://redmine.ruby-lang.org/issues/11602 if rhel? && - platform_version.satisfies?('< 6') && - (version == '2.1.7' || version == '2.2.3') + platform_version.satisfies?("< 6") && + (version == "2.1.7" || version == "2.2.3") - patch source: 'ruby-fix-reserve-stack-segfault.patch', plevel: 1, env: patch_env + patch source: "ruby-fix-reserve-stack-segfault.patch", plevel: 1, env: patch_env end # copy_file_range() has been disabled on recent RedHat kernels: # 1. https://gitlab.com/gitlab-org/gitlab/-/issues/218999 # 2. https://bugs.ruby-lang.org/issues/16965 # 3. https://bugzilla.redhat.com/show_bug.cgi?id=1783554 - patch source: 'ruby-disable-copy-file-range.patch', plevel: 1, env: patch_env if centos? || rhel? + patch source: "ruby-disable-copy-file-range.patch", plevel: 1, env: patch_env if centos? || rhel? - configure_command = ['--with-out-ext=dbm,readline', - '--enable-shared', - '--disable-install-doc', - '--without-gmp', - '--without-gdbm', - '--without-tk', - '--disable-dtrace'] - configure_command << '--with-ext=psych' if version.satisfies?('< 2.3') - configure_command << '--with-bundled-md5' if fips_enabled + configure_command = ["--with-out-ext=dbm,readline", + "--enable-shared", + "--disable-install-doc", + "--without-gmp", + "--without-gdbm", + "--without-tk", + "--disable-dtrace"] + configure_command << "--with-ext=psych" if version.satisfies?("< 2.3") + configure_command << "--with-bundled-md5" if fips_enabled if aix? # need to patch ruby's configure file so it knows how to find shared libraries - patch source: 'ruby-aix-configure.patch', plevel: 1, env: patch_env + patch source: "ruby-aix-configure.patch", plevel: 1, env: patch_env # have ruby use zlib on AIX correctly - patch source: 'ruby_aix_openssl.patch', plevel: 1, env: patch_env + patch source: "ruby_aix_openssl.patch", plevel: 1, env: patch_env # AIX has issues with ssl retries, need to patch to have it retry - patch source: 'ruby_aix_2_1_3_ssl_EAGAIN.patch', plevel: 1, env: patch_env + patch source: "ruby_aix_2_1_3_ssl_EAGAIN.patch", plevel: 1, env: patch_env # the next two patches are because xlc doesn't deal with long vs int types well - patch source: 'ruby-aix-atomic.patch', plevel: 1, env: patch_env - patch source: 'ruby-aix-vm-core.patch', plevel: 1, env: patch_env + patch source: "ruby-aix-atomic.patch", plevel: 1, env: patch_env + patch source: "ruby-aix-vm-core.patch", plevel: 1, env: patch_env # per IBM, just help ruby along on what it's running on - configure_command << '--host=powerpc-ibm-aix6.1.0.0 --target=powerpc-ibm-aix6.1.0.0 --build=powerpc-ibm-aix6.1.0.0 --enable-pthread' + configure_command << "--host=powerpc-ibm-aix6.1.0.0 --target=powerpc-ibm-aix6.1.0.0 --build=powerpc-ibm-aix6.1.0.0 --enable-pthread" elsif freebsd? # Disable optional support C level backtrace support. This requires the # optional devel/libexecinfo port to be installed. - configure_command << 'ac_cv_header_execinfo_h=no' + configure_command << "ac_cv_header_execinfo_h=no" configure_command << "--with-opt-dir=#{install_dir}/embedded" elsif smartos? # Opscode patch - someara@opscode.com # GCC 4.7.0 chokes on mismatched function types between OpenSSL 1.0.1c and Ruby 1.9.3-p286 - patch source: 'ruby-openssl-1.0.1c.patch', plevel: 1, env: patch_env + patch source: "ruby-openssl-1.0.1c.patch", plevel: 1, env: patch_env # Patches taken from RVM. # http://bugs.ruby-lang.org/issues/5384 # https://www.illumos.org/issues/1587 # https://github.com/wayneeseguin/rvm/issues/719 - patch source: 'rvm-cflags.patch', plevel: 1, env: patch_env + patch source: "rvm-cflags.patch", plevel: 1, env: patch_env # From RVM forum # https://github.com/wayneeseguin/rvm/commit/86766534fcc26f4582f23842a4d3789707ce6b96 - configure_command << 'ac_cv_func_dl_iterate_phdr=no' + configure_command << "ac_cv_func_dl_iterate_phdr=no" configure_command << "--with-opt-dir=#{install_dir}/embedded" elsif windows? - configure_command << ' debugflags=-g' + configure_command << " debugflags=-g" else # TODO: Consider pulling in Gitlab's OhaiHelper if raspberry_pi is needed # configure_command << %w(host target build).map { |w| "--#{w}=#{OhaiHelper.gcc_target}" } if OhaiHelper.raspberry_pi? @@ -214,7 +214,7 @@ build do # FFS: works around a bug that infects AIX when it picks up our pkg-config # AFAIK, ruby does not need or use this pkg-config it just causes the build to fail. # The alternative would be to patch configure to remove all the pkg-config garbage entirely - env['PKG_CONFIG'] = '/bin/true' if aix? + env["PKG_CONFIG"] = "/bin/true" if aix? configure(*configure_command, env: env) make "-j #{workers}", env: env @@ -223,14 +223,14 @@ build do if windows? # Needed now that we switched to msys2 and have not figured out how to tell # it how to statically link yet - dlls = ['libwinpthread-1'] + dlls = ["libwinpthread-1"] dlls << if windows_arch_i386? - 'libgcc_s_dw2-1' + "libgcc_s_dw2-1" else - 'libgcc_s_seh-1' + "libgcc_s_seh-1" end dlls.each do |dll| - arch_suffix = windows_arch_i386? ? '32' : '64' + arch_suffix = windows_arch_i386? ? "32" : "64" windows_path = "C:/msys2/mingw#{arch_suffix}/bin/#{dll}.dll" raise "Cannot find required DLL needed for dynamic linking: #{windows_path}" unless File.exist?(windows_path) diff --git a/omnibus/config/software/rubygems.rb b/omnibus/config/software/rubygems.rb index 9553d376d..89abbab58 100644 --- a/omnibus/config/software/rubygems.rb +++ b/omnibus/config/software/rubygems.rb @@ -14,15 +14,15 @@ # limitations under the License. # -name 'rubygems' -default_version '3.1.4' +name "rubygems" +default_version "3.1.4" -license 'MIT' -license_file 'LICENSE.txt' +license "MIT" +license_file "LICENSE.txt" skip_transitive_dependency_licensing true -dependency 'ruby' +dependency "ruby" if version && !source # NOTE: 2.1.11 is the last version of rubygems before the 2.2.x change to native gem install location @@ -33,14 +33,14 @@ if version && !source # We have switched from tarballs to just `gem update --system`, but for backcompat # we pin the previously known tarballs. known_tarballs = { - '2.1.11' => 'b561b7aaa70d387e230688066e46e448', - '2.2.1' => '1f0017af0ad3d3ed52665132f80e7443', - '2.4.1' => '7e39c31806bbf9268296d03bd97ce718', - '2.4.4' => '440a89ad6a3b1b7a69b034233cc4658e', - '2.4.5' => '5918319a439c33ac75fbbad7fd60749d', - '2.4.8' => 'dc77b51449dffe5b31776bff826bf559', - '2.7.9' => '173272ed55405caf7f858b6981fff526', - '3.1.4' => 'd117187a8f016cbe8f52011ae02e858b' + "2.1.11" => "b561b7aaa70d387e230688066e46e448", + "2.2.1" => "1f0017af0ad3d3ed52665132f80e7443", + "2.4.1" => "7e39c31806bbf9268296d03bd97ce718", + "2.4.4" => "440a89ad6a3b1b7a69b034233cc4658e", + "2.4.5" => "5918319a439c33ac75fbbad7fd60749d", + "2.4.8" => "dc77b51449dffe5b31776bff826bf559", + "2.7.9" => "173272ed55405caf7f858b6981fff526", + "3.1.4" => "d117187a8f016cbe8f52011ae02e858b" } known_tarballs.each do |version, md5| version version do @@ -49,12 +49,12 @@ if version && !source end end - version('v2.4.4_plus_debug') { source git: 'https://github.com/danielsdeleo/rubygems.git' } - version('2.4.4.debug.1') { source git: 'https://github.com/danielsdeleo/rubygems.git' } + version("v2.4.4_plus_debug") { source git: "https://github.com/danielsdeleo/rubygems.git" } + version("2.4.4.debug.1") { source git: "https://github.com/danielsdeleo/rubygems.git" } # This is the 2.4.8 release with a fix for # windows so things like `gem install "pry"` still # work - version('jdm/2.4.8-patched') { source git: 'https://github.com/jaym/rubygems.git' } + version("jdm/2.4.8-patched") { source git: "https://github.com/jaym/rubygems.git" } end # If we still don't have a source (if it's a tarball) grab from ruby ... @@ -64,19 +64,19 @@ if version && !source begin Gem::Version.new(version) rescue ArgumentError - source git: 'https://github.com/rubygems/rubygems.git' + source git: "https://github.com/rubygems/rubygems.git" end end # git repo is always expanded to "rubygems" -relative_path 'rubygems' if source && source.include?(:git) +relative_path "rubygems" if source && source.include?(:git) build do env = with_standard_compiler_flags(with_embedded_path) if source # Building from source: - ruby 'setup.rb --no-document', env: env + ruby "setup.rb --no-document", env: env else # Installing direct from rubygems: # If there is no version, this will get latest. diff --git a/omnibus/config/software/runit.rb b/omnibus/config/software/runit.rb index 62f0fde19..e9123d623 100644 --- a/omnibus/config/software/runit.rb +++ b/omnibus/config/software/runit.rb @@ -15,16 +15,16 @@ # limitations under the License. # -name 'runit' -default_version '2.1.2' +name "runit" +default_version "2.1.2" -license 'BSD-3-Clause' -license_file '../package/COPYING' +license "BSD-3-Clause" +license_file "../package/COPYING" skip_transitive_dependency_licensing true -version '2.1.2' do - source md5: '6c985fbfe3a34608eb3c53dc719172c4' +version "2.1.2" do + source md5: "6c985fbfe3a34608eb3c53dc719172c4" end source url: "http://smarden.org/runit/runit-#{version}.tar.gz" @@ -35,15 +35,16 @@ build do # Patch runit to not consider status of log service associated with a service # on determining output of status command. For details, check # https://gitlab.com/gitlab-org/omnibus-gitlab/issues/4008 - patch source: 'log-status.patch' + patch source: "log-status.patch" env = with_standard_compiler_flags(with_embedded_path) # Put runit where we want it, not where they tell us to - command 'sed -i -e "s/^char\ \*varservice\ \=\"\/service\/\";$/char\ \*varservice\ \=\"' + install_dir.gsub('/', '\\/') + '\/service\/\";/" sv.c', env: env + command 'sed -i -e "s/^char\ \*varservice\ \=\"\/service\/\";$/char\ \*varservice\ \=\"' + install_dir.gsub("/", '\\/') + '\/service\/\";/" sv.c', + env: env # TODO: the following is not idempotent - command 'sed -i -e s:-static:: Makefile', env: env + command "sed -i -e s:-static:: Makefile", env: env # Build it make "-j #{workers}", env: env @@ -61,9 +62,9 @@ build do copy "#{project_dir}/svlogd", "#{install_dir}/embedded/bin" copy "#{project_dir}/utmpset", "#{install_dir}/embedded/bin" - erb source: 'runsvdir-start.erb', + erb source: "runsvdir-start.erb", dest: "#{install_dir}/embedded/bin/runsvdir-start", - mode: 0755, + mode: 0o755, vars: { install_dir: install_dir } # Setup service directories diff --git a/omnibus/config/software/zlib.rb b/omnibus/config/software/zlib.rb index 75db045d7..b5bd33dc4 100644 --- a/omnibus/config/software/zlib.rb +++ b/omnibus/config/software/zlib.rb @@ -1,5 +1,5 @@ # -#Copyright 2012-2018 Chef Software, Inc. +# Copyright 2012-2018 Chef Software, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -50,7 +50,7 @@ build do "SHARED_MODE=1", "CFLAGS=\"#{env["CFLAGS"]} -Wall\"", "ASFLAGS=\"#{env["CFLAGS"]} -Wall\"", - "LDFLAGS=\"#{env["LDFLAGS"]}\"", + "LDFLAGS=\"#{env["LDFLAGS"]}\"" # The win32 makefile for zlib does not handle parallel make correctly. # In particular, see its rule for IMPLIB and SHAREDLIB. The ld step in # SHAREDLIB will generate both the dll and the dll.a files. The step to diff --git a/omnibus/cookbooks/firezone/Berksfile b/omnibus/cookbooks/firezone/Berksfile index 8e377fcf2..a9427b379 100644 --- a/omnibus/cookbooks/firezone/Berksfile +++ b/omnibus/cookbooks/firezone/Berksfile @@ -1,6 +1,6 @@ -source 'https://supermarket.chef.io' +source "https://supermarket.chef.io" metadata -cookbook 'enterprise' -cookbook 'fipsify' +cookbook "enterprise" +cookbook "fipsify" diff --git a/omnibus/cookbooks/firezone/Gemfile b/omnibus/cookbooks/firezone/Gemfile index 1189627ae..ede77b4d7 100644 --- a/omnibus/cookbooks/firezone/Gemfile +++ b/omnibus/cookbooks/firezone/Gemfile @@ -1,5 +1,5 @@ source "https://rubygems.org" +gem "berkshelf" gem "chef", "~> 16.17.18" gem "chef-bin", "~> 16.17.18" -gem "berkshelf" diff --git a/omnibus/cookbooks/firezone/Policyfile.rb b/omnibus/cookbooks/firezone/Policyfile.rb index 97007fe4a..a41794cf4 100644 --- a/omnibus/cookbooks/firezone/Policyfile.rb +++ b/omnibus/cookbooks/firezone/Policyfile.rb @@ -4,13 +4,13 @@ # https://docs.chef.io/policyfile/ # A name that describes what the system you're building with Chef does. -name 'firezone' +name "firezone" # Where to find external cookbooks: default_source :supermarket # run_list: chef-client will run these recipes in the order specified. -run_list 'firezone::default' +run_list "firezone::default" # Specify a custom source for a single cookbook: -cookbook 'firezone', path: '.' +cookbook "firezone", path: "." diff --git a/omnibus/cookbooks/firezone/attributes/default.rb b/omnibus/cookbooks/firezone/attributes/default.rb index 7632bd1e5..2228aaf39 100644 --- a/omnibus/cookbooks/firezone/attributes/default.rb +++ b/omnibus/cookbooks/firezone/attributes/default.rb @@ -1,6 +1,6 @@ # # Firezone configuration -require 'etc' +require "etc" # # Attributes here will be applied to configure the application and the services @@ -26,62 +26,62 @@ require 'etc' # The fully qualified domain name. Will use the node's fqdn if nothing is # specified. Used for generating URLs that point back to this application # and for securing the Websocket connections to the UI. -default['firezone']['fqdn'] = (node['fqdn'] || node['hostname']).downcase +default["firezone"]["fqdn"] = (node["fqdn"] || node["hostname"]).downcase -default['firezone']['config_directory'] = '/etc/firezone' -default['firezone']['install_directory'] = '/opt/firezone' -default['firezone']['app_directory'] = "#{node['firezone']['install_directory']}/embedded/service/firezone" -default['firezone']['log_directory'] = '/var/log/firezone' -default['firezone']['var_directory'] = '/var/opt/firezone' -default['firezone']['user'] = 'firezone' -default['firezone']['group'] = 'firezone' +default["firezone"]["config_directory"] = "/etc/firezone" +default["firezone"]["install_directory"] = "/opt/firezone" +default["firezone"]["app_directory"] = "#{node["firezone"]["install_directory"]}/embedded/service/firezone" +default["firezone"]["log_directory"] = "/var/log/firezone" +default["firezone"]["var_directory"] = "/var/opt/firezone" +default["firezone"]["user"] = "firezone" +default["firezone"]["group"] = "firezone" # Email for the primary admin user. -default['firezone']['admin_email'] = "firezone@localhost" +default["firezone"]["admin_email"] = "firezone@localhost" # The outgoing interface name. # This is where tunneled traffic will exit the WireGuard tunnel. # If set to nil, this is will be set to the interface for the machine's # default route. -default['firezone']['egress_interface'] = nil +default["firezone"]["egress_interface"] = nil # Whether to use OpenSSL FIPS mode across Firezone. Default disabled. -default['firezone']['fips_enabled'] = nil +default["firezone"]["fips_enabled"] = nil # ## Enterprise # # The "enterprise" cookbook provides recipes and resources we can use for this # app. -default['enterprise']['name'] = 'firezone' +default["enterprise"]["name"] = "firezone" # Enterprise uses install_path internally, but we use install_directory because # it's more consistent. Alias it here so both work. -default['firezone']['install_path'] = node['firezone']['install_directory'] +default["firezone"]["install_path"] = node["firezone"]["install_directory"] # An identifier used in /etc/inittab (default is 'SUP'). Needs to be a unique # (for the file) sequence of 1-4 characters. -default['firezone']['sysvinit_id'] = 'SUP' +default["firezone"]["sysvinit_id"] = "SUP" # ## Nginx # These attributes control Firezone-specific portions of the Nginx # configuration and the virtual host for the Firezone Phoenix app. -default['firezone']['nginx']['enabled'] = true -default['firezone']['nginx']['force_ssl'] = true -default['firezone']['nginx']['non_ssl_port'] = 80 -default['firezone']['nginx']['ssl_port'] = 443 -default['firezone']['nginx']['directory'] = "#{node['firezone']['var_directory']}/nginx/etc" -default['firezone']['nginx']['log_directory'] = "#{node['firezone']['log_directory']}/nginx" -default['firezone']['nginx']['log_rotation']['file_maxbytes'] = 104857600 -default['firezone']['nginx']['log_rotation']['num_to_keep'] = 10 -default['firezone']['nginx']['log_x_forwarded_for'] = false +default["firezone"]["nginx"]["enabled"] = true +default["firezone"]["nginx"]["force_ssl"] = true +default["firezone"]["nginx"]["non_ssl_port"] = 80 +default["firezone"]["nginx"]["ssl_port"] = 443 +default["firezone"]["nginx"]["directory"] = "#{node["firezone"]["var_directory"]}/nginx/etc" +default["firezone"]["nginx"]["log_directory"] = "#{node["firezone"]["log_directory"]}/nginx" +default["firezone"]["nginx"]["log_rotation"]["file_maxbytes"] = 104_857_600 +default["firezone"]["nginx"]["log_rotation"]["num_to_keep"] = 10 +default["firezone"]["nginx"]["log_x_forwarded_for"] = false # Redirect to the FQDN -default['firezone']['nginx']['redirect_to_canonical'] = false +default["firezone"]["nginx"]["redirect_to_canonical"] = false # Controls nginx caching, used to cache some endpoints -default['firezone']['nginx']['cache']['enabled'] = false -default['firezone']['nginx']['cache']['directory'] = "#{node['firezone']['var_directory']}/nginx/cache" +default["firezone"]["nginx"]["cache"]["enabled"] = false +default["firezone"]["nginx"]["cache"]["directory"] = "#{node["firezone"]["var_directory"]}/nginx/cache" # These attributes control the main nginx.conf, including the events and http # contexts. @@ -89,20 +89,20 @@ default['firezone']['nginx']['cache']['directory'] = "#{node['firezone']['var_di # These will be copied to the top-level nginx namespace and used in a # template from the community nginx cookbook # (https://github.com/miketheman/nginx/blob/master/templates/default/nginx.conf.erb) -default['firezone']['nginx']['user'] = node['firezone']['user'] -default['firezone']['nginx']['group'] = node['firezone']['group'] -default['firezone']['nginx']['dir'] = node['firezone']['nginx']['directory'] -default['firezone']['nginx']['log_dir'] = node['firezone']['nginx']['log_directory'] -default['firezone']['nginx']['pid'] = "#{node['firezone']['nginx']['directory']}/nginx.pid" -default['firezone']['nginx']['daemon_disable'] = true -default['firezone']['nginx']['gzip'] = 'on' -default['firezone']['nginx']['gzip_static'] = 'off' -default['firezone']['nginx']['gzip_http_version'] = '1.0' -default['firezone']['nginx']['gzip_comp_level'] = '2' -default['firezone']['nginx']['gzip_proxied'] = 'any' -default['firezone']['nginx']['gzip_vary'] = 'off' -default['firezone']['nginx']['gzip_buffers'] = nil -default['firezone']['nginx']['gzip_types'] = %w( +default["firezone"]["nginx"]["user"] = node["firezone"]["user"] +default["firezone"]["nginx"]["group"] = node["firezone"]["group"] +default["firezone"]["nginx"]["dir"] = node["firezone"]["nginx"]["directory"] +default["firezone"]["nginx"]["log_dir"] = node["firezone"]["nginx"]["log_directory"] +default["firezone"]["nginx"]["pid"] = "#{node["firezone"]["nginx"]["directory"]}/nginx.pid" +default["firezone"]["nginx"]["daemon_disable"] = true +default["firezone"]["nginx"]["gzip"] = "on" +default["firezone"]["nginx"]["gzip_static"] = "off" +default["firezone"]["nginx"]["gzip_http_version"] = "1.0" +default["firezone"]["nginx"]["gzip_comp_level"] = "2" +default["firezone"]["nginx"]["gzip_proxied"] = "any" +default["firezone"]["nginx"]["gzip_vary"] = "off" +default["firezone"]["nginx"]["gzip_buffers"] = nil +default["firezone"]["nginx"]["gzip_types"] = %w[ text/plain text/css application/x-javascript @@ -113,38 +113,38 @@ default['firezone']['nginx']['gzip_types'] = %w( text/javascript application/javascript application/json -) -default['firezone']['nginx']['gzip_min_length'] = 1000 -default['firezone']['nginx']['gzip_disable'] = 'MSIE [1-6]\.' -default['firezone']['nginx']['keepalive'] = 'on' -default['firezone']['nginx']['keepalive_timeout'] = 65 -default['firezone']['nginx']['worker_processes'] = node['cpu'] && node['cpu']['total'] ? node['cpu']['total'] : 1 -default['firezone']['nginx']['worker_connections'] = 1024 -default['firezone']['nginx']['worker_rlimit_nofile'] = nil -default['firezone']['nginx']['multi_accept'] = false -default['firezone']['nginx']['event'] = nil -default['firezone']['nginx']['server_tokens'] = nil -default['firezone']['nginx']['server_names_hash_bucket_size'] = 64 -default['firezone']['nginx']['sendfile'] = 'on' -default['firezone']['nginx']['access_log_options'] = nil -default['firezone']['nginx']['error_log_options'] = nil -default['firezone']['nginx']['disable_access_log'] = false -default['firezone']['nginx']['default_site_enabled'] = false -default['firezone']['nginx']['types_hash_max_size'] = 2048 -default['firezone']['nginx']['types_hash_bucket_size'] = 64 -default['firezone']['nginx']['proxy_read_timeout'] = nil -default['firezone']['nginx']['client_body_buffer_size'] = nil -default['firezone']['nginx']['client_max_body_size'] = '250m' -default['firezone']['nginx']['default']['modules'] = [] +] +default["firezone"]["nginx"]["gzip_min_length"] = 1000 +default["firezone"]["nginx"]["gzip_disable"] = 'MSIE [1-6]\.' +default["firezone"]["nginx"]["keepalive"] = "on" +default["firezone"]["nginx"]["keepalive_timeout"] = 65 +default["firezone"]["nginx"]["worker_processes"] = node["cpu"] && node["cpu"]["total"] ? node["cpu"]["total"] : 1 +default["firezone"]["nginx"]["worker_connections"] = 1024 +default["firezone"]["nginx"]["worker_rlimit_nofile"] = nil +default["firezone"]["nginx"]["multi_accept"] = false +default["firezone"]["nginx"]["event"] = nil +default["firezone"]["nginx"]["server_tokens"] = nil +default["firezone"]["nginx"]["server_names_hash_bucket_size"] = 64 +default["firezone"]["nginx"]["sendfile"] = "on" +default["firezone"]["nginx"]["access_log_options"] = nil +default["firezone"]["nginx"]["error_log_options"] = nil +default["firezone"]["nginx"]["disable_access_log"] = false +default["firezone"]["nginx"]["default_site_enabled"] = false +default["firezone"]["nginx"]["types_hash_max_size"] = 2048 +default["firezone"]["nginx"]["types_hash_bucket_size"] = 64 +default["firezone"]["nginx"]["proxy_read_timeout"] = nil +default["firezone"]["nginx"]["client_body_buffer_size"] = nil +default["firezone"]["nginx"]["client_max_body_size"] = "250m" +default["firezone"]["nginx"]["default"]["modules"] = [] # ## Postgres # ### Use the bundled Postgres instance (default, recommended): # -default['firezone']['postgresql']['enabled'] = true -default['firezone']['postgresql']['username'] = node['firezone']['user'] -default['firezone']['postgresql']['data_directory'] = "#{node['firezone']['var_directory']}/postgresql/13.3/data" +default["firezone"]["postgresql"]["enabled"] = true +default["firezone"]["postgresql"]["username"] = node["firezone"]["user"] +default["firezone"]["postgresql"]["data_directory"] = "#{node["firezone"]["var_directory"]}/postgresql/13.3/data" # ### Using an external Postgres database # @@ -159,38 +159,38 @@ default['firezone']['postgresql']['data_directory'] = "#{node['firezone']['var_d # Further database configuration options can be found below # ### Logs -default['firezone']['postgresql']['log_directory'] = "#{node['firezone']['log_directory']}/postgresql" -default['firezone']['postgresql']['log_rotation']['file_maxbytes'] = 104857600 -default['firezone']['postgresql']['log_rotation']['num_to_keep'] = 10 +default["firezone"]["postgresql"]["log_directory"] = "#{node["firezone"]["log_directory"]}/postgresql" +default["firezone"]["postgresql"]["log_rotation"]["file_maxbytes"] = 104_857_600 +default["firezone"]["postgresql"]["log_rotation"]["num_to_keep"] = 10 # ### Postgres Settings -default['firezone']['postgresql']['checkpoint_completion_target'] = 0.5 -default['firezone']['postgresql']['checkpoint_segments'] = 3 -default['firezone']['postgresql']['checkpoint_timeout'] = '5min' -default['firezone']['postgresql']['checkpoint_warning'] = '30s' -default['firezone']['postgresql']['effective_cache_size'] = '128MB' -default['firezone']['postgresql']['listen_address'] = '127.0.0.1' -default['firezone']['postgresql']['max_connections'] = 350 -default['firezone']['postgresql']['md5_auth_cidr_addresses'] = ['127.0.0.1/32', '::1/128'] -default['firezone']['postgresql']['port'] = 15432 -default['firezone']['postgresql']['shared_buffers'] = "#{(node['memory']['total'].to_i / 4) / 1024}MB" -default['firezone']['postgresql']['shmmax'] = 17179869184 -default['firezone']['postgresql']['shmall'] = 4194304 -default['firezone']['postgresql']['work_mem'] = '8MB' +default["firezone"]["postgresql"]["checkpoint_completion_target"] = 0.5 +default["firezone"]["postgresql"]["checkpoint_segments"] = 3 +default["firezone"]["postgresql"]["checkpoint_timeout"] = "5min" +default["firezone"]["postgresql"]["checkpoint_warning"] = "30s" +default["firezone"]["postgresql"]["effective_cache_size"] = "128MB" +default["firezone"]["postgresql"]["listen_address"] = "127.0.0.1" +default["firezone"]["postgresql"]["max_connections"] = 350 +default["firezone"]["postgresql"]["md5_auth_cidr_addresses"] = ["127.0.0.1/32", "::1/128"] +default["firezone"]["postgresql"]["port"] = 15_432 +default["firezone"]["postgresql"]["shared_buffers"] = "#{(node["memory"]["total"].to_i / 4) / 1024}MB" +default["firezone"]["postgresql"]["shmmax"] = 17_179_869_184 +default["firezone"]["postgresql"]["shmall"] = 4_194_304 +default["firezone"]["postgresql"]["work_mem"] = "8MB" # ## Common Database Settings # # The settings below configure how Firezone connects to and uses your database. # At this time only Postgres (and Postgres-compatible) databases are supported. -default['firezone']['database']['user'] = node['firezone']['postgresql']['username'] -default['firezone']['database']['name'] = 'firezone' -default['firezone']['database']['host'] = node['firezone']['postgresql']['listen_address'] -default['firezone']['database']['port'] = node['firezone']['postgresql']['port'] -default['firezone']['database']['ssl'] = false -default['firezone']['database']['ssl_opts'] = {} -default['firezone']['database']['parameters'] = {} -default['firezone']['database']['pool'] = [10, Etc.nprocessors].max -default['firezone']['database']['extensions'] = { 'plpgsql' => true, 'pg_trgm' => true } +default["firezone"]["database"]["user"] = node["firezone"]["postgresql"]["username"] +default["firezone"]["database"]["name"] = "firezone" +default["firezone"]["database"]["host"] = node["firezone"]["postgresql"]["listen_address"] +default["firezone"]["database"]["port"] = node["firezone"]["postgresql"]["port"] +default["firezone"]["database"]["ssl"] = false +default["firezone"]["database"]["ssl_opts"] = {} +default["firezone"]["database"]["parameters"] = {} +default["firezone"]["database"]["pool"] = [10, Etc.nprocessors].max +default["firezone"]["database"]["extensions"] = { "plpgsql" => true, "pg_trgm" => true } # Uncomment to specify a database password. Not usually needed if using the bundled Postgresql. # default['firezone']['database']['password'] = 'change_me' @@ -198,70 +198,70 @@ default['firezone']['database']['extensions'] = { 'plpgsql' => true, 'pg_trgm' = # ## Phoenix # ### The Phoenix web app for Firezone -default['firezone']['phoenix']['enabled'] = true -default['firezone']['phoenix']['port'] = 13000 -default['firezone']['phoenix']['log_directory'] = "#{node['firezone']['log_directory']}/phoenix" -default['firezone']['phoenix']['log_rotation']['file_maxbytes'] = 104857600 -default['firezone']['phoenix']['log_rotation']['num_to_keep'] = 10 +default["firezone"]["phoenix"]["enabled"] = true +default["firezone"]["phoenix"]["port"] = 13_000 +default["firezone"]["phoenix"]["log_directory"] = "#{node["firezone"]["log_directory"]}/phoenix" +default["firezone"]["phoenix"]["log_rotation"]["file_maxbytes"] = 104_857_600 +default["firezone"]["phoenix"]["log_rotation"]["num_to_keep"] = 10 # ## WireGuard # ### Interface Management # Enable management of the WireGuard interface itself. Set this to false if you # want to manually create your WireGuard interface and manage its interface properties. -default['firezone']['wireguard']['enabled'] = true -default['firezone']['wireguard']['log_directory'] = "#{node['firezone']['log_directory']}/wireguard" -default['firezone']['wireguard']['log_rotation']['file_maxbytes'] = 104857600 -default['firezone']['wireguard']['log_rotation']['num_to_keep'] = 10 +default["firezone"]["wireguard"]["enabled"] = true +default["firezone"]["wireguard"]["log_directory"] = "#{node["firezone"]["log_directory"]}/wireguard" +default["firezone"]["wireguard"]["log_rotation"]["file_maxbytes"] = 104_857_600 +default["firezone"]["wireguard"]["log_rotation"]["num_to_keep"] = 10 # The WireGuard interface name Firezone will apply configuration settings to. -default['firezone']['wireguard']['interface_name'] = 'wg-firezone' +default["firezone"]["wireguard"]["interface_name"] = "wg-firezone" # WireGuard listen port -default['firezone']['wireguard']['port'] = 51820 +default["firezone"]["wireguard"]["port"] = 51_820 # WireGuard interface MTU -default['firezone']['wireguard']['mtu'] = 1420 +default["firezone"]["wireguard"]["mtu"] = 1420 # WireGuard endpoint # By default, the public IP address of this server is used as the Endpoint # field for generating Device configs. Override this if you wish to change. -default['firezone']['wireguard']['endpoint'] = nil +default["firezone"]["wireguard"]["endpoint"] = nil # Default AllowedIPs to use for generated device configs specified as a comma-separated # list of IPv4 / IPv6 CIDRs. # Default is to tunnel all IPv4 and IPv6 traffic with '0.0.0.0/0, ::/0' -default['firezone']['wireguard']['allowed_ips'] = '0.0.0.0/0, ::/0' +default["firezone"]["wireguard"]["allowed_ips"] = "0.0.0.0/0, ::/0" # Default DNS servers to use for generated device configs. # Defaults to CloudFlare's public DNS. Set to nil to omit DNS from generated # device configurations. -default['firezone']['wireguard']['dns'] = '1.1.1.1, 1.0.0.1' +default["firezone"]["wireguard"]["dns"] = "1.1.1.1, 1.0.0.1" # Default PersistentKeepalive setting to use for generated device configs. # See https://www.wireguard.com/quickstart/#nat-and-firewall-traversal-persistence # Set to 0 or nil to disable. Default 0. -default['firezone']['wireguard']['persistent_keepalive'] = 0 +default["firezone"]["wireguard"]["persistent_keepalive"] = 0 # Enable or disable IPv4 connectivity in your WireGuard network. Default enabled. -default['firezone']['wireguard']['ipv4']['enabled'] = true +default["firezone"]["wireguard"]["ipv4"]["enabled"] = true # The CIDR-formatted IPv4 network to use for your WireGuard network. Default 10.3.2.0/24. -default['firezone']['wireguard']['ipv4']['network'] = '10.3.2.0/24' +default["firezone"]["wireguard"]["ipv4"]["network"] = "10.3.2.0/24" # The IPv4 address to assign to your WireGuard interface. Must be an address # contained within the WireGuard network specific above. Default 10.3.2.1. -default['firezone']['wireguard']['ipv4']['address'] = '10.3.2.1' +default["firezone"]["wireguard"]["ipv4"]["address"] = "10.3.2.1" # Enable or disable IPv4 connectivity in your WireGuard network. Default enabled. -default['firezone']['wireguard']['ipv6']['enabled'] = true +default["firezone"]["wireguard"]["ipv6"]["enabled"] = true # The CIDR-formatted IPv4 network to use for your WireGuard network. Default fd00::3:2:0/120. -default['firezone']['wireguard']['ipv6']['network'] = 'fd00::3:2:0/120' +default["firezone"]["wireguard"]["ipv6"]["network"] = "fd00::3:2:0/120" # The IPv4 address to assign to your WireGuard interface. Must be an address # contained within the WireGuard network specific above. Default fd00::3:2:1. -default['firezone']['wireguard']['ipv6']['address'] = 'fd00::3:2:1' +default["firezone"]["wireguard"]["ipv6"]["address"] = "fd00::3:2:1" # ## Runit @@ -269,30 +269,30 @@ default['firezone']['wireguard']['ipv6']['address'] = 'fd00::3:2:1' # see (https://github.com/chef-cookbooks/enterprise-chef-common/pull/17) # # Will be copied to the root node.runit namespace. -default['firezone']['runit']['svlogd_bin'] = "#{node['firezone']['install_directory']}/embedded/bin/svlogd" +default["firezone"]["runit"]["svlogd_bin"] = "#{node["firezone"]["install_directory"]}/embedded/bin/svlogd" # ## SSL -default['firezone']['ssl']['directory'] = '/var/opt/firezone/ssl' +default["firezone"]["ssl"]["directory"] = "/var/opt/firezone/ssl" # Enable / disable SSL -default['firezone']['ssl']['enabled'] = true +default["firezone"]["ssl"]["enabled"] = true # Paths to the SSL certificate and key files. If these are not provided we will # attempt to generate a self-signed certificate and use that instead. -default['firezone']['ssl']['certificate'] = nil -default['firezone']['ssl']['certificate_key'] = nil +default["firezone"]["ssl"]["certificate"] = nil +default["firezone"]["ssl"]["certificate_key"] = nil # Path to the SSL dhparam file if you want to specify your own SSL DH parameters. -default['firezone']['ssl']['ssl_dhparam'] = nil +default["firezone"]["ssl"]["ssl_dhparam"] = nil # These are used in creating a self-signed cert if you haven't brought your own. -default['firezone']['ssl']['country_name'] = 'US' -default['firezone']['ssl']['state_name'] = 'CA' -default['firezone']['ssl']['locality_name'] = 'San Francisco' -default['firezone']['ssl']['company_name'] = 'My Company' -default['firezone']['ssl']['organizational_unit_name'] = 'Operations' -default['firezone']['ssl']['email_address'] = 'you@example.com' +default["firezone"]["ssl"]["country_name"] = "US" +default["firezone"]["ssl"]["state_name"] = "CA" +default["firezone"]["ssl"]["locality_name"] = "San Francisco" +default["firezone"]["ssl"]["company_name"] = "My Company" +default["firezone"]["ssl"]["organizational_unit_name"] = "Operations" +default["firezone"]["ssl"]["email_address"] = "you@example.com" # ### Cipher settings # @@ -303,12 +303,12 @@ default['firezone']['ssl']['email_address'] = 'you@example.com' # # If your infrastructure still has requirements for the vulnerable/venerable SSLV3, you can add # "SSLv3" to the below line. -default['firezone']['ssl']['ciphers'] = 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA' -default['firezone']['ssl']['fips_ciphers'] = 'FIPS@STRENGTH:!aNULL:!eNULL' -default['firezone']['ssl']['protocols'] = 'TLSv1 TLSv1.1 TLSv1.2' -default['firezone']['ssl']['session_cache'] = 'shared:SSL:4m' -default['firezone']['ssl']['session_timeout'] = '5m' - +default["firezone"]["ssl"]["ciphers"] = + "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA" +default["firezone"]["ssl"]["fips_ciphers"] = "FIPS@STRENGTH:!aNULL:!eNULL" +default["firezone"]["ssl"]["protocols"] = "TLSv1 TLSv1.1 TLSv1.2" +default["firezone"]["ssl"]["session_cache"] = "shared:SSL:4m" +default["firezone"]["ssl"]["session_timeout"] = "5m" # ### robots.txt Settings # @@ -316,8 +316,8 @@ default['firezone']['ssl']['session_timeout'] = '5m' # http://www.robotstxt.org/robotstxt.html for more information. Only a single # line for each item is supported. If a value is nil, the line will not be # present in the file. -default['firezone']['robots_allow'] = '/' -default['firezone']['robots_disallow'] = nil +default["firezone"]["robots_allow"] = "/" +default["firezone"]["robots_disallow"] = nil # ### Outbound Email Settings # @@ -326,18 +326,18 @@ default['firezone']['robots_disallow'] = nil # (usually set up with a relay host) be configured on this machine. # # SMTP will use the 'plain' authentication method. -default['firezone']['from_email'] = nil -default['firezone']['smtp_address'] = nil -default['firezone']['smtp_password'] = nil -default['firezone']['smtp_port'] = nil -default['firezone']['smtp_user_name'] = nil +default["firezone"]["from_email"] = nil +default["firezone"]["smtp_address"] = nil +default["firezone"]["smtp_password"] = nil +default["firezone"]["smtp_port"] = nil +default["firezone"]["smtp_user_name"] = nil # ## Telemetry # # Firezone relies heavily on hashed, anonymized telemetry data to help us build # a better product for our users. This data is stored securely and is not # shared or accessible to any third parties. Set this to false to disable. -default['firezone']['telemetry']['enabled'] = true +default["firezone"]["telemetry"]["enabled"] = true # ## Diagnostics Settings @@ -348,8 +348,8 @@ default['firezone']['telemetry']['enabled'] = true # is used to determine the server's publicly routable IP address for populating # device configurations and setting up firewall rules. Set this to false to # disable. -default['firezone']['connectivity_checks']['enabled'] = true +default["firezone"]["connectivity_checks"]["enabled"] = true # Amount of time to sleep between connectivity checks, in seconds. # Default: 3600 (1 hour). Minimum: 60 (1 minute). Maximum: 86400 (1 day). -default['firezone']['connectivity_checks']['interval'] = 3_600 +default["firezone"]["connectivity_checks"]["interval"] = 3_600 diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb index 0087d5d6f..907bd080c 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'mixlib/shellout' -require 'uri' -require 'net/http' -require 'json' +require "mixlib/shellout" +require "uri" +require "net/http" +require "json" desc = <<~DESC -Resets the password for admin with email specified by default['firezone']['admin_email'] or creates a new admin if that email doesn't exist. + Resets the password for admin with email specified by default['firezone']['admin_email'] or creates a new admin if that email doesn't exist. DESC def capture @@ -29,7 +29,7 @@ def capture end end -add_command_under_category 'create-or-reset-admin', 'general', desc, 2 do +add_command_under_category "create-or-reset-admin", "general", desc, 2 do command = %W( chef-client -z diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb index a33987946..acde69da8 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'mixlib/shellout' -require 'uri' -require 'net/http' -require 'json' +require "mixlib/shellout" +require "uri" +require "net/http" +require "json" def capture telemetry_file = "/var/opt/firezone/cache/telemetry_id" @@ -25,8 +25,8 @@ def capture end end -add_command_under_category 'reconfigure', 'general', 'Reconfigure the application.', 2 do - status = run_chef("#{base_path}/embedded/cookbooks/dna.json", '--chef-license=accept') +add_command_under_category "reconfigure", "general", "Reconfigure the application.", 2 do + status = run_chef("#{base_path}/embedded/cookbooks/dna.json", "--chef-license=accept") capture diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/teardown.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/teardown.rb index d9644f366..85a387515 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/teardown.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/teardown.rb @@ -1,8 +1,9 @@ # frozen_string_literal: true -require 'mixlib/shellout' +require "mixlib/shellout" -add_command_under_category 'teardown-network', 'general', 'Removes WireGuard interface and firezone nftables table.', 2 do +add_command_under_category "teardown-network", "general", "Removes WireGuard interface and firezone nftables table.", + 2 do command = %W( chef-client -z diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb index f67a0c1a8..b8d69399d 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb @@ -13,15 +13,13 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -require 'json' +require "json" -add_command_under_category 'version', 'general', 'Display current version of Firezone', 2 do - begin - version = JSON.parse(File.read('/opt/firezone/version-manifest.json'))['build_version'] - puts version - rescue Errno::ENOENT => e - puts 'Error determining version!' - puts e.message.to_s - exit(1) - end +add_command_under_category "version", "general", "Display current version of Firezone", 2 do + version = JSON.parse(File.read("/opt/firezone/version-manifest.json"))["build_version"] + puts version +rescue Errno::ENOENT => e + puts "Error determining version!" + puts e.message.to_s + exit(1) end diff --git a/omnibus/cookbooks/firezone/libraries/config.rb b/omnibus/cookbooks/firezone/libraries/config.rb index 3cee71578..8b11d7790 100644 --- a/omnibus/cookbooks/firezone/libraries/config.rb +++ b/omnibus/cookbooks/firezone/libraries/config.rb @@ -1,6 +1,6 @@ -require 'json' -require 'fileutils' -require 'securerandom' +require "json" +require "fileutils" +require "securerandom" # Manages configuration class Firezone @@ -14,9 +14,9 @@ class Firezone node.from_file(filename) else # Write out the new file, but with everything commented out - File.open(filename, 'w') do |file| + File.open(filename, "w") do |file| File.open( - "#{node['firezone']['install_directory']}/embedded/cookbooks/firezone/attributes/default.rb", 'r' + "#{node["firezone"]["install_directory"]}/embedded/cookbooks/firezone/attributes/default.rb", "r" ).read.each_line do |line| file.write "# #{line}" end @@ -52,10 +52,10 @@ class Firezone create_directory!(filename) if File.exist?(filename) node.consume_attributes( - 'firezone' => Chef::JSONCompat.from_json(open(filename).read) + "firezone" => Chef::JSONCompat.from_json(open(filename).read) ) end - rescue => e + rescue StandardError => e Chef::Log.warn "Could not read attributes from #{filename}: #{e}" end @@ -64,32 +64,33 @@ class Firezone def self.load_or_create_secrets!(filename, node) create_directory!(filename) secrets = Chef::JSONCompat.from_json(File.open(filename).read) - node.consume_attributes('firezone' => secrets) + node.consume_attributes("firezone" => secrets) rescue Errno::ENOENT begin secret_key_base = - node.dig('firezone', 'secret_key_base') || SecureRandom.base64(48) + node.dig("firezone", "secret_key_base") || SecureRandom.base64(48) live_view_signing_salt = - node.dig('firezone', 'live_view_signing_salt') || SecureRandom.base64(24) + node.dig("firezone", "live_view_signing_salt") || SecureRandom.base64(24) cookie_signing_salt = - node.dig('firezone', 'cookie_signing_salt') || SecureRandom.base64(6) + node.dig("firezone", "cookie_signing_salt") || SecureRandom.base64(6) wireguard_private_key = - node.dig('firezone', 'wireguard_private_key') || `#{node['firezone']['install_directory']}/embedded/bin/wg genkey`.chomp + node.dig("firezone", + "wireguard_private_key") || `#{node["firezone"]["install_directory"]}/embedded/bin/wg genkey`.chomp database_encryption_key = - node.dig('firezone', 'database_encryption_key') || SecureRandom.base64(32) + node.dig("firezone", "database_encryption_key") || SecureRandom.base64(32) default_admin_password = - node.dig('firezone', 'default_admin_password') || SecureRandom.base64(8) + node.dig("firezone", "default_admin_password") || SecureRandom.base64(8) secrets = { - 'secret_key_base' => secret_key_base, - 'live_view_signing_salt' => live_view_signing_salt, - 'cookie_signing_salt' => cookie_signing_salt, - 'wireguard_private_key' => wireguard_private_key, - 'database_encryption_key' => database_encryption_key, - 'default_admin_password' => default_admin_password + "secret_key_base" => secret_key_base, + "live_view_signing_salt" => live_view_signing_salt, + "cookie_signing_salt" => cookie_signing_salt, + "wireguard_private_key" => wireguard_private_key, + "database_encryption_key" => database_encryption_key, + "default_admin_password" => default_admin_password } - open(filename, 'w') do |file| + open(filename, "w") do |file| file.puts Chef::JSONCompat.to_json_pretty(secrets) end Chef::Log.info("Creating secrets file #{filename}") @@ -97,7 +98,7 @@ class Firezone Chef::Log.warn "Could not create #{filename}: #{e}" end - node.consume_attributes('firezone' => secrets) + node.consume_attributes("firezone" => secrets) end def self.audit_config(config) @@ -106,35 +107,40 @@ class Firezone end def self.audit_s3_config(config) - required_s3_vars = %w(s3_bucket s3_region).freeze + required_s3_vars = %w[s3_bucket s3_region].freeze any_required_s3_vars = required_s3_vars.any? { |key| !config[key].nil? } all_required_s3_vars = required_s3_vars.all? { |key| !(config[key].nil? || config[key].empty?) } if any_required_s3_vars && !all_required_s3_vars - raise IncompleteConfig, "Got some, but not all, of the required S3 configs. Must provide #{required_s3_vars} to configure cookbook storage in an S3 bucket." + raise IncompleteConfig, + "Got some, but not all, of the required S3 configs. Must provide #{required_s3_vars} to configure cookbook storage in an S3 bucket." end - static_s3_creds = %w(s3_access_key_id s3_secret_access_key).freeze + static_s3_creds = %w[s3_access_key_id s3_secret_access_key].freeze any_static_s3_creds = static_s3_creds.any? { |key| !config[key].nil? } all_static_s3_creds = static_s3_creds.all? { |key| !(config[key].nil? || config[key].empty?) } if any_static_s3_creds && !all_static_s3_creds - raise IncompleteConfig, "Got some, but not all, of AWS user credentials. To access an S3 bucket with IAM user credentials, provide #{static_s3_creds}. To use an IAM role, do not set these." + raise IncompleteConfig, + "Got some, but not all, of AWS user credentials. To access an S3 bucket with IAM user credentials, provide #{static_s3_creds}. To use an IAM role, do not set these." end - if config['s3_bucket'] =~ /\./ && - (config['s3_domain_style'] != ':s3_path_url' || config['s3_region'] != 'us-east-1') - raise IncompatibleConfig, "Incompatible S3 bucket settings. If the bucket name contains periods, the bucket must be in us-east-1 and the domain style must be :s3_path_url.\nAmazon recommends against periods in bucket names. See: https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html" + if config["s3_bucket"] =~ /\./ && + (config["s3_domain_style"] != ":s3_path_url" || config["s3_region"] != "us-east-1") + raise IncompatibleConfig, + "Incompatible S3 bucket settings. If the bucket name contains periods, the bucket must be in us-east-1 and the domain style must be :s3_path_url.\nAmazon recommends against periods in bucket names. See: https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html" end end def self.audit_fips_config(config) - unless built_with_fips?(config['install_directory']) + unless built_with_fips?(config["install_directory"]) if fips_enabled_in_kernel? - raise IncompatibleConfig, 'Detected FIPS is enabled in the kernel, but FIPS is not supported by this installer.' + raise IncompatibleConfig, + "Detected FIPS is enabled in the kernel, but FIPS is not supported by this installer." end - if config['fips_enabled'] - raise IncompatibleConfig, 'You have enabled FIPS in your configuration, but FIPS is not supported by this installer.' + if config["fips_enabled"] + raise IncompatibleConfig, + "You have enabled FIPS in your configuration, but FIPS is not supported by this installer." end end end @@ -144,32 +150,32 @@ class Firezone end def self.fips_enabled_in_kernel? - fips_path = '/proc/sys/crypto/fips_enabled' - (File.exist?(fips_path) && File.read(fips_path).chomp != '0') + fips_path = "/proc/sys/crypto/fips_enabled" + (File.exist?(fips_path) && File.read(fips_path).chomp != "0") end def self.maybe_turn_on_fips(node) # the compexity of this method is currently needed to figure out what words to display # to the poor human who has to deal with FIPS - case node['firezone']['fips_enabled'] + case node["firezone"]["fips_enabled"] when nil # the default value, set fips mode based on whether it is enabled in the kernel - node.normal['firezone']['fips_enabled'] = Firezone::Config.fips_enabled_in_kernel? - if node['firezone']['fips_enabled'] - Chef::Log.warn('Detected FIPS-enabled kernel; enabling FIPS 140-2 for Firezone services.') + node.normal["firezone"]["fips_enabled"] = Firezone::Config.fips_enabled_in_kernel? + if node["firezone"]["fips_enabled"] + Chef::Log.warn("Detected FIPS-enabled kernel; enabling FIPS 140-2 for Firezone services.") end when false - node.normal['firezone']['fips_enabled'] = Firezone::Config.fips_enabled_in_kernel? - if node['firezone']['fips_enabled'] - Chef::Log.warn('Detected FIPS-enabled kernel; enabling FIPS 140-2 for Firezone services.') - Chef::Log.warn('fips_enabled was set to false; ignoring this and setting to true or else Firezone services will fail with crypto errors.') + node.normal["firezone"]["fips_enabled"] = Firezone::Config.fips_enabled_in_kernel? + if node["firezone"]["fips_enabled"] + Chef::Log.warn("Detected FIPS-enabled kernel; enabling FIPS 140-2 for Firezone services.") + Chef::Log.warn("fips_enabled was set to false; ignoring this and setting to true or else Firezone services will fail with crypto errors.") end when true - Chef::Log.warn('Overriding FIPS detection: FIPS 140-2 mode is ON.') + Chef::Log.warn("Overriding FIPS detection: FIPS 140-2 mode is ON.") else - node.normal['firezone']['fips_enabled'] = true - Chef::Log.warn('fips_enabled is set to something other than boolean true/false; assuming FIPS mode should be enabled.') - Chef::Log.warn('Overriding FIPS detection: FIPS 140-2 mode is ON.') + node.normal["firezone"]["fips_enabled"] = true + Chef::Log.warn("fips_enabled is set to something other than boolean true/false; assuming FIPS mode should be enabled.") + Chef::Log.warn("Overriding FIPS detection: FIPS 140-2 mode is ON.") end end @@ -180,11 +186,11 @@ class Firezone # If the value is a String or Number and the attribute name is attr_name. # Used to write out environment variables to a file. def self.environment_variables_from(attributes) - attributes.reduce '' do |str, attr| + attributes.reduce "" do |str, attr| str << if attr[1].is_a?(String) || attr[1].is_a?(Numeric) || attr[1] == true || attr[1] == false "export #{attr[0].upcase}=\"#{attr[1]}\"\n" else - '' + "" end end end @@ -194,54 +200,53 @@ class Firezone # NOTE: All these variables must be Strings env = { - 'EGRESS_INTERFACE' => attributes['egress_interface'], - 'WG_PATH' => "#{attributes['install_directory']}/embedded/bin/wg", - 'NFT_PATH' => "#{attributes['install_directory']}/embedded/sbin/nft", - 'MIX_ENV' => 'prod', - 'DATABASE_NAME' => attributes['database']['name'], - 'DATABASE_USER' => attributes['database']['user'], - 'DATABASE_HOST' => attributes['database']['host'], - 'DATABASE_PORT' => attributes['database']['port'].to_s, - 'DATABASE_POOL' => attributes['database']['pool'].to_s, - 'DATABASE_SSL' => attributes['database']['ssl'].to_s, - 'DATABASE_SSL_OPTS' => attributes['database']['ssl_opts'].to_json, - 'DATABASE_PARAMETERS' => attributes['database']['parameters'].to_json, - 'PHOENIX_PORT' => attributes['phoenix']['port'].to_s, - 'URL_HOST' => attributes['fqdn'], - 'ADMIN_EMAIL' => attributes['admin_email'], - 'WIREGUARD_INTERFACE_NAME' => attributes['wireguard']['interface_name'], - 'WIREGUARD_PORT' => attributes['wireguard']['port'].to_s, - 'WIREGUARD_MTU' => attributes['wireguard']['mtu'].to_s, - 'WIREGUARD_ENDPOINT' => attributes['wireguard']['endpoint'].to_s, - 'WIREGUARD_DNS' => attributes['wireguard']['dns'].to_s, - 'WIREGUARD_ALLOWED_IPS' => attributes['wireguard']['allowed_ips'].to_s, - 'WIREGUARD_PERSISTENT_KEEPALIVE' => attributes['wireguard']['persistent_keepalive'].to_s, - 'WIREGUARD_PUBLIC_KEY' => attributes['wireguard_public_key'], - 'WIREGUARD_IPV4_ENABLED' => attributes['wireguard']['ipv4']['enabled'].to_s, - 'WIREGUARD_IPV4_NETWORK' => attributes['wireguard']['ipv4']['network'], - 'WIREGUARD_IPV4_ADDRESS' => attributes['wireguard']['ipv4']['address'], - 'WIREGUARD_IPV6_ENABLED' => attributes['wireguard']['ipv6']['enabled'].to_s, - 'WIREGUARD_IPV6_NETWORK' => attributes['wireguard']['ipv6']['network'], - 'WIREGUARD_IPV6_ADDRESS' => attributes['wireguard']['ipv6']['address'], + "EGRESS_INTERFACE" => attributes["egress_interface"], + "WG_PATH" => "#{attributes["install_directory"]}/embedded/bin/wg", + "NFT_PATH" => "#{attributes["install_directory"]}/embedded/sbin/nft", + "MIX_ENV" => "prod", + "DATABASE_NAME" => attributes["database"]["name"], + "DATABASE_USER" => attributes["database"]["user"], + "DATABASE_HOST" => attributes["database"]["host"], + "DATABASE_PORT" => attributes["database"]["port"].to_s, + "DATABASE_POOL" => attributes["database"]["pool"].to_s, + "DATABASE_SSL" => attributes["database"]["ssl"].to_s, + "DATABASE_SSL_OPTS" => attributes["database"]["ssl_opts"].to_json, + "DATABASE_PARAMETERS" => attributes["database"]["parameters"].to_json, + "PHOENIX_PORT" => attributes["phoenix"]["port"].to_s, + "URL_HOST" => attributes["fqdn"], + "ADMIN_EMAIL" => attributes["admin_email"], + "WIREGUARD_INTERFACE_NAME" => attributes["wireguard"]["interface_name"], + "WIREGUARD_PORT" => attributes["wireguard"]["port"].to_s, + "WIREGUARD_MTU" => attributes["wireguard"]["mtu"].to_s, + "WIREGUARD_ENDPOINT" => attributes["wireguard"]["endpoint"].to_s, + "WIREGUARD_DNS" => attributes["wireguard"]["dns"].to_s, + "WIREGUARD_ALLOWED_IPS" => attributes["wireguard"]["allowed_ips"].to_s, + "WIREGUARD_PERSISTENT_KEEPALIVE" => attributes["wireguard"]["persistent_keepalive"].to_s, + "WIREGUARD_PUBLIC_KEY" => attributes["wireguard_public_key"], + "WIREGUARD_IPV4_ENABLED" => attributes["wireguard"]["ipv4"]["enabled"].to_s, + "WIREGUARD_IPV4_NETWORK" => attributes["wireguard"]["ipv4"]["network"], + "WIREGUARD_IPV4_ADDRESS" => attributes["wireguard"]["ipv4"]["address"], + "WIREGUARD_IPV6_ENABLED" => attributes["wireguard"]["ipv6"]["enabled"].to_s, + "WIREGUARD_IPV6_NETWORK" => attributes["wireguard"]["ipv6"]["network"], + "WIREGUARD_IPV6_ADDRESS" => attributes["wireguard"]["ipv6"]["address"], # Allow env var to override config - 'TELEMETRY_ENABLED' => ENV.fetch('TELEMETRY_ENABLED', attributes['telemetry']['enabled'] == false ? "false" : "true"), - 'TELEMETRY_ID' => attributes["telemetry_id"], - 'CONNECTIVITY_CHECKS_ENABLED' => attributes['connectivity_checks']['enabled'].to_s, - 'CONNECTIVITY_CHECKS_INTERVAL' => attributes['connectivity_checks']['interval'].to_s, + "TELEMETRY_ENABLED" => ENV.fetch("TELEMETRY_ENABLED", + attributes["telemetry"]["enabled"] == false ? "false" : "true"), + "TELEMETRY_ID" => attributes["telemetry_id"], + "CONNECTIVITY_CHECKS_ENABLED" => attributes["connectivity_checks"]["enabled"].to_s, + "CONNECTIVITY_CHECKS_INTERVAL" => attributes["connectivity_checks"]["interval"].to_s, # secrets - 'SECRET_KEY_BASE' => attributes['secret_key_base'], - 'LIVE_VIEW_SIGNING_SALT' => attributes['live_view_signing_salt'], - 'COOKIE_SIGNING_SALT' => attributes['cookie_signing_salt'], - 'DATABASE_ENCRYPTION_KEY' => attributes['database_encryption_key'] + "SECRET_KEY_BASE" => attributes["secret_key_base"], + "LIVE_VIEW_SIGNING_SALT" => attributes["live_view_signing_salt"], + "COOKIE_SIGNING_SALT" => attributes["cookie_signing_salt"], + "DATABASE_ENCRYPTION_KEY" => attributes["database_encryption_key"] } - if attributes.dig('database', 'password') - env.merge!('DATABASE_PASSWORD' => attributes['database']['password']) - end + env.merge!("DATABASE_PASSWORD" => attributes["database"]["password"]) if attributes.dig("database", "password") - if attributes.dig('default_admin_password') - env.merge!('DEFAULT_ADMIN_PASSWORD' => attributes['default_admin_password']) + if attributes.dig("default_admin_password") + env.merge!("DEFAULT_ADMIN_PASSWORD" => attributes["default_admin_password"]) end env @@ -249,7 +254,7 @@ class Firezone def self.create_directory!(filename) dir = File.dirname(filename) - FileUtils.mkdir(dir, mode: 0700) unless Dir.exist?(dir) + FileUtils.mkdir(dir, mode: 0o700) unless Dir.exist?(dir) rescue Errno::EACCES => e Chef::Log.warn "Could not create #{dir}: #{e}" end diff --git a/omnibus/cookbooks/firezone/metadata.rb b/omnibus/cookbooks/firezone/metadata.rb index 9259be365..9a2ca58c5 100644 --- a/omnibus/cookbooks/firezone/metadata.rb +++ b/omnibus/cookbooks/firezone/metadata.rb @@ -1,14 +1,14 @@ -name 'firezone' -maintainer 'Firezone' -maintainer_email 'infra@firez.one' -license 'Apache-2.0' -description 'Installs/Configures firezone' -version '0.0.1' -chef_version '>= 16.0' +name "firezone" +maintainer "Firezone" +maintainer_email "infra@firez.one" +license "Apache-2.0" +description "Installs/Configures firezone" +version "0.0.1" +chef_version ">= 16.0" -depends 'enterprise' -depends 'runit' -depends 'line' +depends "enterprise" +depends "runit" +depends "line" # The `issues_url` points to the location where issues for this cookbook are # tracked. A `View Issues` link will be displayed on this cookbook's page when diff --git a/omnibus/cookbooks/firezone/recipes/app.rb b/omnibus/cookbooks/firezone/recipes/app.rb index ae964bd8c..0f72c54f6 100644 --- a/omnibus/cookbooks/firezone/recipes/app.rb +++ b/omnibus/cookbooks/firezone/recipes/app.rb @@ -18,41 +18,41 @@ # limitations under the License. # -include_recipe 'firezone::config' -include_recipe 'firezone::phoenix' +include_recipe "firezone::config" +include_recipe "firezone::phoenix" -execute 'fix app permissions' do - app_dir = node['firezone']['app_directory'] - user = node['firezone']['user'] - group = node['firezone']['group'] +execute "fix app permissions" do + app_dir = node["firezone"]["app_directory"] + user = node["firezone"]["user"] + group = node["firezone"]["group"] command "chown -R #{user}:#{group} #{app_dir} && chmod -R o-rwx #{app_dir} && chmod -R g-rwx #{app_dir}" end -file 'environment-variables' do - path "#{node['firezone']['var_directory']}/etc/env" +file "environment-variables" do + path "#{node["firezone"]["var_directory"]}/etc/env" - attributes = node['firezone'].to_hash + attributes = node["firezone"].to_hash # Remove sensitive fields that aren't required for application startup - attributes.delete('wireguard_private_key') - attributes.delete('default_admin_password') + attributes.delete("wireguard_private_key") + attributes.delete("default_admin_password") # Add needed fields to top-level so they get added to application env and get # updated when config is updated. attributes.merge!( - 'force_ssl' => node['firezone']['nginx']['force_ssl'], - 'mix_env' => 'prod' + "force_ssl" => node["firezone"]["nginx"]["force_ssl"], + "mix_env" => "prod" ) content Firezone::Config.environment_variables_from(attributes) - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0600' + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0600" end -execute 'database schema' do +execute "database schema" do command 'bin/firezone eval "FzHttp.Release.migrate"' - cwd node['firezone']['app_directory'] - environment(Firezone::Config.app_env(node['firezone'])) - user node['firezone']['user'] + cwd node["firezone"]["app_directory"] + environment(Firezone::Config.app_env(node["firezone"])) + user node["firezone"]["user"] end diff --git a/omnibus/cookbooks/firezone/recipes/config.rb b/omnibus/cookbooks/firezone/recipes/config.rb index 581395007..b2451f21e 100644 --- a/omnibus/cookbooks/firezone/recipes/config.rb +++ b/omnibus/cookbooks/firezone/recipes/config.rb @@ -27,88 +27,88 @@ require "securerandom" # in it. Firezone::Config.load_or_create!( - "#{node['firezone']['config_directory']}/firezone.rb", + "#{node["firezone"]["config_directory"]}/firezone.rb", node ) Firezone::Config.load_from_json!( - "#{node['firezone']['config_directory']}/firezone.json", + "#{node["firezone"]["config_directory"]}/firezone.json", node ) Firezone::Config.load_or_create_secrets!( - "#{node['firezone']['config_directory']}/secrets.json", + "#{node["firezone"]["config_directory"]}/secrets.json", node ) # Generate new telemetry_id if doesn't exist unless /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node["firezone"]["telemetry_id"].to_s) - node.default['firezone']['telemetry_id'] = SecureRandom.uuid + node.default["firezone"]["telemetry_id"] = SecureRandom.uuid end -node.default['firezone']['wireguard_public_key'] = - `echo '#{node['firezone']['wireguard_private_key']}' | #{node['firezone']['install_directory']}/embedded/bin/wg pubkey`.chomp +node.default["firezone"]["wireguard_public_key"] = + `echo '#{node["firezone"]["wireguard_private_key"]}' | #{node["firezone"]["install_directory"]}/embedded/bin/wg pubkey`.chomp -Firezone::Config.audit_config(node['firezone']) +Firezone::Config.audit_config(node["firezone"]) Firezone::Config.maybe_turn_on_fips(node) # Copy things we need from the firezone namespace to the top level. This is # necessary for some community cookbooks. -node.consume_attributes('runit' => node['firezone']['runit']) +node.consume_attributes("runit" => node["firezone"]["runit"]) -user node['firezone']['user'] +user node["firezone"]["user"] -group node['firezone']['group'] do - members [node['firezone']['user']] +group node["firezone"]["group"] do + members [node["firezone"]["user"]] end -directory node['firezone']['config_directory'] do - owner node['firezone']['user'] - group node['firezone']['group'] +directory node["firezone"]["config_directory"] do + owner node["firezone"]["user"] + group node["firezone"]["group"] end -directory node['firezone']['var_directory'] do - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0700' +directory node["firezone"]["var_directory"] do + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0700" recursive true end -directory "#{node['firezone']['app_directory']}/tmp" do - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0700' +directory "#{node["firezone"]["app_directory"]}/tmp" do + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0700" recursive true end -directory node['firezone']['log_directory'] do - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0700' +directory node["firezone"]["log_directory"] do + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0700" recursive true end -directory "#{node['firezone']['var_directory']}/etc" do - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0700' +directory "#{node["firezone"]["var_directory"]}/etc" do + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0700" end file "configuration-variables" do - path "#{node['firezone']['config_directory']}/firezone.rb" - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0600' + path "#{node["firezone"]["config_directory"]}/firezone.rb" + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0600" end -file "#{node['firezone']['config_directory']}/secrets.json" do - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0600' +file "#{node["firezone"]["config_directory"]}/secrets.json" do + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0600" end -file "#{node['firezone']['var_directory']}/cache/wg_private_key" do - owner 'root' - group 'root' - mode '0600' - content node['firezone']['wireguard_private_key'] +file "#{node["firezone"]["var_directory"]}/cache/wg_private_key" do + owner "root" + group "root" + mode "0600" + content node["firezone"]["wireguard_private_key"] action :create_if_missing end diff --git a/omnibus/cookbooks/firezone/recipes/create_admin.rb b/omnibus/cookbooks/firezone/recipes/create_admin.rb index 7ced43dcf..a40b7107b 100644 --- a/omnibus/cookbooks/firezone/recipes/create_admin.rb +++ b/omnibus/cookbooks/firezone/recipes/create_admin.rb @@ -18,16 +18,16 @@ # limitations under the License. # -include_recipe 'firezone::config' +include_recipe "firezone::config" -execute 'create_admin' do +execute "create_admin" do command 'bin/firezone rpc "FzHttp.Release.create_admin_user"' - cwd node['firezone']['app_directory'] - environment(Firezone::Config.app_env(node['firezone'])) - user node['firezone']['user'] + cwd node["firezone"]["app_directory"] + environment(Firezone::Config.app_env(node["firezone"])) + user node["firezone"]["user"] end -log 'admin_created' do +log "admin_created" do msg = <<~MSG ================================================================================= @@ -35,8 +35,8 @@ log 'admin_created' do Use this to log into the Web UI. - Email: #{node['firezone']['admin_email']} - Password: #{node['firezone']['default_admin_password']} + Email: #{node["firezone"]["admin_email"]} + Password: #{node["firezone"]["default_admin_password"]} ================================================================================= MSG diff --git a/omnibus/cookbooks/firezone/recipes/database.rb b/omnibus/cookbooks/firezone/recipes/database.rb index 1de2db186..bb5b35501 100644 --- a/omnibus/cookbooks/firezone/recipes/database.rb +++ b/omnibus/cookbooks/firezone/recipes/database.rb @@ -30,24 +30,24 @@ ENV["PGPORT"] = node["firezone"]["database"]["port"].to_s ENV["PGUSER"] = node["firezone"]["database"]["user"] ENV["PGPASSWORD"] = node["firezone"]["database"]["password"] -enterprise_pg_user node['firezone']['database']['user'] do +enterprise_pg_user node["firezone"]["database"]["user"] do superuser true - password node['firezone']['database']['password'] || '' + password node["firezone"]["database"]["password"] || "" # If the database user is the same as the main postgres user, don't create it. not_if do - node['firezone']['database']['user'] == - node['firezone']['postgresql']['username'] + node["firezone"]["database"]["user"] == + node["firezone"]["postgresql"]["username"] end end -enterprise_pg_database node['firezone']['database']['name'] do - owner node['firezone']['database']['user'] +enterprise_pg_database node["firezone"]["database"]["name"] do + owner node["firezone"]["database"]["user"] end -node['firezone']['database']['extensions'].each do |ext, _enable| +node["firezone"]["database"]["extensions"].each do |ext, _enable| execute "create postgresql #{ext} extension" do - user node['firezone']['database']['user'] + user node["firezone"]["database"]["user"] command "echo 'CREATE EXTENSION IF NOT EXISTS #{ext}' | psql" - not_if "echo '\\dx' | psql #{node['firezone']['database']['name']} | grep #{ext}" + not_if "echo '\\dx' | psql #{node["firezone"]["database"]["name"]} | grep #{ext}" end end diff --git a/omnibus/cookbooks/firezone/recipes/default.rb b/omnibus/cookbooks/firezone/recipes/default.rb index 293b21281..f81740dbd 100644 --- a/omnibus/cookbooks/firezone/recipes/default.rb +++ b/omnibus/cookbooks/firezone/recipes/default.rb @@ -17,16 +17,16 @@ include_recipe "firezone::database" include_recipe "firezone::app" # Write out a firezone-running.json at the end of the run -file "#{node['firezone']['config_directory']}/firezone-running.json" do - content Chef::JSONCompat.to_json_pretty('firezone' => node['firezone']) - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0600' +file "#{node["firezone"]["config_directory"]}/firezone-running.json" do + content Chef::JSONCompat.to_json_pretty("firezone" => node["firezone"]) + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0600" end -file "#{node['firezone']['var_directory']}/.license.accepted" do +file "#{node["firezone"]["var_directory"]}/.license.accepted" do content "" - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0600' + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0600" end diff --git a/omnibus/cookbooks/firezone/recipes/log_management.rb b/omnibus/cookbooks/firezone/recipes/log_management.rb index d1192f5ae..738c9573a 100644 --- a/omnibus/cookbooks/firezone/recipes/log_management.rb +++ b/omnibus/cookbooks/firezone/recipes/log_management.rb @@ -22,31 +22,31 @@ # components do not handle logging to STDOUT well, so logrotate is added # to manage the logs generated by those services. -include_recipe 'firezone::config' +include_recipe "firezone::config" -directory "#{node['firezone']['var_directory']}/etc/logrotate.d" do - owner 'root' - group 'root' - mode '0755' +directory "#{node["firezone"]["var_directory"]}/etc/logrotate.d" do + owner "root" + group "root" + mode "0755" end -template "#{node['firezone']['var_directory']}/etc/logrotate.conf" do - source 'logrotate.conf.erb' - mode '0644' - owner 'root' - group 'root' +template "#{node["firezone"]["var_directory"]}/etc/logrotate.conf" do + source "logrotate.conf.erb" + mode "0644" + owner "root" + group "root" variables( - var_directory: node['firezone']['var_directory'] + var_directory: node["firezone"]["var_directory"] ) end -template '/etc/cron.hourly/firezone_logrotate' do - source 'logrotate.cron.erb' - mode '0755' - owner 'root' - group 'root' +template "/etc/cron.hourly/firezone_logrotate" do + source "logrotate.cron.erb" + mode "0755" + owner "root" + group "root" variables( - install_directory: node['firezone']['install_directory'], - var_directory: node['firezone']['var_directory'] + install_directory: node["firezone"]["install_directory"], + var_directory: node["firezone"]["var_directory"] ) end diff --git a/omnibus/cookbooks/firezone/recipes/network.rb b/omnibus/cookbooks/firezone/recipes/network.rb index cdd34eba2..7ef678ef6 100644 --- a/omnibus/cookbooks/firezone/recipes/network.rb +++ b/omnibus/cookbooks/firezone/recipes/network.rb @@ -11,13 +11,13 @@ # This recipe basically performs the work of wg-quick without having to # have a configuration file. -include_recipe 'firezone::config' -include_recipe 'line::default' +include_recipe "firezone::config" +include_recipe "line::default" -require 'mixlib/shellout' +require "mixlib/shellout" # Use ip route for finding default egress interface -awk_path = "#{node['firezone']['install_directory']}/embedded/bin/awk" +awk_path = "#{node["firezone"]["install_directory"]}/embedded/bin/awk" egress_int_cmd = Mixlib::ShellOut.new("ip route show default 0.0.0.0/0 | grep -oP '(?<=dev ).*' | cut -f1 -d' '") egress_interface = egress_int_cmd.run_command.stdout.chomp # Set default endpoint ip to default egress ip @@ -25,18 +25,18 @@ egress_addr_cmd = "ip address show dev #{egress_interface} | grep 'inet ' | #{aw egress_ip = Mixlib::ShellOut.new(egress_addr_cmd) egress_ip.run_command -node.default['firezone']['wireguard']['endpoint'] ||= egress_ip.stdout.chomp.gsub(%r{/.*}, '') -node.default['firezone']['egress_interface'] = egress_interface +node.default["firezone"]["wireguard"]["endpoint"] ||= egress_ip.stdout.chomp.gsub(%r{/.*}, "") +node.default["firezone"]["egress_interface"] = egress_interface replace_or_add "IPv4 packet forwarding" do path "/etc/sysctl.conf" - pattern /^\s+#\s+net.ipv4.ip_forward\s+=\s+1/ + pattern(/^\s+#\s+net.ipv4.ip_forward\s+=\s+1/) line "net.ipv4.ip_forward=1" end replace_or_add "IPv6 packet forwarding" do path "/etc/sysctl.conf" - pattern /^\s+#\s+net.ipv6.conf.all.forwarding\s+=\s+1/ + pattern(/^\s+#\s+net.ipv6.conf.all.forwarding\s+=\s+1/) line "net.ipv6.conf.all.forwarding=1" end diff --git a/omnibus/cookbooks/firezone/recipes/nginx.rb b/omnibus/cookbooks/firezone/recipes/nginx.rb index 1afe3142c..c0d5da1cd 100644 --- a/omnibus/cookbooks/firezone/recipes/nginx.rb +++ b/omnibus/cookbooks/firezone/recipes/nginx.rb @@ -17,60 +17,60 @@ # limitations under the License. # -include_recipe 'firezone::config' +include_recipe "firezone::config" -[node['firezone']['nginx']['cache']['directory'], - node['firezone']['nginx']['log_directory'], - node['firezone']['nginx']['directory'], - "#{node['firezone']['nginx']['directory']}/conf.d", - "#{node['firezone']['nginx']['directory']}/sites-enabled"].each do |dir| +[node["firezone"]["nginx"]["cache"]["directory"], + node["firezone"]["nginx"]["log_directory"], + node["firezone"]["nginx"]["directory"], + "#{node["firezone"]["nginx"]["directory"]}/conf.d", + "#{node["firezone"]["nginx"]["directory"]}/sites-enabled"].each do |dir| directory dir do - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0700' + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0700" recursive true end end # Link the mime.types -link "#{node['firezone']['nginx']['directory']}/mime.types" do - to "#{node['firezone']['install_directory']}/embedded/conf/mime.types" +link "#{node["firezone"]["nginx"]["directory"]}/mime.types" do + to "#{node["firezone"]["install_directory"]}/embedded/conf/mime.types" end -template 'nginx.conf' do - path "#{node['firezone']['nginx']['directory']}/nginx.conf" - source 'nginx.conf.erb' - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0600' - variables(nginx: node['firezone']['nginx']) +template "nginx.conf" do + path "#{node["firezone"]["nginx"]["directory"]}/nginx.conf" + source "nginx.conf.erb" + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0600" + variables(nginx: node["firezone"]["nginx"]) end -if node['firezone']['nginx']['enabled'] - component_runit_service 'nginx' do - package 'firezone' +if node["firezone"]["nginx"]["enabled"] + component_runit_service "nginx" do + package "firezone" action :enable - subscribes :restart, 'template[nginx.conf]' - subscribes :restart, 'template[phoenix.nginx.conf]' + subscribes :restart, "template[nginx.conf]" + subscribes :restart, "template[phoenix.nginx.conf]" end else - runit_service 'nginx' do + runit_service "nginx" do action :disable end end # setup log rotation with logrotate because nginx and runit's svlogd # differ in opinion about who does the logging -template "#{node['firezone']['var_directory']}/etc/logrotate.d/nginx" do - source 'logrotate-rule.erb' - owner 'root' - group 'root' - mode '0644' +template "#{node["firezone"]["var_directory"]}/etc/logrotate.d/nginx" do + source "logrotate-rule.erb" + owner "root" + group "root" + mode "0644" variables( - 'log_directory' => node['firezone']['nginx']['log_directory'], - 'log_rotation' => node['firezone']['nginx']['log_rotation'], - 'postrotate' => "#{node['firezone']['install_directory']}/embedded/sbin/nginx -c #{node['firezone']['nginx']['directory']}/nginx.conf -s reopen", - 'owner' => 'root', - 'group' => 'root' + "log_directory" => node["firezone"]["nginx"]["log_directory"], + "log_rotation" => node["firezone"]["nginx"]["log_rotation"], + "postrotate" => "#{node["firezone"]["install_directory"]}/embedded/sbin/nginx -c #{node["firezone"]["nginx"]["directory"]}/nginx.conf -s reopen", + "owner" => "root", + "group" => "root" ) end diff --git a/omnibus/cookbooks/firezone/recipes/phoenix.rb b/omnibus/cookbooks/firezone/recipes/phoenix.rb index 8edd2e927..955c386bf 100644 --- a/omnibus/cookbooks/firezone/recipes/phoenix.rb +++ b/omnibus/cookbooks/firezone/recipes/phoenix.rb @@ -21,49 +21,49 @@ # Common configuration for Phoenix -include_recipe 'firezone::config' -include_recipe 'firezone::nginx' -include_recipe 'firezone::wireguard' +include_recipe "firezone::config" +include_recipe "firezone::nginx" +include_recipe "firezone::wireguard" -[node['firezone']['phoenix']['log_directory'], - "#{node['firezone']['var_directory']}/phoenix/run"].each do |dir| +[node["firezone"]["phoenix"]["log_directory"], + "#{node["firezone"]["var_directory"]}/phoenix/run"].each do |dir| directory dir do - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0700' + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0700" recursive true end end -template 'phoenix.nginx.conf' do - path "#{node['firezone']['nginx']['directory']}/sites-enabled/phoenix" - source 'phoenix.nginx.conf.erb' - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0600' - variables(nginx: node['firezone']['nginx'], - phoenix: node['firezone']['phoenix'], - fqdn: node['firezone']['fqdn'], - fips_enabled: node['firezone']['fips_enabled'], - ssl: node['firezone']['ssl'], - app_directory: node['firezone']['app_directory']) +template "phoenix.nginx.conf" do + path "#{node["firezone"]["nginx"]["directory"]}/sites-enabled/phoenix" + source "phoenix.nginx.conf.erb" + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0600" + variables(nginx: node["firezone"]["nginx"], + phoenix: node["firezone"]["phoenix"], + fqdn: node["firezone"]["fqdn"], + fips_enabled: node["firezone"]["fips_enabled"], + ssl: node["firezone"]["ssl"], + app_directory: node["firezone"]["app_directory"]) end -if node['firezone']['phoenix']['enabled'] - component_runit_service 'phoenix' do +if node["firezone"]["phoenix"]["enabled"] + component_runit_service "phoenix" do runit_attributes( - env: Firezone::Config.app_env(node['firezone']), + env: Firezone::Config.app_env(node["firezone"]), finish: true ) - package 'firezone' - control ['t'] + package "firezone" + control ["t"] action :enable - subscribes :restart, 'file[environment-variables]' - subscribes :restart, 'file[disable-telemetry]' - subscribes :restart, 'file[telemetry-id]' + subscribes :restart, "file[environment-variables]" + subscribes :restart, "file[disable-telemetry]" + subscribes :restart, "file[telemetry-id]" end else - runit_service 'phoenix' do + runit_service "phoenix" do action :disable end end diff --git a/omnibus/cookbooks/firezone/recipes/postgresql.rb b/omnibus/cookbooks/firezone/recipes/postgresql.rb index 21be3c248..9b0cac7b9 100644 --- a/omnibus/cookbooks/firezone/recipes/postgresql.rb +++ b/omnibus/cookbooks/firezone/recipes/postgresql.rb @@ -17,38 +17,38 @@ # limitations under the License. # -include_recipe 'firezone::config' -include_recipe 'enterprise::runit' +include_recipe "firezone::config" +include_recipe "enterprise::runit" # These sysctl settings make the shared memory settings work for larger # instances %w[shmmax shmall].each do |param| sysctl "kernel.#{param}" do - value node['firezone']['postgresql'][param] + value node["firezone"]["postgresql"][param] end end -directory node['firezone']['postgresql']['log_directory'] do - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0700' +directory node["firezone"]["postgresql"]["log_directory"] do + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0700" recursive true end -if node['firezone']['postgresql']['enabled'] - enterprise_pg_cluster 'firezone' do - data_dir node['firezone']['postgresql']['data_directory'] - encoding 'UTF8' +if node["firezone"]["postgresql"]["enabled"] + enterprise_pg_cluster "firezone" do + data_dir node["firezone"]["postgresql"]["data_directory"] + encoding "UTF8" end - component_runit_service 'postgresql' do - package 'firezone' - control ['t'] + component_runit_service "postgresql" do + package "firezone" + control ["t"] action :enable - subscribes :restart, 'enterprise_pg_cluster[firezone]' + subscribes :restart, "enterprise_pg_cluster[firezone]" end else - runit_service 'postgresql' do + runit_service "postgresql" do action :disable end end diff --git a/omnibus/cookbooks/firezone/recipes/setcap.rb b/omnibus/cookbooks/firezone/recipes/setcap.rb index 8926bc717..62f6c3f5a 100644 --- a/omnibus/cookbooks/firezone/recipes/setcap.rb +++ b/omnibus/cookbooks/firezone/recipes/setcap.rb @@ -8,33 +8,33 @@ # Set capabilities for executables so they can be run without # root privileges. -include_recipe 'firezone::config' +include_recipe "firezone::config" -nft_path = "#{node['firezone']['install_directory']}/embedded/sbin/nft" -wg_path = "#{node['firezone']['install_directory']}/embedded/bin/wg" +nft_path = "#{node["firezone"]["install_directory"]}/embedded/sbin/nft" +wg_path = "#{node["firezone"]["install_directory"]}/embedded/bin/wg" file nft_path do # Ensure phoenix app can control nftables - mode '0700' - owner node['firezone']['user'] - group node['firezone']['group'] + mode "0700" + owner node["firezone"]["user"] + group node["firezone"]["group"] action :touch end file wg_path do # Ensure phoenix app can control WireGuard interface - mode '0700' - owner node['firezone']['user'] - group node['firezone']['group'] + mode "0700" + owner node["firezone"]["user"] + group node["firezone"]["group"] action :touch end # setcap must be performed after the file resource above otherwise # it gets reset -execute 'setcap_nft' do +execute "setcap_nft" do command "setcap 'cap_net_admin,cap_net_raw+eip' #{nft_path}" end -execute 'setcap_wg' do +execute "setcap_wg" do command "setcap 'cap_net_admin,cap_net_raw,cap_dac_read_search+eip' #{wg_path}" end diff --git a/omnibus/cookbooks/firezone/recipes/show_config.rb b/omnibus/cookbooks/firezone/recipes/show_config.rb index f1312327c..6d9a3e960 100644 --- a/omnibus/cookbooks/firezone/recipes/show_config.rb +++ b/omnibus/cookbooks/firezone/recipes/show_config.rb @@ -17,4 +17,4 @@ # limitations under the License. # -puts Chef::JSONCompat.to_json_pretty(node['firezone']) +puts Chef::JSONCompat.to_json_pretty(node["firezone"]) diff --git a/omnibus/cookbooks/firezone/recipes/ssl.rb b/omnibus/cookbooks/firezone/recipes/ssl.rb index fbb3e2371..ec5dfd86f 100644 --- a/omnibus/cookbooks/firezone/recipes/ssl.rb +++ b/omnibus/cookbooks/firezone/recipes/ssl.rb @@ -17,62 +17,62 @@ # limitations under the License. # -include_recipe 'firezone::config' +include_recipe "firezone::config" -[node['firezone']['ssl']['directory'], - "#{node['firezone']['ssl']['directory']}/ca"].each do |dir| +[node["firezone"]["ssl"]["directory"], + "#{node["firezone"]["ssl"]["directory"]}/ca"].each do |dir| directory dir do - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0700' + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0700" end end # Unless SSL is disabled, sets up SSL certificates. # Creates a self-signed cert if none is provided. -if node['firezone']['ssl']['enabled'] - firezone_ca_dir = File.join(node['firezone']['ssl']['directory'], 'ca') - ssl_dhparam = File.join(firezone_ca_dir, 'dhparams.pem') +if node["firezone"]["ssl"]["enabled"] + firezone_ca_dir = File.join(node["firezone"]["ssl"]["directory"], "ca") + ssl_dhparam = File.join(firezone_ca_dir, "dhparams.pem") # Generate dhparams.pem for perfect forward secrecy openssl_dhparam ssl_dhparam do key_length 2048 generator 2 - owner 'root' - group 'root' - mode '0644' + owner "root" + group "root" + mode "0644" end - node.default['firezone']['ssl']['ssl_dhparam'] ||= ssl_dhparam + node.default["firezone"]["ssl"]["ssl_dhparam"] ||= ssl_dhparam # A certificate has been supplied - if node['firezone']['ssl']['certificate'] + if node["firezone"]["ssl"]["certificate"] # Link the standard CA cert into our certs directory - link "#{node['firezone']['ssl']['directory']}/cacert.pem" do - to "#{node['firezone']['install_directory']}/embedded/ssl/certs/cacert.pem" + link "#{node["firezone"]["ssl"]["directory"]}/cacert.pem" do + to "#{node["firezone"]["install_directory"]}/embedded/ssl/certs/cacert.pem" end # No certificate has been supplied; generate one else - ssl_keyfile = File.join(firezone_ca_dir, "#{node['firezone']['fqdn']}.key") - ssl_crtfile = File.join(firezone_ca_dir, "#{node['firezone']['fqdn']}.crt") + ssl_keyfile = File.join(firezone_ca_dir, "#{node["firezone"]["fqdn"]}.key") + ssl_crtfile = File.join(firezone_ca_dir, "#{node["firezone"]["fqdn"]}.crt") openssl_x509_certificate ssl_crtfile do - common_name node['firezone']['fqdn'] - org node['firezone']['ssl']['company_name'] - org_unit node['firezone']['ssl']['organizational_unit_name'] - country node['firezone']['ssl']['country_name'] + common_name node["firezone"]["fqdn"] + org node["firezone"]["ssl"]["company_name"] + org_unit node["firezone"]["ssl"]["organizational_unit_name"] + country node["firezone"]["ssl"]["country_name"] key_length 2048 expire 3650 - owner 'root' - group 'root' - mode '0644' + owner "root" + group "root" + mode "0644" end - node.default['firezone']['ssl']['certificate'] ||= ssl_crtfile - node.default['firezone']['ssl']['certificate_key'] ||= ssl_keyfile + node.default["firezone"]["ssl"]["certificate"] ||= ssl_crtfile + node.default["firezone"]["ssl"]["certificate_key"] ||= ssl_keyfile - link "#{node['firezone']['ssl']['directory']}/cacert.pem" do + link "#{node["firezone"]["ssl"]["directory"]}/cacert.pem" do to ssl_crtfile end end diff --git a/omnibus/cookbooks/firezone/recipes/teardown.rb b/omnibus/cookbooks/firezone/recipes/teardown.rb index fd78ec6c6..48b470fbc 100644 --- a/omnibus/cookbooks/firezone/recipes/teardown.rb +++ b/omnibus/cookbooks/firezone/recipes/teardown.rb @@ -7,18 +7,18 @@ # Teardown all the network settings. Used during uninstall. -include_recipe 'firezone::config' +include_recipe "firezone::config" -require 'mixlib/shellout' +require "mixlib/shellout" -wg_interface = node['firezone']['wireguard']['interface_name'] -nft_path = "#{node['firezone']['install_directory']}/embedded/sbin/nft" +wg_interface = node["firezone"]["wireguard"]["interface_name"] +nft_path = "#{node["firezone"]["install_directory"]}/embedded/sbin/nft" # Delete wireguard interface if exists wg_exists = Mixlib::ShellOut.new("ip link show dev #{wg_interface}") wg_exists.run_command if wg_exists.status.exitstatus.zero? - execute 'delete_wireguard_interface' do + execute "delete_wireguard_interface" do command "ip link delete dev #{wg_interface}" end end @@ -27,7 +27,7 @@ end table_exists_cmd = Mixlib::ShellOut.new("#{nft_path} list table inet firezone") table_exists_cmd.run_command if table_exists_cmd.status.exitstatus.zero? - execute 'delete_firewall_table' do + execute "delete_firewall_table" do command "#{nft_path} delete table inet firezone" end end diff --git a/omnibus/cookbooks/firezone/recipes/telemetry.rb b/omnibus/cookbooks/firezone/recipes/telemetry.rb index 0d5d0607c..c7549e4ec 100644 --- a/omnibus/cookbooks/firezone/recipes/telemetry.rb +++ b/omnibus/cookbooks/firezone/recipes/telemetry.rb @@ -9,19 +9,19 @@ require "securerandom" # Configure telemetry app-wide. -include_recipe 'firezone::config' +include_recipe "firezone::config" -disable_telemetry_path = "#{node['firezone']['var_directory']}/.disable_telemetry" +disable_telemetry_path = "#{node["firezone"]["var_directory"]}/.disable_telemetry" -if node['firezone']['telemetry']['enabled'] == false - file 'disable_telemetry' do +if node["firezone"]["telemetry"]["enabled"] == false + file "disable_telemetry" do path disable_telemetry_path - mode '0644' - user node['firezone']['user'] - group node['firezone']['group'] + mode "0644" + user node["firezone"]["user"] + group node["firezone"]["group"] end else - file 'disable_telemetry' do + file "disable_telemetry" do path disable_telemetry_path action :delete end diff --git a/omnibus/cookbooks/firezone/recipes/wireguard.rb b/omnibus/cookbooks/firezone/recipes/wireguard.rb index 9884989c1..6811496fb 100644 --- a/omnibus/cookbooks/firezone/recipes/wireguard.rb +++ b/omnibus/cookbooks/firezone/recipes/wireguard.rb @@ -7,23 +7,23 @@ # Sets up service to manage WireGuard interface -include_recipe 'firezone::config' +include_recipe "firezone::config" -directory node['firezone']['wireguard']['log_directory'] do - owner node['firezone']['user'] - group node['firezone']['group'] - mode '0700' +directory node["firezone"]["wireguard"]["log_directory"] do + owner node["firezone"]["user"] + group node["firezone"]["group"] + mode "0700" recursive true end -if node['firezone']['wireguard']['enabled'] - component_runit_service 'wireguard' do - package 'firezone' +if node["firezone"]["wireguard"]["enabled"] + component_runit_service "wireguard" do + package "firezone" action :enable - subscribes :restart, 'template[sv-wireguard-run]' + subscribes :restart, "template[sv-wireguard-run]" end else - runit_service 'wireguard' do + runit_service "wireguard" do action :disable end end diff --git a/omnibus/cookbooks/firezone/test/integration/default/default_test.rb b/omnibus/cookbooks/firezone/test/integration/default/default_test.rb index 20844306d..5d3a146fe 100644 --- a/omnibus/cookbooks/firezone/test/integration/default/default_test.rb +++ b/omnibus/cookbooks/firezone/test/integration/default/default_test.rb @@ -5,7 +5,7 @@ unless os.windows? # This is an example test, replace with your own test. - describe user('root'), :skip do + describe user("root"), :skip do it { should exist } end end diff --git a/omnibus/omnibus.rb b/omnibus/omnibus.rb index 9fddf4b00..051b2413a 100644 --- a/omnibus/omnibus.rb +++ b/omnibus/omnibus.rb @@ -59,5 +59,8 @@ append_timestamp false # Windows architecture defaults # ------------------------------ -windows_arch %w[x86 x64].include?((ENV["OMNIBUS_WINDOWS_ARCH"] || "").downcase) ? - ENV["OMNIBUS_WINDOWS_ARCH"].downcase.to_sym : :x86 +windows_arch if %w[x86 x64].include?((ENV["OMNIBUS_WINDOWS_ARCH"] || "").downcase) + ENV["OMNIBUS_WINDOWS_ARCH"].downcase.to_sym +else + :x86 +end From 3c0b64bcc9ee91bdaf95e4ef2da8dcea7f7a51a4 Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 14:25:15 -0800 Subject: [PATCH 14/17] Fix more rubocop issues --- docs/Gemfile | 2 ++ omnibus/Berksfile | 2 ++ omnibus/config/software/autoconf.rb | 2 ++ omnibus/config/software/automake.rb | 2 ++ omnibus/config/software/bzip2.rb | 2 ++ omnibus/config/software/cacerts.rb | 2 ++ omnibus/config/software/config_guess.rb | 2 ++ omnibus/config/software/erlang.rb | 2 ++ omnibus/config/software/firezone-cookbooks.rb | 4 +++- omnibus/config/software/firezone-ctl.rb | 2 ++ omnibus/config/software/firezone-scripts.rb | 2 ++ omnibus/config/software/gmp.rb | 2 ++ omnibus/config/software/icu.rb | 2 ++ omnibus/config/software/libedit.rb | 2 ++ omnibus/config/software/libffi.rb | 2 ++ omnibus/config/software/libiconv.rb | 2 ++ omnibus/config/software/liblzma.rb | 2 ++ omnibus/config/software/libossp-uuid.rb | 2 ++ omnibus/config/software/libtool.rb | 2 ++ omnibus/config/software/libxml2.rb | 2 ++ omnibus/config/software/libyaml.rb | 2 ++ omnibus/config/software/m4.rb | 2 ++ omnibus/config/software/nodejs.rb | 2 ++ omnibus/config/software/openssl.rb | 2 ++ omnibus/config/software/pcre.rb | 2 ++ omnibus/config/software/perl-thread-queue.rb | 2 ++ omnibus/config/software/perl.rb | 2 ++ omnibus/config/software/pkg-config.rb | 2 ++ omnibus/config/software/ruby.rb | 2 ++ omnibus/config/software/rubygems.rb | 4 +++- omnibus/config/software/runit.rb | 2 +- omnibus/config/software/zlib.rb | 2 ++ omnibus/cookbooks/firezone/Berksfile | 2 ++ omnibus/cookbooks/firezone/Gemfile | 2 ++ omnibus/cookbooks/firezone/Policyfile.rb | 2 ++ omnibus/cookbooks/firezone/attributes/default.rb | 2 ++ .../cookbooks/firezone/files/default/ctl-commands/version.rb | 2 ++ omnibus/cookbooks/firezone/libraries/config.rb | 4 +++- omnibus/cookbooks/firezone/metadata.rb | 2 ++ omnibus/cookbooks/firezone/recipes/log_management.rb | 2 ++ omnibus/cookbooks/firezone/recipes/nginx.rb | 2 ++ omnibus/cookbooks/firezone/recipes/postgresql.rb | 2 ++ omnibus/cookbooks/firezone/recipes/show_config.rb | 2 ++ omnibus/cookbooks/firezone/recipes/ssl.rb | 2 ++ .../firezone/test/integration/default/default_test.rb | 2 ++ 45 files changed, 92 insertions(+), 4 deletions(-) diff --git a/docs/Gemfile b/docs/Gemfile index 0ebe67463..a0a917436 100644 --- a/docs/Gemfile +++ b/docs/Gemfile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + source "https://rubygems.org" # Hello! This is where you manage which Jekyll version is used to run. # When you want to use a different version, change it below, save the diff --git a/omnibus/Berksfile b/omnibus/Berksfile index bf3ceaf9c..cb0abfd01 100644 --- a/omnibus/Berksfile +++ b/omnibus/Berksfile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + source "https://supermarket.chef.io" cookbook "omnibus" diff --git a/omnibus/config/software/autoconf.rb b/omnibus/config/software/autoconf.rb index a472d8353..473e7358d 100644 --- a/omnibus/config/software/autoconf.rb +++ b/omnibus/config/software/autoconf.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Chef Software, Inc. # diff --git a/omnibus/config/software/automake.rb b/omnibus/config/software/automake.rb index 0c2c53758..ffc804166 100644 --- a/omnibus/config/software/automake.rb +++ b/omnibus/config/software/automake.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2012-2014 Chef Software, Inc. # diff --git a/omnibus/config/software/bzip2.rb b/omnibus/config/software/bzip2.rb index b23ed30f8..8366fa02b 100644 --- a/omnibus/config/software/bzip2.rb +++ b/omnibus/config/software/bzip2.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2013-2018 Chef Software, Inc. # diff --git a/omnibus/config/software/cacerts.rb b/omnibus/config/software/cacerts.rb index c8acce05b..0122b1035 100644 --- a/omnibus/config/software/cacerts.rb +++ b/omnibus/config/software/cacerts.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Chef Software, Inc. # diff --git a/omnibus/config/software/config_guess.rb b/omnibus/config/software/config_guess.rb index dfbc39053..ed9b8be3a 100644 --- a/omnibus/config/software/config_guess.rb +++ b/omnibus/config/software/config_guess.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2015 Chef Software, Inc. # diff --git a/omnibus/config/software/erlang.rb b/omnibus/config/software/erlang.rb index 25e641b6e..53b2cc5ee 100644 --- a/omnibus/config/software/erlang.rb +++ b/omnibus/config/software/erlang.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Chef Software, Inc. # Copyright:: Firezone diff --git a/omnibus/config/software/firezone-cookbooks.rb b/omnibus/config/software/firezone-cookbooks.rb index 7920ef81d..92b0ae7d3 100644 --- a/omnibus/config/software/firezone-cookbooks.rb +++ b/omnibus/config/software/firezone-cookbooks.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2014 Chef Software, Inc. # @@ -27,7 +29,7 @@ build do block do all_the_gem_deps = {} - Dir.glob(cookbooks_path + "/**/metadata.json").each do |metadata| + Dir.glob("#{cookbooks_path}/**/metadata.json").each do |metadata| cookbook_name = File.basename(File.dirname(metadata)) metadata_json = FFI_Yajl::Parser.parse(File.read(metadata)) gem_deps = metadata_json.fetch("gems", []) diff --git a/omnibus/config/software/firezone-ctl.rb b/omnibus/config/software/firezone-ctl.rb index 3fd060874..87412c4be 100644 --- a/omnibus/config/software/firezone-ctl.rb +++ b/omnibus/config/software/firezone-ctl.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2014 Chef Software, Inc. # diff --git a/omnibus/config/software/firezone-scripts.rb b/omnibus/config/software/firezone-scripts.rb index 6a040efa9..b7b900d40 100644 --- a/omnibus/config/software/firezone-scripts.rb +++ b/omnibus/config/software/firezone-scripts.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Copyright (c) 2015 GitLab B.V. # Copyright:: Copyright (c) 2021 Firezone diff --git a/omnibus/config/software/gmp.rb b/omnibus/config/software/gmp.rb index 7bd5256fd..e17fd0f99 100644 --- a/omnibus/config/software/gmp.rb +++ b/omnibus/config/software/gmp.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2014 Chef Software, Inc. # diff --git a/omnibus/config/software/icu.rb b/omnibus/config/software/icu.rb index 8711c2687..c9b5c9cf4 100644 --- a/omnibus/config/software/icu.rb +++ b/omnibus/config/software/icu.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + name "icu" license_file "LICENSE" skip_transitive_dependency_licensing true diff --git a/omnibus/config/software/libedit.rb b/omnibus/config/software/libedit.rb index 7a754e234..e9e876359 100644 --- a/omnibus/config/software/libedit.rb +++ b/omnibus/config/software/libedit.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Copyright 2012-2014 Chef Software, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/omnibus/config/software/libffi.rb b/omnibus/config/software/libffi.rb index 74055f575..1a88bda47 100644 --- a/omnibus/config/software/libffi.rb +++ b/omnibus/config/software/libffi.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Chef Software, Inc. # diff --git a/omnibus/config/software/libiconv.rb b/omnibus/config/software/libiconv.rb index 9cd425ca9..7029c74a9 100644 --- a/omnibus/config/software/libiconv.rb +++ b/omnibus/config/software/libiconv.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Chef Software, Inc. # diff --git a/omnibus/config/software/liblzma.rb b/omnibus/config/software/liblzma.rb index b1188826a..99761af94 100644 --- a/omnibus/config/software/liblzma.rb +++ b/omnibus/config/software/liblzma.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2014-2018 Chef Software, Inc. # diff --git a/omnibus/config/software/libossp-uuid.rb b/omnibus/config/software/libossp-uuid.rb index 0365f4629..9961e0544 100644 --- a/omnibus/config/software/libossp-uuid.rb +++ b/omnibus/config/software/libossp-uuid.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2012-2014 Chef Software, Inc. # diff --git a/omnibus/config/software/libtool.rb b/omnibus/config/software/libtool.rb index 5fbc77a54..f9d7d6e03 100644 --- a/omnibus/config/software/libtool.rb +++ b/omnibus/config/software/libtool.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Chef Software, Inc. # diff --git a/omnibus/config/software/libxml2.rb b/omnibus/config/software/libxml2.rb index 1c632e9e6..c113b0b16 100644 --- a/omnibus/config/software/libxml2.rb +++ b/omnibus/config/software/libxml2.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Chef Software Inc. # diff --git a/omnibus/config/software/libyaml.rb b/omnibus/config/software/libyaml.rb index 81b4a44e4..81f8a62ce 100644 --- a/omnibus/config/software/libyaml.rb +++ b/omnibus/config/software/libyaml.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2012-2015 Chef Software, Inc. # diff --git a/omnibus/config/software/m4.rb b/omnibus/config/software/m4.rb index 8495b4dbe..344a51663 100644 --- a/omnibus/config/software/m4.rb +++ b/omnibus/config/software/m4.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Chef Software, Inc. # diff --git a/omnibus/config/software/nodejs.rb b/omnibus/config/software/nodejs.rb index 2ccdf8e6e..8ee32d24f 100644 --- a/omnibus/config/software/nodejs.rb +++ b/omnibus/config/software/nodejs.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + name "nodejs" description "NodeJS" default_version "14.18.3" diff --git a/omnibus/config/software/openssl.rb b/omnibus/config/software/openssl.rb index 12d55e43d..a2f6368dd 100644 --- a/omnibus/config/software/openssl.rb +++ b/omnibus/config/software/openssl.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Chef Software Inc. # diff --git a/omnibus/config/software/pcre.rb b/omnibus/config/software/pcre.rb index c62f6a596..7eb6145dc 100644 --- a/omnibus/config/software/pcre.rb +++ b/omnibus/config/software/pcre.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Chef Software, Inc. # diff --git a/omnibus/config/software/perl-thread-queue.rb b/omnibus/config/software/perl-thread-queue.rb index bd5461084..2c608f223 100644 --- a/omnibus/config/software/perl-thread-queue.rb +++ b/omnibus/config/software/perl-thread-queue.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2019 Oregon State University # diff --git a/omnibus/config/software/perl.rb b/omnibus/config/software/perl.rb index 4eb1611c9..7cedfd921 100644 --- a/omnibus/config/software/perl.rb +++ b/omnibus/config/software/perl.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Chef Software, Inc. # diff --git a/omnibus/config/software/pkg-config.rb b/omnibus/config/software/pkg-config.rb index cb19dbf72..8b6fee392 100644 --- a/omnibus/config/software/pkg-config.rb +++ b/omnibus/config/software/pkg-config.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2013-2014 Chef Software, Inc. # diff --git a/omnibus/config/software/ruby.rb b/omnibus/config/software/ruby.rb index 61ce0b5bb..c20602941 100644 --- a/omnibus/config/software/ruby.rb +++ b/omnibus/config/software/ruby.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2012-2016 Chef Software, Inc. # diff --git a/omnibus/config/software/rubygems.rb b/omnibus/config/software/rubygems.rb index 89abbab58..320df397b 100644 --- a/omnibus/config/software/rubygems.rb +++ b/omnibus/config/software/rubygems.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2012-2016 Chef Software, Inc. # @@ -69,7 +71,7 @@ if version && !source end # git repo is always expanded to "rubygems" -relative_path "rubygems" if source && source.include?(:git) +relative_path "rubygems" if source&.include?(:git) build do env = with_standard_compiler_flags(with_embedded_path) diff --git a/omnibus/config/software/runit.rb b/omnibus/config/software/runit.rb index e9123d623..abd18ef89 100644 --- a/omnibus/config/software/runit.rb +++ b/omnibus/config/software/runit.rb @@ -40,7 +40,7 @@ build do env = with_standard_compiler_flags(with_embedded_path) # Put runit where we want it, not where they tell us to - command 'sed -i -e "s/^char\ \*varservice\ \=\"\/service\/\";$/char\ \*varservice\ \=\"' + install_dir.gsub("/", '\\/') + '\/service\/\";/" sv.c', + command "sed -i -e \"s/^char\\ \\*varservice\\ \\=\\\"\\/service\\/\\\";$/char\\ \\*varservice\\ \\=\\\"#{install_dir.gsub("/", '\\/')}\\/service\\/\\\";/\" sv.c", env: env # TODO: the following is not idempotent diff --git a/omnibus/config/software/zlib.rb b/omnibus/config/software/zlib.rb index b5bd33dc4..0f25d25e5 100644 --- a/omnibus/config/software/zlib.rb +++ b/omnibus/config/software/zlib.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright 2012-2018 Chef Software, Inc. # diff --git a/omnibus/cookbooks/firezone/Berksfile b/omnibus/cookbooks/firezone/Berksfile index a9427b379..4fa7e5967 100644 --- a/omnibus/cookbooks/firezone/Berksfile +++ b/omnibus/cookbooks/firezone/Berksfile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + source "https://supermarket.chef.io" metadata diff --git a/omnibus/cookbooks/firezone/Gemfile b/omnibus/cookbooks/firezone/Gemfile index ede77b4d7..bd42b976c 100644 --- a/omnibus/cookbooks/firezone/Gemfile +++ b/omnibus/cookbooks/firezone/Gemfile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + source "https://rubygems.org" gem "berkshelf" diff --git a/omnibus/cookbooks/firezone/Policyfile.rb b/omnibus/cookbooks/firezone/Policyfile.rb index a41794cf4..3d859e3cb 100644 --- a/omnibus/cookbooks/firezone/Policyfile.rb +++ b/omnibus/cookbooks/firezone/Policyfile.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Policyfile.rb - Describe how you want Chef Infra Client to build your system. # # For more information on the Policyfile feature, visit diff --git a/omnibus/cookbooks/firezone/attributes/default.rb b/omnibus/cookbooks/firezone/attributes/default.rb index 2228aaf39..593a7099b 100644 --- a/omnibus/cookbooks/firezone/attributes/default.rb +++ b/omnibus/cookbooks/firezone/attributes/default.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Firezone configuration require "etc" diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb index b8d69399d..4569b2222 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Copyright:: Copyright (c) 2019 Chef Software, Inc. # Copyright:: Copyright (c) 2021 Firezone, Inc. diff --git a/omnibus/cookbooks/firezone/libraries/config.rb b/omnibus/cookbooks/firezone/libraries/config.rb index 8b11d7790..93fe9f275 100644 --- a/omnibus/cookbooks/firezone/libraries/config.rb +++ b/omnibus/cookbooks/firezone/libraries/config.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require "json" require "fileutils" require "securerandom" @@ -245,7 +247,7 @@ class Firezone env.merge!("DATABASE_PASSWORD" => attributes["database"]["password"]) if attributes.dig("database", "password") - if attributes.dig("default_admin_password") + if attributes["default_admin_password"] env.merge!("DEFAULT_ADMIN_PASSWORD" => attributes["default_admin_password"]) end diff --git a/omnibus/cookbooks/firezone/metadata.rb b/omnibus/cookbooks/firezone/metadata.rb index 9a2ca58c5..9c4e94499 100644 --- a/omnibus/cookbooks/firezone/metadata.rb +++ b/omnibus/cookbooks/firezone/metadata.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + name "firezone" maintainer "Firezone" maintainer_email "infra@firez.one" diff --git a/omnibus/cookbooks/firezone/recipes/log_management.rb b/omnibus/cookbooks/firezone/recipes/log_management.rb index 738c9573a..fd6f189b8 100644 --- a/omnibus/cookbooks/firezone/recipes/log_management.rb +++ b/omnibus/cookbooks/firezone/recipes/log_management.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Cookbook:: firezone # Recipe:: log_management diff --git a/omnibus/cookbooks/firezone/recipes/nginx.rb b/omnibus/cookbooks/firezone/recipes/nginx.rb index c0d5da1cd..4c833c368 100644 --- a/omnibus/cookbooks/firezone/recipes/nginx.rb +++ b/omnibus/cookbooks/firezone/recipes/nginx.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Cookbook:: firezone # Recipe:: nginx diff --git a/omnibus/cookbooks/firezone/recipes/postgresql.rb b/omnibus/cookbooks/firezone/recipes/postgresql.rb index 9b0cac7b9..fcb5cba79 100644 --- a/omnibus/cookbooks/firezone/recipes/postgresql.rb +++ b/omnibus/cookbooks/firezone/recipes/postgresql.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Cookbook:: firezone # Recipe:: postgresql diff --git a/omnibus/cookbooks/firezone/recipes/show_config.rb b/omnibus/cookbooks/firezone/recipes/show_config.rb index 6d9a3e960..ccce59e57 100644 --- a/omnibus/cookbooks/firezone/recipes/show_config.rb +++ b/omnibus/cookbooks/firezone/recipes/show_config.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Cookbook:: firezone # Recipe:: show_config diff --git a/omnibus/cookbooks/firezone/recipes/ssl.rb b/omnibus/cookbooks/firezone/recipes/ssl.rb index ec5dfd86f..38cf8595b 100644 --- a/omnibus/cookbooks/firezone/recipes/ssl.rb +++ b/omnibus/cookbooks/firezone/recipes/ssl.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Cookbook:: firezone # Recipe:: ssl diff --git a/omnibus/cookbooks/firezone/test/integration/default/default_test.rb b/omnibus/cookbooks/firezone/test/integration/default/default_test.rb index 5d3a146fe..8a34cf378 100644 --- a/omnibus/cookbooks/firezone/test/integration/default/default_test.rb +++ b/omnibus/cookbooks/firezone/test/integration/default/default_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Chef InSpec test for recipe firezone::default # The Chef InSpec reference, with examples and extensive documentation, can be From 5976048fdb950e13d0e5675f93e1b04c8a4151ba Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 14:49:04 -0800 Subject: [PATCH 15/17] Ignore certain things --- .rubocop.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.rubocop.yml b/.rubocop.yml index 8d1fdd36e..1cf08a913 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,5 +1,7 @@ AllCops: TargetRubyVersion: 2.7 + Exclude: + - "apps/fz_http/assets/node_modules/**/*" Style/StringLiterals: Enabled: true @@ -9,5 +11,9 @@ Style/StringLiteralsInInterpolation: Enabled: true EnforcedStyle: double_quotes +Metrics/BlockLength: + Exclude: + - "omnibus/config/software/**/*" + Layout/LineLength: Max: 120 From de578b54fda2a338fba5c584ec6db6ad6e6a9ac3 Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 14:57:38 -0800 Subject: [PATCH 16/17] Revert to rubocop defaults --- .rubocop.yml | 12 - docs/Gemfile | 14 +- omnibus/Berksfile | 10 +- omnibus/Gemfile | 14 +- omnibus/config/projects/firezone.rb | 52 ++-- omnibus/config/software/autoconf.rb | 20 +- omnibus/config/software/automake.rb | 28 +- omnibus/config/software/bison.rb | 16 +- omnibus/config/software/bzip2.rb | 24 +- omnibus/config/software/cacerts.rb | 20 +- omnibus/config/software/config_guess.rb | 12 +- omnibus/config/software/elixir.rb | 20 +- omnibus/config/software/erlang.rb | 115 +++---- omnibus/config/software/firezone-cookbooks.rb | 20 +- omnibus/config/software/firezone-ctl.rb | 12 +- omnibus/config/software/firezone-scripts.rb | 10 +- omnibus/config/software/firezone.rb | 60 ++-- omnibus/config/software/flex.rb | 26 +- omnibus/config/software/gawk.rb | 16 +- omnibus/config/software/gettext.rb | 42 +-- omnibus/config/software/gmp.rb | 20 +- omnibus/config/software/icu.rb | 18 +- omnibus/config/software/libedit.rb | 36 +-- omnibus/config/software/libffi.rb | 26 +- omnibus/config/software/libiconv.rb | 20 +- omnibus/config/software/liblzma.rb | 38 +-- omnibus/config/software/libmnl.rb | 10 +- omnibus/config/software/libnftnl.rb | 10 +- omnibus/config/software/libossp-uuid.rb | 14 +- omnibus/config/software/libtool.rb | 28 +- omnibus/config/software/libxml2.rb | 40 +-- omnibus/config/software/libyaml.rb | 18 +- omnibus/config/software/linenoise.rb | 16 +- omnibus/config/software/m4.rb | 14 +- omnibus/config/software/ncurses.rb | 78 ++--- omnibus/config/software/nftables.rb | 38 +-- omnibus/config/software/nginx.rb | 36 +-- omnibus/config/software/nodejs.rb | 26 +- omnibus/config/software/omnibus-ctl.rb | 22 +- omnibus/config/software/openssl.rb | 110 +++---- omnibus/config/software/pcre.rb | 30 +- omnibus/config/software/perl-thread-queue.rb | 14 +- omnibus/config/software/perl.rb | 36 +-- omnibus/config/software/pkg-config.rb | 24 +- omnibus/config/software/postgresql.rb | 56 ++-- omnibus/config/software/python.rb | 30 +- omnibus/config/software/readline.rb | 14 +- omnibus/config/software/ruby.rb | 150 +++++----- omnibus/config/software/rubygems.rb | 40 +-- omnibus/config/software/runit.rb | 20 +- omnibus/config/software/wireguard-tools.rb | 24 +- omnibus/config/software/zlib.rb | 38 +-- omnibus/cookbooks/firezone/Berksfile | 6 +- omnibus/cookbooks/firezone/Gemfile | 8 +- omnibus/cookbooks/firezone/Policyfile.rb | 6 +- .../cookbooks/firezone/attributes/default.rb | 282 +++++++++--------- .../default/ctl-commands/create_admin.rb | 24 +- .../files/default/ctl-commands/reconfigure.rb | 24 +- .../default/ctl-commands/reset_network.rb | 8 +- .../files/default/ctl-commands/teardown.rb | 6 +- .../files/default/ctl-commands/version.rb | 8 +- .../cookbooks/firezone/libraries/config.rb | 173 +++++------ omnibus/cookbooks/firezone/metadata.rb | 20 +- omnibus/cookbooks/firezone/recipes/app.rb | 40 +-- omnibus/cookbooks/firezone/recipes/config.rb | 92 +++--- .../firezone/recipes/create_admin.rb | 16 +- .../cookbooks/firezone/recipes/database.rb | 28 +- omnibus/cookbooks/firezone/recipes/default.rb | 40 +-- .../firezone/recipes/log_management.rb | 36 +-- omnibus/cookbooks/firezone/recipes/network.rb | 26 +- omnibus/cookbooks/firezone/recipes/nginx.rb | 68 ++--- omnibus/cookbooks/firezone/recipes/phoenix.rb | 58 ++-- .../cookbooks/firezone/recipes/postgresql.rb | 32 +- omnibus/cookbooks/firezone/recipes/setcap.rb | 22 +- .../cookbooks/firezone/recipes/show_config.rb | 2 +- omnibus/cookbooks/firezone/recipes/ssl.rb | 56 ++-- .../cookbooks/firezone/recipes/teardown.rb | 12 +- .../cookbooks/firezone/recipes/telemetry.rb | 30 +- .../cookbooks/firezone/recipes/wireguard.rb | 20 +- .../test/integration/default/default_test.rb | 2 +- 80 files changed, 1386 insertions(+), 1396 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 1cf08a913..ace622046 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -3,17 +3,5 @@ AllCops: Exclude: - "apps/fz_http/assets/node_modules/**/*" -Style/StringLiterals: - Enabled: true - EnforcedStyle: double_quotes - -Style/StringLiteralsInInterpolation: - Enabled: true - EnforcedStyle: double_quotes - -Metrics/BlockLength: - Exclude: - - "omnibus/config/software/**/*" - Layout/LineLength: Max: 120 diff --git a/docs/Gemfile b/docs/Gemfile index a0a917436..8026238ae 100644 --- a/docs/Gemfile +++ b/docs/Gemfile @@ -1,29 +1,29 @@ # frozen_string_literal: true -source "https://rubygems.org" +source 'https://rubygems.org' # Hello! This is where you manage which Jekyll version is used to run. # When you want to use a different version, change it below, save the # file and run `bundle install`. Run Jekyll with `bundle exec`, like so: # # bundle exec jekyll serve # -gem "just-the-docs", github: "firezone/just-the-docs" +gem 'just-the-docs', github: 'firezone/just-the-docs' # If you want to use GitHub Pages, remove the "gem "jekyll"" above and # uncomment the line below. To upgrade, run `bundle update github-pages`. # gem "github-pages", group: :jekyll_plugins # If you have any plugins, put them here! group :jekyll_plugins do - gem "github-pages" - gem "jekyll-feed", "~> 0.12" + gem 'github-pages' + gem 'jekyll-feed', '~> 0.12' end # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem # and associated library. platforms :mingw, :x64_mingw, :mswin, :jruby do - gem "tzinfo", "~> 1.2" - gem "tzinfo-data" + gem 'tzinfo', '~> 1.2' + gem 'tzinfo-data' end # Performance-booster for watching directories on Windows -gem "wdm", "~> 0.1.1", platforms: %i[mingw x64_mingw mswin] +gem 'wdm', '~> 0.1.1', platforms: %i[mingw x64_mingw mswin] diff --git a/omnibus/Berksfile b/omnibus/Berksfile index cb0abfd01..efe863635 100644 --- a/omnibus/Berksfile +++ b/omnibus/Berksfile @@ -1,14 +1,14 @@ # frozen_string_literal: true -source "https://supermarket.chef.io" +source 'https://supermarket.chef.io' -cookbook "omnibus" +cookbook 'omnibus' # Uncomment to use the latest version of the Omnibus cookbook from GitHub # cookbook 'omnibus', github: 'chef-cookbooks/omnibus' group :integration do - cookbook "apt", "~> 2.8" - cookbook "freebsd", "~> 0.3" - cookbook "yum-epel", "~> 0.6" + cookbook 'apt', '~> 2.8' + cookbook 'freebsd', '~> 0.3' + cookbook 'yum-epel', '~> 0.6' end diff --git a/omnibus/Gemfile b/omnibus/Gemfile index 844b00567..d43716208 100644 --- a/omnibus/Gemfile +++ b/omnibus/Gemfile @@ -1,10 +1,10 @@ # frozen_string_literal: true -source "https://rubygems.org" +source 'https://rubygems.org' # Install omnibus -gem "chef", "~> 16.17.18" -gem "omnibus", "~> 8.2.2" +gem 'chef', '~> 16.17.18' +gem 'omnibus', '~> 8.2.2' # Use Chef"s software definitions. It is recommended that you write your own # software definitions, but you can clone/fork Chef"s to get you started. @@ -16,11 +16,11 @@ gem "omnibus", "~> 8.2.2" # by running `bundle install --without development` to speed up build times. group :development do # Use Berkshelf for resolving cookbook dependencies - gem "berkshelf" + gem 'berkshelf' - gem "rubocop" + gem 'rubocop' # Use Test Kitchen with Vagrant for converging the build environment - gem "kitchen-vagrant" - gem "test-kitchen" + gem 'kitchen-vagrant' + gem 'test-kitchen' end diff --git a/omnibus/config/projects/firezone.rb b/omnibus/config/projects/firezone.rb index 5c55305ae..dbb8536b2 100644 --- a/omnibus/config/projects/firezone.rb +++ b/omnibus/config/projects/firezone.rb @@ -15,11 +15,11 @@ # limitations under the License. # -name "firezone" -maintainer "Firezone" -homepage "https://firez.one" -license "Apache-2.0" -license_file "../LICENSE" +name 'firezone' +maintainer 'Firezone' +homepage 'https://firez.one' +license 'Apache-2.0' +license_file '../LICENSE' description <<~DESC Web UI + Firewall manager for WireGuard @@ -29,32 +29,30 @@ DESC # and /opt/firezone on all other platforms install_dir "#{default_root}/#{name}" -if ENV["CI"] - stage_path = "/opt/runner/omnibus-local/stage" - # Prevent runner tmp dir from filling up - staging_dir = stage_path unless Dir.exist?(stage_path) -end +# Prevent runner tmp dir from filling up +stage_path = '/opt/runner/omnibus-local/stage' +ENV['CI'] && Dir.exist?(stage_path) && staging_dir(stage_path) build_version Omnibus::BuildVersion.semver build_iteration 1 # firezone build dependencies/components -dependency "runit" -dependency "nginx" -dependency "erlang" -dependency "elixir" -dependency "openssl" -dependency "postgresql" -dependency "wireguard-tools" -dependency "firezone" -dependency "firezone-ctl" -dependency "firezone-scripts" -dependency "firezone-cookbooks" +dependency 'runit' +dependency 'nginx' +dependency 'erlang' +dependency 'elixir' +dependency 'openssl' +dependency 'postgresql' +dependency 'wireguard-tools' +dependency 'firezone' +dependency 'firezone-ctl' +dependency 'firezone-scripts' +dependency 'firezone-cookbooks' # XXX: Ensure all development resources aren't included -exclude ".env" -exclude ".github" -exclude ".vagrant" -exclude ".ci" -exclude "**/.git" -exclude "**/bundler/git" +exclude '.env' +exclude '.github' +exclude '.vagrant' +exclude '.ci' +exclude '**/.git' +exclude '**/bundler/git' diff --git a/omnibus/config/software/autoconf.rb b/omnibus/config/software/autoconf.rb index 473e7358d..52affc819 100644 --- a/omnibus/config/software/autoconf.rb +++ b/omnibus/config/software/autoconf.rb @@ -17,18 +17,18 @@ # # expeditor/ignore: deprecated 2021-04 -name "autoconf" -default_version "2.71" +name 'autoconf' +default_version '2.71' -license "GPL-3.0" -license_file "COPYING" -license_file "COPYING.EXCEPTION" +license 'GPL-3.0' +license_file 'COPYING' +license_file 'COPYING.EXCEPTION' skip_transitive_dependency_licensing true -dependency "m4" +dependency 'm4' -version("2.69") { source sha256: "954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969" } -version("2.71") { source sha256: "431075ad0bf529ef13cb41e9042c542381103e80015686222b8a9d4abef42a1c" } +version('2.69') { source sha256: '954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969' } +version('2.71') { source sha256: '431075ad0bf529ef13cb41e9042c542381103e80015686222b8a9d4abef42a1c' } source url: "https://mirrors.kernel.org/gnu/autoconf/autoconf-#{version}.tar.gz" @@ -37,9 +37,9 @@ relative_path "autoconf-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) - env["M4"] = "#{install_dir}/embedded/bin/m4" if solaris2? + env['M4'] = "#{install_dir}/embedded/bin/m4" if solaris2? - command "./configure" \ + command './configure' \ " --prefix=#{install_dir}/embedded", env: env make "-j #{workers}", env: env diff --git a/omnibus/config/software/automake.rb b/omnibus/config/software/automake.rb index ffc804166..3f1866875 100644 --- a/omnibus/config/software/automake.rb +++ b/omnibus/config/software/automake.rb @@ -17,20 +17,20 @@ # # expeditor/ignore: deprecated 2021-04 -name "automake" -default_version "1.16.4" +name 'automake' +default_version '1.16.4' -dependency "autoconf" -dependency "perl-thread-queue" +dependency 'autoconf' +dependency 'perl-thread-queue' -license "GPL-2.0" -license_file "COPYING" +license 'GPL-2.0' +license_file 'COPYING' skip_transitive_dependency_licensing true -version("1.16.4") { source sha256: "8a0f0be7aaae2efa3a68482af28e5872d8830b9813a6a932a2571eac63ca1794" } -version("1.16") { source sha256: "80da43bb5665596ee389e6d8b64b4f122ea4b92a685b1dbd813cd1f0e0c2d83f" } -version("1.15") { source sha256: "7946e945a96e28152ba5a6beb0625ca715c6e32ac55f2e353ef54def0c8ed924" } -version("1.11.2") { source sha256: "c339e3871d6595620760725da61de02cf1c293af8a05b14592d6587ac39ce546" } +version('1.16.4') { source sha256: '8a0f0be7aaae2efa3a68482af28e5872d8830b9813a6a932a2571eac63ca1794' } +version('1.16') { source sha256: '80da43bb5665596ee389e6d8b64b4f122ea4b92a685b1dbd813cd1f0e0c2d83f' } +version('1.15') { source sha256: '7946e945a96e28152ba5a6beb0625ca715c6e32ac55f2e353ef54def0c8ed924' } +version('1.11.2') { source sha256: 'c339e3871d6595620760725da61de02cf1c293af8a05b14592d6587ac39ce546' } source url: "https://mirrors.kernel.org/gnu/automake/automake-#{version}.tar.gz" @@ -39,12 +39,12 @@ relative_path "automake-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) - if version == "1.15" - command "./bootstrap.sh", env: env + if version == '1.15' + command './bootstrap.sh', env: env else - command "./bootstrap", env: env + command './bootstrap', env: env end - command "./configure" \ + command './configure' \ " --prefix=#{install_dir}/embedded", env: env make "-j #{workers}", env: env diff --git a/omnibus/config/software/bison.rb b/omnibus/config/software/bison.rb index 71a59d3df..9bdaf93af 100644 --- a/omnibus/config/software/bison.rb +++ b/omnibus/config/software/bison.rb @@ -15,18 +15,18 @@ # limitations under the License. # # expeditor/ignore: deprecated 2021-04 -name "bison" +name 'bison' -dependency "readline" -dependency "config_guess" +dependency 'readline' +dependency 'config_guess' -license "GPL-3.0" -license_file "COPYING" +license 'GPL-3.0' +license_file 'COPYING' skip_transitive_dependency_licensing true -default_version "3.7" +default_version '3.7' source url: "http://mirrors.kernel.org/gnu/bison/bison-#{version}.tar.gz" -version("3.7") do - source sha256: "492ad61202de893ca21a99b621d63fa5389da58804ad79d3f226b8d04b803998" +version('3.7') do + source sha256: '492ad61202de893ca21a99b621d63fa5389da58804ad79d3f226b8d04b803998' end relative_path "bison-#{version}" diff --git a/omnibus/config/software/bzip2.rb b/omnibus/config/software/bzip2.rb index 8366fa02b..2f02f3b0f 100644 --- a/omnibus/config/software/bzip2.rb +++ b/omnibus/config/software/bzip2.rb @@ -19,18 +19,18 @@ # This library object is required for building Python with the bz2 module, # and should be picked up automatically when building Python. -name "bzip2" -default_version "1.0.8" +name 'bzip2' +default_version '1.0.8' -license "BSD-2-Clause" -license_file "LICENSE" +license 'BSD-2-Clause' +license_file 'LICENSE' skip_transitive_dependency_licensing true -dependency "zlib" -dependency "openssl" +dependency 'zlib' +dependency 'openssl' # version_list: url=https://sourceware.org/pub/bzip2/ filter=*.tar.gz -version("1.0.8") { source sha256: "ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269" } +version('1.0.8') { source sha256: 'ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269' } source url: "https://fossies.org/linux/misc/#{name}-#{version}.tar.gz" @@ -40,16 +40,16 @@ build do env = with_standard_compiler_flags(with_embedded_path) # Avoid warning where .rodata cannot be used when making a shared object - env["CFLAGS"] << " -fPIC" unless aix? + env['CFLAGS'] << ' -fPIC' unless aix? # The list of arguments to pass to make args = "PREFIX='#{install_dir}/embedded' VERSION='#{version}'" args << " CFLAGS='-qpic=small -qpic=large -O2 -g -D_ALL_SOURCE -D_LARGE_FILES'" if aix? - patch source: "makefile_take_env_vars.patch", plevel: 1, env: env - patch source: "makefile_no_bins.patch", plevel: 1, env: env # removes various binaries we don't want to ship - patch source: "soname_install_dir.patch", env: env if mac_os_x? - patch source: "aix_makefile.patch", env: env if aix? + patch source: 'makefile_take_env_vars.patch', plevel: 1, env: env + patch source: 'makefile_no_bins.patch', plevel: 1, env: env # removes various binaries we don't want to ship + patch source: 'soname_install_dir.patch', env: env if mac_os_x? + patch source: 'aix_makefile.patch', env: env if aix? make "#{args} -j #{workers}", env: env make "#{args} -j #{workers} -f Makefile-libbz2_so", env: env diff --git a/omnibus/config/software/cacerts.rb b/omnibus/config/software/cacerts.rb index 0122b1035..5ceff6729 100644 --- a/omnibus/config/software/cacerts.rb +++ b/omnibus/config/software/cacerts.rb @@ -16,22 +16,22 @@ # limitations under the License. # -name "cacerts" +name 'cacerts' -license "MPL-2.0" -license_file "https://www.mozilla.org/media/MPL/2.0/index.815ca599c9df.txt" +license 'MPL-2.0' +license_file 'https://www.mozilla.org/media/MPL/2.0/index.815ca599c9df.txt' skip_transitive_dependency_licensing true -default_version "2021-01-19" +default_version '2021-01-19' source url: "https://curl.haxx.se/ca/cacert-#{version}.pem" # versions_list: https://curl.se/docs/caextract.html -version("2021-01-19") { source sha256: "e010c0c071a2c79a76aa3c289dc7e4ac4ed38492bfda06d766a80b707ebd2f29" } -version("2020-12-08") { source sha256: "313d562594ebd07846ad6b840dd18993f22e0f8b3f275d9aacfae118f4f00fb7" } -version("2020-10-14") { source sha256: "bb28d145ed1a4ee67253d8ddb11268069c9dafe3db25a9eee654974c4e43eee5" } -version("2020-07-22") { source sha256: "2782f0f8e89c786f40240fc1916677be660fb8d8e25dede50c9f6f7b0c2c2178" } -version("2020-06-24") { source sha256: "726889705b00f736200ed7999f7a50021b8735d53228d679c4e6665aa3b44987" } +version('2021-01-19') { source sha256: 'e010c0c071a2c79a76aa3c289dc7e4ac4ed38492bfda06d766a80b707ebd2f29' } +version('2020-12-08') { source sha256: '313d562594ebd07846ad6b840dd18993f22e0f8b3f275d9aacfae118f4f00fb7' } +version('2020-10-14') { source sha256: 'bb28d145ed1a4ee67253d8ddb11268069c9dafe3db25a9eee654974c4e43eee5' } +version('2020-07-22') { source sha256: '2782f0f8e89c786f40240fc1916677be660fb8d8e25dede50c9f6f7b0c2c2178' } +version('2020-06-24') { source sha256: '726889705b00f736200ed7999f7a50021b8735d53228d679c4e6665aa3b44987' } relative_path "cacerts-#{version}" @@ -43,7 +43,7 @@ build do # Windows does not support symlinks unless windows? - link "certs/cacert.pem", "#{install_dir}/embedded/ssl/cert.pem", + link 'certs/cacert.pem', "#{install_dir}/embedded/ssl/cert.pem", unchecked: true, force: true diff --git a/omnibus/config/software/config_guess.rb b/omnibus/config/software/config_guess.rb index ed9b8be3a..b3f6d72e3 100644 --- a/omnibus/config/software/config_guess.rb +++ b/omnibus/config/software/config_guess.rb @@ -17,16 +17,16 @@ # # expeditor/ignore: no version pinning -name "config_guess" -default_version "master" +name 'config_guess' +default_version 'master' # Use our github mirror of the savannah repository -source git: "https://github.com/chef/config-mirror.git" +source git: 'https://github.com/chef/config-mirror.git' # http://savannah.gnu.org/projects/config -license "GPL-3.0 (with exception)" -license_file "config.guess" -license_file "config.sub" +license 'GPL-3.0 (with exception)' +license_file 'config.guess' +license_file 'config.sub' skip_transitive_dependency_licensing true relative_path "config_guess-#{version}" diff --git a/omnibus/config/software/elixir.rb b/omnibus/config/software/elixir.rb index 8d1e5482e..828ece6cb 100644 --- a/omnibus/config/software/elixir.rb +++ b/omnibus/config/software/elixir.rb @@ -17,19 +17,19 @@ # # expeditor/ignore: deprecated 2021-04 -name "elixir" -default_version "1.13.2" +name 'elixir' +default_version '1.13.2' -license "Apache-2.0" -license_file "LICENSE" +license 'Apache-2.0' +license_file 'LICENSE' -dependency "erlang" +dependency 'erlang' -version("1.4.2") { source sha256: "cb4e2ec4d68b3c8b800179b7ae5779e2999aa3375f74bd188d7d6703497f553f" } -version("1.12.2") { source sha256: "701006d1279225fc42f15c8d3f39906db127ddcc95373d34d8d160993356b15c" } -version("1.12.3") { source sha256: "c5affa97defafa1fd89c81656464d61da8f76ccfec2ea80c8a528decd5cb04ad" } -version("1.13.1") { source sha256: "deaba8156b11777adfa28e54e76ddf49ab1a0132cca54c41d9d7648e800edcc8" } -version("1.13.2") { source sha256: "03afed42dccf4347c4d3ae2b905134093a3ba2245d0d3098d75009a1d659ed1a" } +version('1.4.2') { source sha256: 'cb4e2ec4d68b3c8b800179b7ae5779e2999aa3375f74bd188d7d6703497f553f' } +version('1.12.2') { source sha256: '701006d1279225fc42f15c8d3f39906db127ddcc95373d34d8d160993356b15c' } +version('1.12.3') { source sha256: 'c5affa97defafa1fd89c81656464d61da8f76ccfec2ea80c8a528decd5cb04ad' } +version('1.13.1') { source sha256: 'deaba8156b11777adfa28e54e76ddf49ab1a0132cca54c41d9d7648e800edcc8' } +version('1.13.2') { source sha256: '03afed42dccf4347c4d3ae2b905134093a3ba2245d0d3098d75009a1d659ed1a' } source url: "https://github.com/elixir-lang/elixir/archive/v#{version}.tar.gz" relative_path "elixir-#{version}" diff --git a/omnibus/config/software/erlang.rb b/omnibus/config/software/erlang.rb index 53b2cc5ee..0cec462f7 100644 --- a/omnibus/config/software/erlang.rb +++ b/omnibus/config/software/erlang.rb @@ -17,72 +17,73 @@ # limitations under the License. # -name "erlang" -default_version "24.2.1" +name 'erlang' +default_version '24.2.1' -license "Apache-2.0" -license_file "LICENSE.txt" +license 'Apache-2.0' +license_file 'LICENSE.txt' skip_transitive_dependency_licensing true -dependency "gawk" -dependency "automake" -dependency "autoconf" -dependency "zlib" -dependency "openssl" -dependency "ncurses" -dependency "config_guess" +dependency 'gawk' +dependency 'automake' +dependency 'autoconf' +dependency 'zlib' +dependency 'openssl' +dependency 'ncurses' +dependency 'config_guess' # grab from github so we can get patch releases if we need to source url: "https://github.com/erlang/otp/archive/OTP-#{version}.tar.gz" relative_path "otp-OTP-#{version}" # versions_list: https://github.com/erlang/otp/tags filter=*.tar.gz -version("24.2.1") { source sha256: "2854318d12d727fc508e8fd5fe6921c0cbc7727d1183ad8f6f808585496e42d6" } -version("24.2") { source sha256: "0b9c9ba7d8b40f6c77d529e07561b10f0914d2bfe9023294d7eda85b62936792" } -version("24.1.4") { source sha256: "aa31ba689740dc446dfa5bb256474df5fb5e5459b981b4d2155afa91010ca66a" } -version("24.0.6") { source sha256: "a60a7d776a4573e2018d6fad6df957e3911ecbce5f11497a8ec537f613aca0a1" } -version("24.0.5") { source sha256: "dd189cf94bf86c610a66f5d9f1a49b8d95a7ce1a7534d216e97e8fade271e624" } -version("23.3.3") { source sha256: "839d74e71a457295d95b8674f1848a5d7d9c4c274a041ef8026d035da88858ae" } -version("23.3.2") { source sha256: "02443dd42023d0eb73f73dc05f4d3ded7bc4ab59d348041a37a045ba1581b48b" } -version("22.2") { source sha256: "232c37a502c7e491a9cbf86acb7af64fbc1a793fcbcbd0093cb029cf1c3830a7" } -version("22.1.8") { source sha256: "7302be70cee2c33689bf2c2a3e7cfee597415d0fb3e4e71bd3e86bd1eff9cfdc" } -version("21.3.8.11") { source sha256: "aab77124285820608cd7a90f6b882e42bb5739283e10a8593d7f5bce9b30b16a" } -version("21.1") { source sha256: "7212f895ae317fa7a086fa2946070de5b910df5d41263e357d44b0f1f410af0f" } -version("20.3.8.9") { source sha256: "897dd8b66c901bfbce09ed64e0245256aca9e6e9bdf78c36954b9b7117192519" } -version("20.0") { source sha256: "22710927ad2e48a0964997bf5becb24abb1f4fed86f5f05af22a9e1df636b787" } -version("19.3.6.11") { source sha256: "c857ea6d2c901bfb633d9ceeb5e05332475357f185dd5112b7b6e4db80072827" } -version("18.3.4.9") { source sha256: "25ef8ba3824cb726c4830abf32c2a2967925b1e33a8e8851dba596e933e2689a" } -version("18.3") { source sha256: "a6d08eb7df06e749ccaf3049b33ceae617a3c466c6a640ee8d248c2372d48f4e" } -version("18.2") { source sha256: "3944ce41d13fbef1e1e80d7335b2167849e8566581513d5d9226cd211d3d58f9" } -version("18.1") { source sha256: "6b956dda690d3f3bf244249e8d422dd606231cc7229675bf5e34b5ba2ae83e9b" } +version('24.2.1') { source sha256: '2854318d12d727fc508e8fd5fe6921c0cbc7727d1183ad8f6f808585496e42d6' } +version('24.2') { source sha256: '0b9c9ba7d8b40f6c77d529e07561b10f0914d2bfe9023294d7eda85b62936792' } +version('24.1.4') { source sha256: 'aa31ba689740dc446dfa5bb256474df5fb5e5459b981b4d2155afa91010ca66a' } +version('24.0.6') { source sha256: 'a60a7d776a4573e2018d6fad6df957e3911ecbce5f11497a8ec537f613aca0a1' } +version('24.0.5') { source sha256: 'dd189cf94bf86c610a66f5d9f1a49b8d95a7ce1a7534d216e97e8fade271e624' } +version('23.3.3') { source sha256: '839d74e71a457295d95b8674f1848a5d7d9c4c274a041ef8026d035da88858ae' } +version('23.3.2') { source sha256: '02443dd42023d0eb73f73dc05f4d3ded7bc4ab59d348041a37a045ba1581b48b' } +version('22.2') { source sha256: '232c37a502c7e491a9cbf86acb7af64fbc1a793fcbcbd0093cb029cf1c3830a7' } +version('22.1.8') { source sha256: '7302be70cee2c33689bf2c2a3e7cfee597415d0fb3e4e71bd3e86bd1eff9cfdc' } +version('21.3.8.11') { source sha256: 'aab77124285820608cd7a90f6b882e42bb5739283e10a8593d7f5bce9b30b16a' } +version('21.1') { source sha256: '7212f895ae317fa7a086fa2946070de5b910df5d41263e357d44b0f1f410af0f' } +version('20.3.8.9') { source sha256: '897dd8b66c901bfbce09ed64e0245256aca9e6e9bdf78c36954b9b7117192519' } +version('20.0') { source sha256: '22710927ad2e48a0964997bf5becb24abb1f4fed86f5f05af22a9e1df636b787' } +version('19.3.6.11') { source sha256: 'c857ea6d2c901bfb633d9ceeb5e05332475357f185dd5112b7b6e4db80072827' } +version('18.3.4.9') { source sha256: '25ef8ba3824cb726c4830abf32c2a2967925b1e33a8e8851dba596e933e2689a' } +version('18.3') { source sha256: 'a6d08eb7df06e749ccaf3049b33ceae617a3c466c6a640ee8d248c2372d48f4e' } +version('18.2') { source sha256: '3944ce41d13fbef1e1e80d7335b2167849e8566581513d5d9226cd211d3d58f9' } +version('18.1') { source sha256: '6b956dda690d3f3bf244249e8d422dd606231cc7229675bf5e34b5ba2ae83e9b' } build do - if version.satisfies?(">= 18.3") + if version.satisfies?('>= 18.3') # Don't listen on 127.0.0.1/::1 implicitly whenever ERL_EPMD_ADDRESS is given - patch source: "epmd-require-explicitly-adding-loopback-address.patch", plevel: 1 + patch source: 'epmd-require-explicitly-adding-loopback-address.patch', plevel: 1 end env = with_standard_compiler_flags(with_embedded_path).merge( # WARNING! - "CFLAGS" => "-L#{install_dir}/embedded/lib -I#{install_dir}/embedded/erlang/include", - "LDFLAGS" => "-Wl,-rpath #{install_dir}/embedded/lib -L#{install_dir}/embedded/lib -I#{install_dir}/embedded/erlang/include" + 'CFLAGS' => "-L#{install_dir}/embedded/lib -I#{install_dir}/embedded/erlang/include", + 'LDFLAGS' => "-Wl,-rpath #{install_dir}/embedded/lib -L#{install_dir}/embedded/lib -I#{install_dir}/embedded/er"\ + 'lang/include' ) - env.delete("CPPFLAGS") + env.delete('CPPFLAGS') # The TYPE env var sets the type of emulator you want # We want the default so we give TYPE and empty value # in case it was set by CI. - env["TYPE"] = "" + env['TYPE'] = '' - update_config_guess(target: "erts/autoconf") - update_config_guess(target: "lib/common_test/priv/auxdir") - update_config_guess(target: "lib/erl_interface/src/auxdir") - update_config_guess(target: "lib/wx/autoconf") + update_config_guess(target: 'erts/autoconf') + update_config_guess(target: 'lib/common_test/priv/auxdir') + update_config_guess(target: 'lib/erl_interface/src/auxdir') + update_config_guess(target: 'lib/wx/autoconf') - if version.satisfies?(">= 19.0") - update_config_guess(target: "lib/common_test/test_server/src") + if version.satisfies?('>= 19.0') + update_config_guess(target: 'lib/common_test/test_server/src') else - update_config_guess(target: "lib/test_server/src") + update_config_guess(target: 'lib/test_server/src') end # Setup the erlang include dir @@ -110,37 +111,37 @@ build do # https://github.com/erlang/otp/blob/c1ea854fac3d8ed14/erts/emulator/hipe/elf64ppc.x # Probably introduced with https://github.com/erlang/otp/commit/37d63e9b8a0a96 # See also https://sourceware.org/ml/binutils/2015-05/msg00148.html - hipe = ppc64le? ? "disable" : "enable" + hipe = ppc64le? ? 'disable' : 'enable' - unless File.exist?("./configure") + unless File.exist?('./configure') # Building from github source requires this step - command "./otp_build autoconf" + command './otp_build autoconf' end # NOTE: et, debugger and observer applications require wx to # build. The tarballs from the downloads site has prebuilt the beam # files, so we were able to get away without disabling them and # still build. When building from raw source we must disable them # explicitly. - wx = "without" + wx = 'without' - command "./configure" \ + command './configure' \ " --prefix=#{install_dir}/embedded" \ - " --enable-threads" \ - " --enable-smp-support" \ - " --enable-kernel-poll" \ - " --enable-dynamic-ssl-lib" \ - " --enable-shared-zlib" \ - " --enable-fips" \ + ' --enable-threads' \ + ' --enable-smp-support' \ + ' --enable-kernel-poll' \ + ' --enable-dynamic-ssl-lib' \ + ' --enable-shared-zlib' \ + ' --enable-fips' \ " --#{hipe}-hipe" \ " --#{wx}-wx" \ " --#{wx}-et" \ " --#{wx}-debugger" \ " --#{wx}-observer" \ - " --without-megaco" \ - " --without-javac" \ + ' --without-megaco' \ + ' --without-javac' \ " --with-ssl=#{install_dir}/embedded" \ - " --disable-debug", env: env + ' --disable-debug', env: env make "-j #{workers}", env: env - make "install", env: env + make 'install', env: env end diff --git a/omnibus/config/software/firezone-cookbooks.rb b/omnibus/config/software/firezone-cookbooks.rb index 92b0ae7d3..89de3f6c5 100644 --- a/omnibus/config/software/firezone-cookbooks.rb +++ b/omnibus/config/software/firezone-cookbooks.rb @@ -16,10 +16,10 @@ # limitations under the License. # -name "firezone-cookbooks" +name 'firezone-cookbooks' license :project_license -source path: "cookbooks/firezone" +source path: 'cookbooks/firezone' build do cookbooks_path = "#{install_dir}/embedded/cookbooks" @@ -32,29 +32,29 @@ build do Dir.glob("#{cookbooks_path}/**/metadata.json").each do |metadata| cookbook_name = File.basename(File.dirname(metadata)) metadata_json = FFI_Yajl::Parser.parse(File.read(metadata)) - gem_deps = metadata_json.fetch("gems", []) + gem_deps = metadata_json.fetch('gems', []) all_the_gem_deps[cookbook_name] = gem_deps unless gem_deps.empty? end unless all_the_gem_deps.empty? - raise Omnibus::Error, "Nope. Gem dependencies found in the following "\ - "cookbooks used during ctl-reconfigure. This will break airgapped "\ + raise Omnibus::Error, 'Nope. Gem dependencies found in the following '\ + 'cookbooks used during ctl-reconfigure. This will break airgapped '\ "installs.\n#{all_the_gem_deps}" end end block do - open("#{cookbooks_path}/dna.json", "w") do |file| - file.write FFI_Yajl::Encoder.encode(run_list: ["recipe[firezone::default]"]) + open("#{cookbooks_path}/dna.json", 'w') do |file| + file.write FFI_Yajl::Encoder.encode(run_list: ['recipe[firezone::default]']) end - open("#{cookbooks_path}/show-config.json", "w") do |file| + open("#{cookbooks_path}/show-config.json", 'w') do |file| file.write FFI_Yajl::Encoder.encode( - run_list: ["recipe[firezone::show_config]"] + run_list: ['recipe[firezone::show_config]'] ) end - open("#{cookbooks_path}/solo.rb", "w") do |file| + open("#{cookbooks_path}/solo.rb", 'w') do |file| file.write <<~SOLO cookbook_path "#{cookbooks_path}" cache_path "/var/opt/firezone/cache" diff --git a/omnibus/config/software/firezone-ctl.rb b/omnibus/config/software/firezone-ctl.rb index 87412c4be..3227ae8c3 100644 --- a/omnibus/config/software/firezone-ctl.rb +++ b/omnibus/config/software/firezone-ctl.rb @@ -16,23 +16,23 @@ # limitations under the License. # -name "firezone-ctl" +name 'firezone-ctl' license :project_license -dependency "omnibus-ctl" -dependency "runit" +dependency 'omnibus-ctl' +dependency 'runit' -source path: "cookbooks/firezone" +source path: 'cookbooks/firezone' build do env = with_standard_compiler_flags(with_embedded_path) - bundle "install --binstubs --without test", env: env + bundle 'install --binstubs --without test', env: env mkdir "#{install_dir}/bin" block do - erb source: "firezone-ctl.erb", + erb source: 'firezone-ctl.erb', dest: "#{install_dir}/bin/firezone-ctl", mode: 0o755, vars: { diff --git a/omnibus/config/software/firezone-scripts.rb b/omnibus/config/software/firezone-scripts.rb index b7b900d40..80c546d3e 100644 --- a/omnibus/config/software/firezone-scripts.rb +++ b/omnibus/config/software/firezone-scripts.rb @@ -18,15 +18,15 @@ # limitations under the License. # -name "firezone-scripts" +name 'firezone-scripts' -license "Apache-2.0" -license_file File.expand_path("LICENSE", Omnibus::Config.project_root) +license 'Apache-2.0' +license_file File.expand_path('LICENSE', Omnibus::Config.project_root) skip_transitive_dependency_licensing true -source path: File.expand_path("files/firezone-scripts", Omnibus::Config.project_root) +source path: File.expand_path('files/firezone-scripts', Omnibus::Config.project_root) build do - copy "*", "#{install_dir}/embedded/bin/" + copy '*', "#{install_dir}/embedded/bin/" end diff --git a/omnibus/config/software/firezone.rb b/omnibus/config/software/firezone.rb index 0044716ef..2f32fb21a 100644 --- a/omnibus/config/software/firezone.rb +++ b/omnibus/config/software/firezone.rb @@ -15,28 +15,28 @@ # limitations under the License. # -name "firezone" -description "the steps required to compile the firezone elixir application" -default_version "1.0.0" +name 'firezone' +description 'the steps required to compile the firezone elixir application' +default_version '1.0.0' -dependency "postgresql" -dependency "nodejs" -dependency "elixir" -dependency "nftables" if linux? -dependency "ruby" +dependency 'postgresql' +dependency 'nodejs' +dependency 'elixir' +dependency 'nftables' if linux? +dependency 'ruby' -version("1.0.0") do - source path: File.expand_path("../", Omnibus::Config.project_root), +version('1.0.0') do + source path: File.expand_path('../', Omnibus::Config.project_root), options: { exclude: [ - ".env", - ".git", - ".ci", - ".vagrant", - ".github", - "_build", - "deps", - "omnibus", - "apps/fz_http/assets/node_modules" + '.env', + '.git', + '.ci', + '.vagrant', + '.github', + '_build', + 'deps', + 'omnibus', + 'apps/fz_http/assets/node_modules' ] } end @@ -45,17 +45,17 @@ skip_transitive_dependency_licensing true build do env = with_standard_compiler_flags(with_embedded_path).merge( - "MIX_ENV" => "prod", - "VERSION" => Omnibus::BuildVersion.semver + 'MIX_ENV' => 'prod', + 'VERSION' => Omnibus::BuildVersion.semver ) - command "mix local.hex --force", env: env - command "mix local.rebar --force", env: env - command "mix deps.get --only prod", env: env - command "mix deps.compile --only prod", env: env - command "npm ci --prefix apps/fz_http/assets --progress=false --no-audit --loglevel=error", env: env - command "npm run --prefix apps/fz_http/assets deploy", env: env - command "cd apps/fz_http && mix phx.digest", env: env - command "mix release", env: env - sync "_build/prod/rel/firezone", "#{install_dir}/embedded/service/firezone" + command 'mix local.hex --force', env: env + command 'mix local.rebar --force', env: env + command 'mix deps.get --only prod', env: env + command 'mix deps.compile --only prod', env: env + command 'npm ci --prefix apps/fz_http/assets --progress=false --no-audit --loglevel=error', env: env + command 'npm run --prefix apps/fz_http/assets deploy', env: env + command 'cd apps/fz_http && mix phx.digest', env: env + command 'mix release', env: env + sync '_build/prod/rel/firezone', "#{install_dir}/embedded/service/firezone" end diff --git a/omnibus/config/software/flex.rb b/omnibus/config/software/flex.rb index d71631aa5..4ca970247 100644 --- a/omnibus/config/software/flex.rb +++ b/omnibus/config/software/flex.rb @@ -13,30 +13,30 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -name "flex" -license_file "COPYING" +name 'flex' +license_file 'COPYING' skip_transitive_dependency_licensing true -default_version "2.6.4" +default_version '2.6.4' source url: "https://github.com/westes/flex/releases/download/v#{version}/flex-#{version}.tar.gz" -version("2.6.4") do - source sha256: "e87aae032bf07c26f85ac0ed3250998c37621d95f8bd748b31f15b33c45ee995" +version('2.6.4') do + source sha256: 'e87aae032bf07c26f85ac0ed3250998c37621d95f8bd748b31f15b33c45ee995' end relative_path "#{name}-#{version}" -dependency "bison" -dependency "m4" -dependency "gettext" -dependency "libtool" -dependency "autoconf" -dependency "automake" +dependency 'bison' +dependency 'm4' +dependency 'gettext' +dependency 'libtool' +dependency 'autoconf' +dependency 'automake' build do env = with_standard_compiler_flags(with_embedded_path) # Fixes https://github.com/spack/spack/issues/8152 - env["CFLAGS"] << " -D_GNU_SOURCE" if debian? + env['CFLAGS'] << ' -D_GNU_SOURCE' if debian? - command "./autogen.sh", env: env + command './autogen.sh', env: env command "./configure --prefix=#{install_dir}/embedded", env: env make "-j #{workers}", env: env make "-j #{workers} install", env: env diff --git a/omnibus/config/software/gawk.rb b/omnibus/config/software/gawk.rb index 715c86af3..d76170502 100644 --- a/omnibus/config/software/gawk.rb +++ b/omnibus/config/software/gawk.rb @@ -14,27 +14,27 @@ # See the License for the specific language governing permissions and # limitations under the License. -name "gawk" +name 'gawk' -default_version "5.1.0" +default_version '5.1.0' -version("5.1.0") { source sha256: "03a0360edcd84bec156fe211bbc4fc8c78790973ce4e8b990a11d778d40b1a26" } +version('5.1.0') { source sha256: '03a0360edcd84bec156fe211bbc4fc8c78790973ce4e8b990a11d778d40b1a26' } source url: "https://mirrors.kernel.org/gnu/gawk/gawk-#{version}.tar.gz" -dependency "readline" -dependency "config_guess" +dependency 'readline' +dependency 'config_guess' relative_path "gawk-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) update_config_guess - configure_command = ["./configure", - "--disable-mpfr", + configure_command = ['./configure', + '--disable-mpfr', "--prefix=#{install_dir}/embedded"] - command configure_command.join(" "), env: env + command configure_command.join(' '), env: env make "-j #{workers}", env: env make "-j #{workers} install", env: env end diff --git a/omnibus/config/software/gettext.rb b/omnibus/config/software/gettext.rb index dbb31306b..277098c1a 100644 --- a/omnibus/config/software/gettext.rb +++ b/omnibus/config/software/gettext.rb @@ -14,29 +14,29 @@ # See the License for the specific language governing permissions and # limitations under the License. -name "gettext" -license "GPL-3.0" -license_file "COPYING" +name 'gettext' +license 'GPL-3.0' +license_file 'COPYING' -default_version "0.21" +default_version '0.21' -dependency "m4" -dependency "autoconf" -dependency "automake" -dependency "bison" -dependency "perl" -dependency "libiconv" -dependency "ncurses" -dependency "bzip2" -dependency "zlib" -dependency "libxml2" -dependency "liblzma" -dependency "icu" -dependency "pkg-config" +dependency 'm4' +dependency 'autoconf' +dependency 'automake' +dependency 'bison' +dependency 'perl' +dependency 'libiconv' +dependency 'ncurses' +dependency 'bzip2' +dependency 'zlib' +dependency 'libxml2' +dependency 'liblzma' +dependency 'icu' +dependency 'pkg-config' source url: "https://mirrors.kernel.org/gnu/gettext/gettext-#{version}.tar.gz" -version("0.21") do - source sha256: "c77d0da3102aec9c07f43671e60611ebff89a996ef159497ce8e59d075786b12" +version('0.21') do + source sha256: 'c77d0da3102aec9c07f43671e60611ebff89a996ef159497ce8e59d075786b12' end relative_path "#{name}-#{version}" @@ -44,9 +44,9 @@ relative_path "#{name}-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) configure_command = [ - "./configure", + './configure', # Enabling OpenMP requires libgomp, which requires building gcc which is very slow. - "--disable-openmp", + '--disable-openmp', "--prefix=#{install_dir}/embedded" ] diff --git a/omnibus/config/software/gmp.rb b/omnibus/config/software/gmp.rb index e17fd0f99..357faa45b 100644 --- a/omnibus/config/software/gmp.rb +++ b/omnibus/config/software/gmp.rb @@ -16,20 +16,20 @@ # limitations under the License. # -name "gmp" -default_version "6.2.1" +name 'gmp' +default_version '6.2.1' # version_list: url=https://ftp.gnu.org/gnu/gmp/ filter=*.tar.bz2 -version("6.2.1") { source sha256: "eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c" } -version("6.1.0") { source sha256: "498449a994efeba527885c10405993427995d3f86b8768d8cdf8d9dd7c6b73e8" } -version("6.0.0a") { source sha256: "7f8e9a804b9c6d07164cf754207be838ece1219425d64e28cfa3e70d5c759aaf" } +version('6.2.1') { source sha256: 'eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c' } +version('6.1.0') { source sha256: '498449a994efeba527885c10405993427995d3f86b8768d8cdf8d9dd7c6b73e8' } +version('6.0.0a') { source sha256: '7f8e9a804b9c6d07164cf754207be838ece1219425d64e28cfa3e70d5c759aaf' } source url: "https://mirrors.kernel.org/gnu/gmp/gmp-#{version}.tar.bz2" -if version == "6.0.0a" +if version == '6.0.0a' # version 6.0.0a expands to 6.0.0 - relative_path "gmp-6.0.0" + relative_path 'gmp-6.0.0' else relative_path "gmp-#{version}" end @@ -37,12 +37,12 @@ end build do env = with_standard_compiler_flags(with_embedded_path) - env["ABI"] = "32" if solaris2? + env['ABI'] = '32' if solaris2? - configure_command = ["./configure", + configure_command = ['./configure', "--prefix=#{install_dir}/embedded"] - command configure_command.join(" "), env: env + command configure_command.join(' '), env: env make "-j #{workers}", env: env make "-j #{workers} install", env: env end diff --git a/omnibus/config/software/icu.rb b/omnibus/config/software/icu.rb index c9b5c9cf4..5ff5ee4e6 100644 --- a/omnibus/config/software/icu.rb +++ b/omnibus/config/software/icu.rb @@ -1,19 +1,19 @@ # frozen_string_literal: true -name "icu" -license_file "LICENSE" +name 'icu' +license_file 'LICENSE' skip_transitive_dependency_licensing true -default_version "69.1" +default_version '69.1' -source url: "https://github.com/unicode-org/icu/releases/download/release-#{version.gsub(".", - "-")}/icu4c-#{version.gsub( - ".", "_" +source url: "https://github.com/unicode-org/icu/releases/download/release-#{version.gsub('.', + '-')}/icu4c-#{version.gsub( + '.', '_' )}-src.tgz" -version("69.1") do - source sha256: "4cba7b7acd1d3c42c44bb0c14be6637098c7faf2b330ce876bc5f3b915d09745" +version('69.1') do + source sha256: '4cba7b7acd1d3c42c44bb0c14be6637098c7faf2b330ce876bc5f3b915d09745' end -relative_path "icu/source" +relative_path 'icu/source' build do env = with_standard_compiler_flags(with_embedded_path) diff --git a/omnibus/config/software/libedit.rb b/omnibus/config/software/libedit.rb index e9e876359..6def2bffd 100644 --- a/omnibus/config/software/libedit.rb +++ b/omnibus/config/software/libedit.rb @@ -15,30 +15,30 @@ # limitations under the License. # -name "libedit" -default_version "20210910-3.1" +name 'libedit' +default_version '20210910-3.1' -license "BSD-3-Clause" -license_file "COPYING" +license 'BSD-3-Clause' +license_file 'COPYING' skip_transitive_dependency_licensing true -dependency "ncurses" -dependency "config_guess" +dependency 'ncurses' +dependency 'config_guess' # version_list: url=http://thrysoee.dk/editline/ filter=*.tar.gz -version("20210910-3.1") { source sha256: "6792a6a992050762edcca28ff3318cdb7de37dccf7bc30db59fcd7017eed13c5" } -version("20210419-3.1") { source sha256: "571ebe44b74860823e24a08cf04086ff104fd7dfa1020abf26c52543134f5602" } -version("20150325-3.1") { source sha256: "c88a5e4af83c5f40dda8455886ac98923a9c33125699742603a88a0253fcc8c5" } -version("20141030-3.1") { source sha256: "9701e16570fb8f7fa407b506986652221b701a9dd61defc05bb7d1c61cdf5a40" } -version("20130712-3.1") { source sha256: "5d9b1a9dd66f1fe28bbd98e4d8ed1a22d8da0d08d902407dcc4a0702c8d88a37" } -version("20120601-3.0") { source sha256: "51f0f4b4a97b7ebab26e7b5c2564c47628cdb3042fd8ba8d0605c719d2541918" } +version('20210910-3.1') { source sha256: '6792a6a992050762edcca28ff3318cdb7de37dccf7bc30db59fcd7017eed13c5' } +version('20210419-3.1') { source sha256: '571ebe44b74860823e24a08cf04086ff104fd7dfa1020abf26c52543134f5602' } +version('20150325-3.1') { source sha256: 'c88a5e4af83c5f40dda8455886ac98923a9c33125699742603a88a0253fcc8c5' } +version('20141030-3.1') { source sha256: '9701e16570fb8f7fa407b506986652221b701a9dd61defc05bb7d1c61cdf5a40' } +version('20130712-3.1') { source sha256: '5d9b1a9dd66f1fe28bbd98e4d8ed1a22d8da0d08d902407dcc4a0702c8d88a37' } +version('20120601-3.0') { source sha256: '51f0f4b4a97b7ebab26e7b5c2564c47628cdb3042fd8ba8d0605c719d2541918' } source url: "http://www.thrysoee.dk/editline/libedit-#{version}.tar.gz" -if version == "20141030-3.1" +if version == '20141030-3.1' # released tar file has name discrepency in folder name for this version - relative_path "libedit-20141029-3.1" + relative_path 'libedit-20141029-3.1' else relative_path "libedit-#{version}" end @@ -48,19 +48,19 @@ build do # The patch is from the FreeBSD ports tree and is for GCC compatibility. # http://svnweb.freebsd.org/ports/head/devel/libedit/files/patch-vi.c?annotate=300896 - patch source: "freebsd-vi-fix.patch", env: env if version.to_i < 20_150_325 && (freebsd? || openbsd?) + patch source: 'freebsd-vi-fix.patch', env: env if version.to_i < 20_150_325 && (freebsd? || openbsd?) if openbsd? - patch source: "openbsd-weak-alias-fix.patch", plevel: 1, env: env + patch source: 'openbsd-weak-alias-fix.patch', plevel: 1, env: env elsif aix? # this forces us to build correctly, in the event that the system locale # is non-standard. - env["LC_ALL"] = "en_US" + env['LC_ALL'] = 'en_US' end update_config_guess - command "./configure" \ + command './configure' \ " --prefix=#{install_dir}/embedded", env: env make "-j #{workers}", env: env diff --git a/omnibus/config/software/libffi.rb b/omnibus/config/software/libffi.rb index 1a88bda47..822969ee4 100644 --- a/omnibus/config/software/libffi.rb +++ b/omnibus/config/software/libffi.rb @@ -16,18 +16,18 @@ # limitations under the License. # -name "libffi" -default_version "3.4.2" +name 'libffi' +default_version '3.4.2' -license "MIT" -license_file "LICENSE" +license 'MIT' +license_file 'LICENSE' skip_transitive_dependency_licensing true # version_list: url=ftp://sourceware.org/pub/libffi/ filter=*.tar.gz -version("3.2.1") { source sha256: "d06ebb8e1d9a22d19e38d63fdb83954253f39bedc5d46232a05645685722ca37" } -version("3.3") { source sha256: "72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056" } -version("3.4.2") { source sha256: "540fb721619a6aba3bdeef7d940d8e9e0e6d2c193595bc243241b77ff9e93620" } +version('3.2.1') { source sha256: 'd06ebb8e1d9a22d19e38d63fdb83954253f39bedc5d46232a05645685722ca37' } +version('3.3') { source sha256: '72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056' } +version('3.4.2') { source sha256: '540fb721619a6aba3bdeef7d940d8e9e0e6d2c193595bc243241b77ff9e93620' } source url: "https://github.com/libffi/libffi/releases/download/v#{version}/libffi-#{version}.tar.gz" relative_path "libffi-#{version}" @@ -35,22 +35,22 @@ relative_path "libffi-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) - env["INSTALL"] = "/opt/freeware/bin/install" if aix? + env['INSTALL'] = '/opt/freeware/bin/install' if aix? # disable option checking as disable-docs is 3.3+ only - configure_command = ["--disable-option-checking", - "--disable-docs"] + configure_command = ['--disable-option-checking', + '--disable-docs'] - patch source: "libffi-3.3-arm64.patch", plevel: 1, env: env if version == "3.3" && mac_os_x? && arm? + patch source: 'libffi-3.3-arm64.patch', plevel: 1, env: env if version == '3.3' && mac_os_x? && arm? # AIX's old version of patch doesn't like the patch here unless aix? # disable multi-os-directory via configure flag (don't use /lib64) # Works on all platforms, and is compatible on 32bit platforms as well - configure_command << "--disable-multi-os-directory" + configure_command << '--disable-multi-os-directory' # add the --disable-multi-os-directory flag to 3.2.1 - patch source: "libffi-3.2.1-disable-multi-os-directory.patch", plevel: 1, env: env if version == "3.2.1" + patch source: 'libffi-3.2.1-disable-multi-os-directory.patch', plevel: 1, env: env if version == '3.2.1' end configure(*configure_command, env: env) diff --git a/omnibus/config/software/libiconv.rb b/omnibus/config/software/libiconv.rb index 7029c74a9..27a9df8bc 100644 --- a/omnibus/config/software/libiconv.rb +++ b/omnibus/config/software/libiconv.rb @@ -19,18 +19,18 @@ # CAUTION - although its not used, external libraries such as nokogiri may pick up an optional dep on # libiconv such that removal of libiconv will break those libraries on upgrade. With an better story around # external gem handling when chef-client is upgraded libconv could be dropped. -name "libiconv" -default_version "1.16" +name 'libiconv' +default_version '1.16' -license "LGPL-2.1" -license_file "COPYING.LIB" +license 'LGPL-2.1' +license_file 'COPYING.LIB' skip_transitive_dependency_licensing true -dependency "config_guess" +dependency 'config_guess' # versions_list: https://ftp.gnu.org/pub/gnu/libiconv/ filter=*.tar.gz -version("1.15") { source sha256: "ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178" } -version("1.16") { source sha256: "e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04" } +version('1.15') { source sha256: 'ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178' } +version('1.16') { source sha256: 'e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04' } source url: "https://mirrors.kernel.org/gnu/libiconv/libiconv-#{version}.tar.gz" @@ -40,10 +40,10 @@ build do env = with_standard_compiler_flags(with_embedded_path) # freebsd 10 needs to be build PIC - env["CFLAGS"] << " -fPIC" if freebsd? + env['CFLAGS'] << ' -fPIC' if freebsd? - update_config_guess(target: "build-aux") - update_config_guess(target: "libcharset/build-aux") + update_config_guess(target: 'build-aux') + update_config_guess(target: 'libcharset/build-aux') configure(env: env) diff --git a/omnibus/config/software/liblzma.rb b/omnibus/config/software/liblzma.rb index 99761af94..f7e36571f 100644 --- a/omnibus/config/software/liblzma.rb +++ b/omnibus/config/software/liblzma.rb @@ -16,19 +16,19 @@ # limitations under the License. # -name "liblzma" -default_version "5.2.5" +name 'liblzma' +default_version '5.2.5' -license "Public-Domain" -license_file "COPYING" +license 'Public-Domain' +license_file 'COPYING' skip_transitive_dependency_licensing true # version_list: url=http://tukaani.org/xz/ filer=*.tar.gz -version("5.2.5") { source sha256: "f6f4910fd033078738bd82bfba4f49219d03b17eb0794eb91efbae419f4aba10" } -version("5.2.4") { source sha256: "b512f3b726d3b37b6dc4c8570e137b9311e7552e8ccbab4d39d47ce5f4177145" } -version("5.2.3") { source sha256: "71928b357d0a09a12a4b4c5fafca8c31c19b0e7d3b8ebb19622e96f26dbf28cb" } -version("5.2.2") { source sha256: "73df4d5d34f0468bd57d09f2d8af363e95ed6cc3a4a86129d2f2c366259902a2" } +version('5.2.5') { source sha256: 'f6f4910fd033078738bd82bfba4f49219d03b17eb0794eb91efbae419f4aba10' } +version('5.2.4') { source sha256: 'b512f3b726d3b37b6dc4c8570e137b9311e7552e8ccbab4d39d47ce5f4177145' } +version('5.2.3') { source sha256: '71928b357d0a09a12a4b4c5fafca8c31c19b0e7d3b8ebb19622e96f26dbf28cb' } +version('5.2.2') { source sha256: '73df4d5d34f0468bd57d09f2d8af363e95ed6cc3a4a86129d2f2c366259902a2' } source url: "http://tukaani.org/xz/xz-#{version}.tar.gz" @@ -39,20 +39,20 @@ build do # liblzma properly uses CFLAGS for C compilation and CPPFLAGS for common # flags used across tools such as windres. Don't put anything in it # that can be misinterpreted by windres. - env["CPPFLAGS"] = "-I#{install_dir}/embedded/include" if windows? + env['CPPFLAGS'] = "-I#{install_dir}/embedded/include" if windows? config_command = [ - "--disable-debug", - "--disable-dependency-tracking", - "--disable-doc", - "--disable-scripts", - "--disable-lzma-links", - "--disable-lzmainfo", - "--disable-lzmadec", - "--disable-xzdec", - "--disable-xz" + '--disable-debug', + '--disable-dependency-tracking', + '--disable-doc', + '--disable-scripts', + '--disable-lzma-links', + '--disable-lzmainfo', + '--disable-lzmadec', + '--disable-xzdec', + '--disable-xz' ] - config_command << "--disable-nls" if windows? + config_command << '--disable-nls' if windows? configure(*config_command, env: env) diff --git a/omnibus/config/software/libmnl.rb b/omnibus/config/software/libmnl.rb index 46e552910..616433a9b 100644 --- a/omnibus/config/software/libmnl.rb +++ b/omnibus/config/software/libmnl.rb @@ -15,14 +15,14 @@ # limitations under the License. # -name "libmnl" -default_version "1.0.4" +name 'libmnl' +default_version '1.0.4' -license "GPL-2.1" -license_file "COPYING" +license 'GPL-2.1' +license_file 'COPYING' skip_transitive_dependency_licensing true -version("1.0.4") { source sha256: "171f89699f286a5854b72b91d06e8f8e3683064c5901fb09d954a9ab6f551f81" } +version('1.0.4') { source sha256: '171f89699f286a5854b72b91d06e8f8e3683064c5901fb09d954a9ab6f551f81' } source url: "https://www.netfilter.org/pub/libmnl/libmnl-#{version}.tar.bz2" diff --git a/omnibus/config/software/libnftnl.rb b/omnibus/config/software/libnftnl.rb index c298c82ba..07bae1290 100644 --- a/omnibus/config/software/libnftnl.rb +++ b/omnibus/config/software/libnftnl.rb @@ -15,14 +15,14 @@ # limitations under the License. # -name "libnftnl" -default_version "1.2.0" +name 'libnftnl' +default_version '1.2.0' -license "GPL-2.1" -license_file "COPYING" +license 'GPL-2.1' +license_file 'COPYING' skip_transitive_dependency_licensing true -version("1.2.0") { source sha256: "90b01fddfe9be8c3245c3ba5ff5a4424a8df708828f92b2b361976b658c074f5" } +version('1.2.0') { source sha256: '90b01fddfe9be8c3245c3ba5ff5a4424a8df708828f92b2b361976b658c074f5' } source url: "https://www.netfilter.org/pub/libnftnl/libnftnl-#{version}.tar.bz2" diff --git a/omnibus/config/software/libossp-uuid.rb b/omnibus/config/software/libossp-uuid.rb index 9961e0544..61f899ef7 100644 --- a/omnibus/config/software/libossp-uuid.rb +++ b/omnibus/config/software/libossp-uuid.rb @@ -16,18 +16,18 @@ # limitations under the License. # -name "libossp-uuid" -default_version "1.6.2" +name 'libossp-uuid' +default_version '1.6.2' -license "MIT" -license_file "README" +license 'MIT' +license_file 'README' skip_transitive_dependency_licensing true -dependency "config_guess" +dependency 'config_guess' # version_list: url=https://www.mirrorservice.org/sites/ftp.ossp.org/pkg/lib/uuid/ filter=*.tar.gz -version("1.6.2") { source sha256: "11a615225baa5f8bb686824423f50e4427acd3f70d394765bdff32801f0fd5b0" } +version('1.6.2') { source sha256: '11a615225baa5f8bb686824423f50e4427acd3f70d394765bdff32801f0fd5b0' } # ftp on ftp.ossp.org is unavaiable so we must use another mirror site. source url: "https://www.mirrorservice.org/sites/ftp.ossp.org/pkg/lib/uuid/uuid-#{version}.tar.gz" @@ -39,7 +39,7 @@ build do update_config_guess - command "./configure" \ + command './configure' \ " --prefix=#{install_dir}/embedded", env: env make "-j #{workers}", env: env diff --git a/omnibus/config/software/libtool.rb b/omnibus/config/software/libtool.rb index f9d7d6e03..89198dcca 100644 --- a/omnibus/config/software/libtool.rb +++ b/omnibus/config/software/libtool.rb @@ -16,21 +16,21 @@ # limitations under the License. # -name "libtool" -default_version "2.4.6" +name 'libtool' +default_version '2.4.6' -license "GPL-2.0" -license_file "COPYING" +license 'GPL-2.0' +license_file 'COPYING' skip_transitive_dependency_licensing true -dependency "m4" -dependency "config_guess" +dependency 'm4' +dependency 'config_guess' # version_list: url=https://ftp.gnu.org/gnu/libtool/ filter=*.tar.gz -version("2.4.6") { source sha256: "e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3" } -version("2.4.2") { source sha256: "b38de44862a987293cd3d8dfae1c409d514b6c4e794ebc93648febf9afc38918" } -version("2.4") { source sha256: "13df57ab63a94e196c5d6e95d64e53262834fe780d5e82c28f177f9f71ddf62e" } +version('2.4.6') { source sha256: 'e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3' } +version('2.4.2') { source sha256: 'b38de44862a987293cd3d8dfae1c409d514b6c4e794ebc93648febf9afc38918' } +version('2.4') { source sha256: '13df57ab63a94e196c5d6e95d64e53262834fe780d5e82c28f177f9f71ddf62e' } source url: "https://mirrors.kernel.org/gnu/libtool/libtool-#{version}.tar.gz" @@ -40,19 +40,19 @@ build do env = with_standard_compiler_flags(with_embedded_path) update_config_guess - update_config_guess(target: "libltdl/config") + update_config_guess(target: 'libltdl/config') if aix? - env["M4"] = "/opt/freeware/bin/m4" + env['M4'] = '/opt/freeware/bin/m4' elsif solaris2? # We hit this bug on Solaris11 platforms bug#14291: libtool 2.4.2 fails to build due to macro_revision reversion # The problem occurs with LANG=en_US.UTF-8 but not with LANG=C - env["LANG"] = "C" + env['LANG'] = 'C' end - command "./configure" \ + command './configure' \ " --prefix=#{install_dir}/embedded", env: env make env: env - make "install", env: env + make 'install', env: env end diff --git a/omnibus/config/software/libxml2.rb b/omnibus/config/software/libxml2.rb index c113b0b16..c52ed2fe2 100644 --- a/omnibus/config/software/libxml2.rb +++ b/omnibus/config/software/libxml2.rb @@ -16,21 +16,21 @@ # limitations under the License. # -name "libxml2" -default_version "2.9.10" # 2.9.12 is not properly building as of 5.20.21 +name 'libxml2' +default_version '2.9.10' # 2.9.12 is not properly building as of 5.20.21 -license "MIT" -license_file "COPYING" +license 'MIT' +license_file 'COPYING' skip_transitive_dependency_licensing true -dependency "zlib" -dependency "liblzma" -dependency "config_guess" +dependency 'zlib' +dependency 'liblzma' +dependency 'config_guess' # version_list: url=ftp://xmlsoft.org/libxml2/ filter=libxml2-*.tar.gz -version("2.9.12") { source sha256: "c8d6681e38c56f172892c85ddc0852e1fd4b53b4209e7f4ebf17f7e2eae71d92" } -version("2.9.10") { source sha256: "aafee193ffb8fe0c82d4afef6ef91972cbaf5feea100edc2f262750611b4be1f" } -version("2.9.9") { source sha256: "94fb70890143e3c6549f265cee93ec064c80a84c42ad0f23e85ee1fd6540a871" } +version('2.9.12') { source sha256: 'c8d6681e38c56f172892c85ddc0852e1fd4b53b4209e7f4ebf17f7e2eae71d92' } +version('2.9.10') { source sha256: 'aafee193ffb8fe0c82d4afef6ef91972cbaf5feea100edc2f262750611b4be1f' } +version('2.9.9') { source sha256: '94fb70890143e3c6549f265cee93ec064c80a84c42ad0f23e85ee1fd6540a871' } source url: "ftp://xmlsoft.org/libxml2/libxml2-#{version}.tar.gz" @@ -42,16 +42,16 @@ build do configure_command = [ "--with-zlib=#{install_dir}/embedded", "--with-lzma=#{install_dir}/embedded", - "--with-sax1", # required for nokogiri to compile - "--without-iconv", - "--without-python", - "--without-icu", - "--without-debug", - "--without-mem-debug", - "--without-run-debug", - "--without-legacy", # we don't need legacy interfaces - "--without-catalog", - "--without-docbook" + '--with-sax1', # required for nokogiri to compile + '--without-iconv', + '--without-python', + '--without-icu', + '--without-debug', + '--without-mem-debug', + '--without-run-debug', + '--without-legacy', # we don't need legacy interfaces + '--without-catalog', + '--without-docbook' ] update_config_guess diff --git a/omnibus/config/software/libyaml.rb b/omnibus/config/software/libyaml.rb index 81f8a62ce..afd8e8ac2 100644 --- a/omnibus/config/software/libyaml.rb +++ b/omnibus/config/software/libyaml.rb @@ -16,17 +16,17 @@ # limitations under the License. # -name "libyaml" -default_version "0.1.7" +name 'libyaml' +default_version '0.1.7' -license "MIT" -license_file "LICENSE" +license 'MIT' +license_file 'LICENSE' skip_transitive_dependency_licensing true -dependency "config_guess" +dependency 'config_guess' -version("0.1.7") { source sha256: "8088e457264a98ba451a90b8661fcb4f9d6f478f7265d48322a196cec2480729" } +version('0.1.7') { source sha256: '8088e457264a98ba451a90b8661fcb4f9d6f478f7265d48322a196cec2480729' } source url: "http://pyyaml.org/download/libyaml/yaml-#{version}.tar.gz" @@ -35,13 +35,13 @@ relative_path "yaml-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) - update_config_guess(target: "config") + update_config_guess(target: 'config') - configure "--enable-shared", env: env + configure '--enable-shared', env: env # Windows had worse automake/libtool version issues. # Just patch the output instead. - patch source: "v0.1.6.windows-configure.patch", plevel: 1, env: env if version >= "0.1.6" && windows? + patch source: 'v0.1.6.windows-configure.patch', plevel: 1, env: env if version >= '0.1.6' && windows? make "-j #{workers}", env: env make "-j #{workers} install", env: env diff --git a/omnibus/config/software/linenoise.rb b/omnibus/config/software/linenoise.rb index 27bd61744..8d8025b02 100644 --- a/omnibus/config/software/linenoise.rb +++ b/omnibus/config/software/linenoise.rb @@ -15,22 +15,22 @@ # limitations under the License. # -name "linenoise" -description "A small self-contained alternative to readline and libedit" +name 'linenoise' +description 'A small self-contained alternative to readline and libedit' -license_file "LICENSE" +license_file 'LICENSE' skip_transitive_dependency_licensing true -source github: "antirez/linenoise" -default_version "master" +source github: 'antirez/linenoise' +default_version 'master' build do env = with_standard_compiler_flags(with_embedded_path) - cc = env.fetch("CC", "gcc") + cc = env.fetch('CC', 'gcc') command "#{cc} -c linenoise.c -o linenoise.o -fPIC", env: env command "#{cc} -shared -o liblinenoise.so linenoise.o -lm", env: env - copy "liblinenoise.so", "#{install_dir}/embedded/lib/" - copy "linenoise.h", "#{install_dir}/embedded/include/" + copy 'liblinenoise.so', "#{install_dir}/embedded/lib/" + copy 'linenoise.h', "#{install_dir}/embedded/include/" end diff --git a/omnibus/config/software/m4.rb b/omnibus/config/software/m4.rb index 344a51663..52a40bbb9 100644 --- a/omnibus/config/software/m4.rb +++ b/omnibus/config/software/m4.rb @@ -17,15 +17,15 @@ # # expeditor/ignore: deprecated 2021-04 -name "m4" -default_version "1.4.19" +name 'm4' +default_version '1.4.19' -license "GPL-3.0" -license_file "COPYING" +license 'GPL-3.0' +license_file 'COPYING' skip_transitive_dependency_licensing true -version("1.4.19") { source sha256: "3be4a26d825ffdfda52a56fc43246456989a3630093cced3fbddf4771ee58a70" } -version("1.4.18") { source sha256: "ab2633921a5cd38e48797bf5521ad259bdc4b979078034a3b790d7fec5493fab" } +version('1.4.19') { source sha256: '3be4a26d825ffdfda52a56fc43246456989a3630093cced3fbddf4771ee58a70' } +version('1.4.18') { source sha256: 'ab2633921a5cd38e48797bf5521ad259bdc4b979078034a3b790d7fec5493fab' } source url: "https://mirrors.kernel.org/gnu/m4/m4-#{version}.tar.gz" @@ -34,7 +34,7 @@ relative_path "m4-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) - patch source: "m4-1.4.18-glibc-change-work-around.patch", plevel: 1, env: env if version == "1.4.18" + patch source: 'm4-1.4.18-glibc-change-work-around.patch', plevel: 1, env: env if version == '1.4.18' command "./configure --prefix=#{install_dir}/embedded", env: env diff --git a/omnibus/config/software/ncurses.rb b/omnibus/config/software/ncurses.rb index a009e5142..6701d34b8 100644 --- a/omnibus/config/software/ncurses.rb +++ b/omnibus/config/software/ncurses.rb @@ -15,11 +15,11 @@ # limitations under the License. # -name "ncurses" -default_version "6.2" +name 'ncurses' +default_version '6.2' -license "MIT" -license_file "COPYING" +license 'MIT' +license_file 'COPYING' # This quickly gets rate-limit and blocked on self-hosted runners. # license_file "http://invisible-island.net/ncurses/ncurses-license.html" @@ -27,13 +27,13 @@ license_file "COPYING" skip_transitive_dependency_licensing true -dependency "libtool" -dependency "config_guess" +dependency 'libtool' +dependency 'config_guess' # versions_list: https://ftp.gnu.org/gnu/ncurses/ filter=*.tar.gz -version("6.2") { source sha256: "30306e0c76e0f9f1f0de987cf1c82a5c21e1ce6568b9227f7da5b71cbea86c9d" } -version("6.1") { source sha256: "aa057eeeb4a14d470101eff4597d5833dcef5965331be3528c08d99cebaa0d17" } -version("5.9") { source sha256: "9046298fb440324c9d4135ecea7879ffed8546dd1b58e59430ea07a4633f563b" } +version('6.2') { source sha256: '30306e0c76e0f9f1f0de987cf1c82a5c21e1ce6568b9227f7da5b71cbea86c9d' } +version('6.1') { source sha256: 'aa057eeeb4a14d470101eff4597d5833dcef5965331be3528c08d99cebaa0d17' } +version('5.9') { source sha256: '9046298fb440324c9d4135ecea7879ffed8546dd1b58e59430ea07a4633f563b' } source url: "https://mirrors.kernel.org/gnu/ncurses/ncurses-#{version}.tar.gz" @@ -56,37 +56,37 @@ relative_path "ncurses-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) - env.delete("CPPFLAGS") + env.delete('CPPFLAGS') if smartos? # SmartOS is Illumos Kernel, plus NetBSD userland with a GNU toolchain. # These patches are taken from NetBSD pkgsrc and provide GCC 4.7.0 # compatibility: # http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/devel/ncurses/patches/ - patch source: "patch-aa", plevel: 0, env: env - patch source: "patch-ab", plevel: 0, env: env - patch source: "patch-ac", plevel: 0, env: env - patch source: "patch-ad", plevel: 0, env: env - patch source: "patch-cxx_cursesf.h", plevel: 0, env: env - patch source: "patch-cxx_cursesm.h", plevel: 0, env: env + patch source: 'patch-aa', plevel: 0, env: env + patch source: 'patch-ab', plevel: 0, env: env + patch source: 'patch-ac', plevel: 0, env: env + patch source: 'patch-ad', plevel: 0, env: env + patch source: 'patch-cxx_cursesf.h', plevel: 0, env: env + patch source: 'patch-cxx_cursesm.h', plevel: 0, env: env # Chef patches - # The configure script from the pristine tarball detects xopen_source_extended incorrectly. # Manually working around a false positive. - patch source: "ncurses-5.9-solaris-xopen_source_extended-detection.patch", plevel: 0, env: env + patch source: 'ncurses-5.9-solaris-xopen_source_extended-detection.patch', plevel: 0, env: env end update_config_guess # AIX's old version of patch doesn't like the patches here - if !aix? && (version == "5.9") + if !aix? && (version == '5.9') # Patch to add support for GCC 5, doesn't break previous versions - patch source: "ncurses-5.9-gcc-5.patch", plevel: 1, env: env + patch source: 'ncurses-5.9-gcc-5.patch', plevel: 1, env: env end if mac_os_x? || # Clang became the default compiler in FreeBSD 10+ - (freebsd? && ohai["os_version"].to_i >= 1_000_024) + (freebsd? && ohai['os_version'].to_i >= 1_000_024) # References: # https://github.com/Homebrew/homebrew-dupes/issues/43 # http://invisible-island.net/ncurses/NEWS.html#t20110409 @@ -94,21 +94,21 @@ build do # Patches ncurses for clang compiler. Changes have been accepted into # upstream, but occurred shortly after the 5.9 release. We should be able # to remove this after upgrading to any release created after June 2012 - patch source: "ncurses-clang.patch", env: env + patch source: 'ncurses-clang.patch', env: env end - patch source: "patch-ncurses_tinfo_lib__baudrate.c", plevel: 0, env: env if openbsd? + patch source: 'patch-ncurses_tinfo_lib__baudrate.c', plevel: 0, env: env if openbsd? configure_command = [ - "./configure", + './configure', "--prefix=#{install_dir}/embedded", - "--enable-overwrite", - "--with-shared", - "--with-termlib", - "--without-ada", - "--without-cxx-binding", - "--without-debug", - "--without-manpages" + '--enable-overwrite', + '--with-shared', + '--with-termlib', + '--without-ada', + '--without-cxx-binding', + '--without-debug', + '--without-manpages' ] if aix? @@ -120,32 +120,32 @@ build do configure_command << "--with-libtool=\"#{install_dir}/embedded/bin/libtool\"" # stick with just the shared libs on AIX - configure_command << "--without-normal" + configure_command << '--without-normal' # ncurses's ./configure incorrectly # "figures out" ARFLAGS if you try # to set them yourself - env.delete("ARFLAGS") + env.delete('ARFLAGS') # use gnu install from the coreutils IBM rpm package - env["INSTALL"] = "/opt/freeware/bin/install" + env['INSTALL'] = '/opt/freeware/bin/install' end - command configure_command.join(" "), env: env + command configure_command.join(' '), env: env # unfortunately, libtool may try to link to libtinfo # before it has been assembled; so we have to build in serial - make "libs", env: env if aix? + make 'libs', env: env if aix? make "-j #{workers}", env: env make "-j #{workers} install", env: env # Build non-wide-character libraries - make "distclean", env: env - configure_command << "--enable-widec" + make 'distclean', env: env + configure_command << '--enable-widec' - command configure_command.join(" "), env: env - make "libs", env: env if aix? + command configure_command.join(' '), env: env + make 'libs', env: env if aix? make "-j #{workers}", env: env # Installing the non-wide libraries will also install the non-wide diff --git a/omnibus/config/software/nftables.rb b/omnibus/config/software/nftables.rb index 2c3a393b8..1a2828091 100644 --- a/omnibus/config/software/nftables.rb +++ b/omnibus/config/software/nftables.rb @@ -14,41 +14,41 @@ # See the License for the specific language governing permissions and # limitations under the License. # -name "nftables" +name 'nftables' -license_file "COPYING" +license_file 'COPYING' skip_transitive_dependency_licensing true # Some weirdness in the official release package so use git and switch to tag # default_version "0.9.9" # source url: "https://www.netfilter.org/pub/nftables/nftables-#{version}.tar.bz2" # version("0.9.9") { source sha256: "76ef2dc7fd0d79031a8369487739a217ca83996b3a746cec5bda79da11e3f1b4" } -source git: "git://git.netfilter.org/nftables" -default_version "v0.9.9" +source git: 'git://git.netfilter.org/nftables' +default_version 'v0.9.9' relative_path "#{name}-#{version}" -dependency "gmp" -dependency "m4" -dependency "bison" -dependency "flex" -dependency "libmnl" -dependency "libnftnl" -dependency "libtool" -dependency "linenoise" -dependency "pkg-config" +dependency 'gmp' +dependency 'm4' +dependency 'bison' +dependency 'flex' +dependency 'libmnl' +dependency 'libnftnl' +dependency 'libtool' +dependency 'linenoise' +dependency 'pkg-config' build do env = with_standard_compiler_flags(with_embedded_path) configure_cmd = [ - "./configure", + './configure', "--prefix=#{install_dir}/embedded", - "--disable-debug", - "--disable-man-doc", - "--with-cli=linenoise" # readline seems to fail to be detected and libedit fails with missing "editline/history.h" + '--disable-debug', + '--disable-man-doc', + '--with-cli=linenoise' # readline seems to fail to be detected and libedit fails with missing "editline/history.h" ] - command "./autogen.sh", env: env - command configure_cmd.join(" "), env: env + command './autogen.sh', env: env + command configure_cmd.join(' '), env: env make "-j #{workers}", env: env make "-j #{workers} install", env: env end diff --git a/omnibus/config/software/nginx.rb b/omnibus/config/software/nginx.rb index a8d4cabbe..3039ff5c9 100644 --- a/omnibus/config/software/nginx.rb +++ b/omnibus/config/software/nginx.rb @@ -15,37 +15,37 @@ # limitations under the License. # -name "nginx" -default_version "1.20.1" +name 'nginx' +default_version '1.20.1' -dependency "pcre" -dependency "openssl" -dependency "zlib" +dependency 'pcre' +dependency 'openssl' +dependency 'zlib' -license "BSD-2-Clause" -license_file "LICENSE" +license 'BSD-2-Clause' +license_file 'LICENSE' source url: "https://nginx.org/download/nginx-#{version}.tar.gz" # versions_list: https://nginx.org/download/ filter=*.tar.gz -version("1.20.1") { source sha256: "e462e11533d5c30baa05df7652160ff5979591d291736cfa5edb9fd2edb48c49" } -version("1.19.9") { source sha256: "2e35dff06a9826e8aca940e9e8be46b7e4b12c19a48d55bfc2dc28fc9cc7d841" } -version("1.19.8") { source sha256: "308919b1a1359315a8066578472f998f14cb32af8de605a3743acca834348b05" } -version("1.18.0") { source sha256: "4c373e7ab5bf91d34a4f11a0c9496561061ba5eee6020db272a17a7228d35f99" } -version("1.14.2") { source sha256: "002d9f6154e331886a2dd4e6065863c9c1cf8291ae97a1255308572c02be9797" } -version("1.14.0") { source sha256: "5d15becbf69aba1fe33f8d416d97edd95ea8919ea9ac519eff9bafebb6022cb5" } +version('1.20.1') { source sha256: 'e462e11533d5c30baa05df7652160ff5979591d291736cfa5edb9fd2edb48c49' } +version('1.19.9') { source sha256: '2e35dff06a9826e8aca940e9e8be46b7e4b12c19a48d55bfc2dc28fc9cc7d841' } +version('1.19.8') { source sha256: '308919b1a1359315a8066578472f998f14cb32af8de605a3743acca834348b05' } +version('1.18.0') { source sha256: '4c373e7ab5bf91d34a4f11a0c9496561061ba5eee6020db272a17a7228d35f99' } +version('1.14.2') { source sha256: '002d9f6154e331886a2dd4e6065863c9c1cf8291ae97a1255308572c02be9797' } +version('1.14.0') { source sha256: '5d15becbf69aba1fe33f8d416d97edd95ea8919ea9ac519eff9bafebb6022cb5' } relative_path "nginx-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) - command "./configure" \ + command './configure' \ " --prefix=#{install_dir}/embedded" \ - " --with-http_ssl_module" \ - " --with-http_stub_status_module" \ - " --with-ipv6" \ - " --with-debug" \ + ' --with-http_ssl_module' \ + ' --with-http_stub_status_module' \ + ' --with-ipv6' \ + ' --with-debug' \ " --with-cc-opt=\"-L#{install_dir}/embedded/lib -I#{install_dir}/embedded/include\"" \ " --with-ld-opt=-L#{install_dir}/embedded/lib", env: env diff --git a/omnibus/config/software/nodejs.rb b/omnibus/config/software/nodejs.rb index 8ee32d24f..2c0834227 100644 --- a/omnibus/config/software/nodejs.rb +++ b/omnibus/config/software/nodejs.rb @@ -1,26 +1,26 @@ # frozen_string_literal: true -name "nodejs" -description "NodeJS" -default_version "14.18.3" -license_file "LICENSE" +name 'nodejs' +description 'NodeJS' +default_version '14.18.3' +license_file 'LICENSE' source url: "https://github.com/nodejs/node/archive/refs/tags/v#{version}.tar.gz" -version("16.6.2") do - source sha256: "9b539b1ea5e3fbd173fcbaae97088401b228c36c2076c98d04c73802713bbb73" +version('16.6.2') do + source sha256: '9b539b1ea5e3fbd173fcbaae97088401b228c36c2076c98d04c73802713bbb73' end -version("14.18.3") do - source sha256: "0f20571bc6d7d2f4b12b133768017c913a1a40c0c600ccd553b029842f7827d0" +version('14.18.3') do + source sha256: '0f20571bc6d7d2f4b12b133768017c913a1a40c0c600ccd553b029842f7827d0' end -version("14.18.2") do - source sha256: "2d3b55fa3ff98acb5a8eb26ac73c1963b38e62c2428c883fc9debdfa54efcb6c" +version('14.18.2') do + source sha256: '2d3b55fa3ff98acb5a8eb26ac73c1963b38e62c2428c883fc9debdfa54efcb6c' end -version("14.18.1") do - source sha256: "ee873d13ce00680c682be27132a420b3b5620f17549906dda7e2398b56ba41b0" +version('14.18.1') do + source sha256: 'ee873d13ce00680c682be27132a420b3b5620f17549906dda7e2398b56ba41b0' end -dependency "python" +dependency 'python' relative_path "node-#{version}" diff --git a/omnibus/config/software/omnibus-ctl.rb b/omnibus/config/software/omnibus-ctl.rb index d44334c53..2024c168e 100644 --- a/omnibus/config/software/omnibus-ctl.rb +++ b/omnibus/config/software/omnibus-ctl.rb @@ -16,30 +16,30 @@ # limitations under the License. # -name "omnibus-ctl" -default_version "v0.6.0" +name 'omnibus-ctl' +default_version 'v0.6.0' -license "Apache-2.0" -license_file "https://raw.githubusercontent.com/chef/omnibus-ctl/master/LICENSE" +license 'Apache-2.0' +license_file 'https://raw.githubusercontent.com/chef/omnibus-ctl/master/LICENSE' # Even though omnibus-ctl is a gem, it does not have any dependencies. skip_transitive_dependency_licensing true -dependency "rubygems" -dependency "ruby" +dependency 'rubygems' +dependency 'ruby' # versions_list: https://github.com/chef/omnibus-ctl/tags filter=*.tar.gz -source git: "https://github.com/chef/omnibus-ctl.git" +source git: 'https://github.com/chef/omnibus-ctl.git' -relative_path "omnibus-ctl" +relative_path 'omnibus-ctl' build do env = with_standard_compiler_flags(with_embedded_path) # Remove existing built gems in case they exist in the current dir - delete "omnibus-ctl-*.gem" + delete 'omnibus-ctl-*.gem' - gem "build omnibus-ctl.gemspec", env: env - gem "install omnibus-ctl-*.gem --no-document ", env: env + gem 'build omnibus-ctl.gemspec', env: env + gem 'install omnibus-ctl-*.gem --no-document ', env: env touch "#{install_dir}/embedded/service/omnibus-ctl/.gitkeep" end diff --git a/omnibus/config/software/openssl.rb b/omnibus/config/software/openssl.rb index a2f6368dd..571136b86 100644 --- a/omnibus/config/software/openssl.rb +++ b/omnibus/config/software/openssl.rb @@ -16,25 +16,25 @@ # limitations under the License. # -name "openssl" +name 'openssl' -license "OpenSSL" -license_file "LICENSE" +license 'OpenSSL' +license_file 'LICENSE' skip_transitive_dependency_licensing true -dependency "cacerts" -dependency "openssl-fips" if fips_mode? +dependency 'cacerts' +dependency 'openssl-fips' if fips_mode? -default_version "1.1.1k" # do_not_auto_update +default_version '1.1.1k' # do_not_auto_update # Openssl builds engines as libraries into a special directory. We need to include # that directory in lib_dirs so omnibus can sign them during macOS deep signing. lib_dirs lib_dirs.concat(["#{install_dir}/embedded/lib/engines"]) -lib_dirs lib_dirs.concat(["#{install_dir}/embedded/lib/engines-1.1"]) if version.start_with?("1.1") +lib_dirs lib_dirs.concat(["#{install_dir}/embedded/lib/engines-1.1"]) if version.start_with?('1.1') # OpenSSL source ships with broken symlinks which windows doesn't allow. # So skip error checking with `extract: :lax_tar` -if version.satisfies?("> 1.0.2u") && version.satisfies?("< 1.1.0") +if version.satisfies?('> 1.0.2u') && version.satisfies?('< 1.1.0') # 1.0.2u was the last public release of 1.0.2. Subsequent releases come from a support contract with OpenSSL Software Services source url: "https://s3.amazonaws.com/chef-releng/openssl/openssl-#{version}.tar.gz", extract: :lax_tar else @@ -44,81 +44,81 @@ else source url: "https://www.openssl.org/source/openssl-#{version}.tar.gz", extract: :lax_tar end -version("1.1.1k") { source sha256: "892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" } -version("1.1.1j") { source sha256: "aaf2fcb575cdf6491b98ab4829abf78a3dec8402b8b81efc8f23c00d443981bf" } -version("1.1.1i") { source sha256: "e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242" } +version('1.1.1k') { source sha256: '892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5' } +version('1.1.1j') { source sha256: 'aaf2fcb575cdf6491b98ab4829abf78a3dec8402b8b81efc8f23c00d443981bf' } +version('1.1.1i') { source sha256: 'e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242' } -version("1.0.2y") { source sha256: "4882ec99f8e147ab26375da8a6af92efae69b6aef505234764f8cd00a1b81ffc" } -version("1.0.2x") { source sha256: "79cb4e20004a0d1301210aee7e154ddfba3d6a33d0df1f6c5d3257cb915a59c9" } -version("1.0.2w") { source sha256: "a675ad1a9df59015cebcdf713de76a422347c5d99f11232fe75758143defd680" } -version("1.0.2i") { source sha256: "9287487d11c9545b6efb287cdb70535d4e9b284dd10d51441d9b9963d000de6f" } +version('1.0.2y') { source sha256: '4882ec99f8e147ab26375da8a6af92efae69b6aef505234764f8cd00a1b81ffc' } +version('1.0.2x') { source sha256: '79cb4e20004a0d1301210aee7e154ddfba3d6a33d0df1f6c5d3257cb915a59c9' } +version('1.0.2w') { source sha256: 'a675ad1a9df59015cebcdf713de76a422347c5d99f11232fe75758143defd680' } +version('1.0.2i') { source sha256: '9287487d11c9545b6efb287cdb70535d4e9b284dd10d51441d9b9963d000de6f' } relative_path "openssl-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) if aix? - env["M4"] = "/opt/freeware/bin/m4" + env['M4'] = '/opt/freeware/bin/m4' elsif mac_os_x? && arm? - env["CFLAGS"] << " -Qunused-arguments" + env['CFLAGS'] << ' -Qunused-arguments' elsif freebsd? # Should this just be in standard_compiler_flags? - env["LDFLAGS"] += " -Wl,-rpath,#{install_dir}/embedded/lib" + env['LDFLAGS'] += " -Wl,-rpath,#{install_dir}/embedded/lib" elsif windows? # XXX: OpenSSL explicitly sets -march=i486 and expects that to be honored. # It has OPENSSL_IA32_SSE2 controlling whether it emits optimized SSE2 code # and the 32-bit calling convention involving XMM registers is... vague. # Do not enable SSE2 generally because the hand optimized assembly will # overwrite registers that mingw expects to get preserved. - env["CFLAGS"] = "-I#{install_dir}/embedded/include" - env["CPPFLAGS"] = env["CFLAGS"] - env["CXXFLAGS"] = env["CFLAGS"] + env['CFLAGS'] = "-I#{install_dir}/embedded/include" + env['CPPFLAGS'] = env['CFLAGS'] + env['CXXFLAGS'] = env['CFLAGS'] end configure_args = [ "--prefix=#{install_dir}/embedded", - "no-unit-test", - "no-comp", - "no-idea", - "no-mdc2", - "no-rc5", - "no-ssl2", - "no-ssl3", - "no-zlib", - "shared" + 'no-unit-test', + 'no-comp', + 'no-idea', + 'no-mdc2', + 'no-rc5', + 'no-ssl2', + 'no-ssl3', + 'no-zlib', + 'shared' ] - configure_args += ["--with-fipsdir=#{install_dir}/embedded", "fips"] if fips_mode? + configure_args += ["--with-fipsdir=#{install_dir}/embedded", 'fips'] if fips_mode? configure_cmd = if aix? - "perl ./Configure aix64-cc" + 'perl ./Configure aix64-cc' elsif mac_os_x? - intel? ? "./Configure darwin64-x86_64-cc" : "./Configure darwin64-arm64-cc no-asm" + intel? ? './Configure darwin64-x86_64-cc' : './Configure darwin64-arm64-cc no-asm' elsif smartos? - "/bin/bash ./Configure solaris64-x86_64-gcc -static-libgcc" + '/bin/bash ./Configure solaris64-x86_64-gcc -static-libgcc' elsif omnios? - "/bin/bash ./Configure solaris-x86-gcc" + '/bin/bash ./Configure solaris-x86-gcc' elsif solaris2? - platform = sparc? ? "solaris64-sparcv9-gcc" : "solaris64-x86_64-gcc" - if version.satisfies?("< 1.1.0") + platform = sparc? ? 'solaris64-sparcv9-gcc' : 'solaris64-x86_64-gcc' + if version.satisfies?('< 1.1.0') "/bin/bash ./Configure #{platform} -static-libgcc" else "./Configure #{platform} -static-libgcc" end elsif windows? - platform = windows_arch_i386? ? "mingw" : "mingw64" + platform = windows_arch_i386? ? 'mingw' : 'mingw64' "perl.exe ./Configure #{platform}" else prefix = if linux? && ppc64? - "./Configure linux-ppc64" + './Configure linux-ppc64' elsif linux? && s390x? # With gcc > 4.3 on s390x there is an error building # with inline asm enabled - "./Configure linux64-s390x -DOPENSSL_NO_INLINE_ASM" + './Configure linux64-s390x -DOPENSSL_NO_INLINE_ASM' else - "./config" + './config' end "#{prefix} disable-gost" end @@ -126,38 +126,38 @@ build do patch_env = if aix? # This enables omnibus to use 'makedepend' # from fileset 'X11.adt.imake' (AIX install media) - env["PATH"] = "/usr/lpp/X11/bin:#{ENV["PATH"]}" + env['PATH'] = "/usr/lpp/X11/bin:#{ENV['PATH']}" penv = env.dup - penv["PATH"] = "/opt/freeware/bin:#{env["PATH"]}" + penv['PATH'] = "/opt/freeware/bin:#{env['PATH']}" penv else env end - if version.start_with? "1.0" - patch source: "openssl-1.0.1f-do-not-build-docs.patch", env: patch_env - elsif version.start_with? "1.1" - patch source: "openssl-1.1.0f-do-not-install-docs.patch", env: patch_env + if version.start_with? '1.0' + patch source: 'openssl-1.0.1f-do-not-build-docs.patch', env: patch_env + elsif version.start_with? '1.1' + patch source: 'openssl-1.1.0f-do-not-install-docs.patch', env: patch_env end - patch source: "openssl-1.0.2x-darwin-arm64.patch" if version.start_with?("1.0.2") && mac_os_x? && arm? + patch source: 'openssl-1.0.2x-darwin-arm64.patch' if version.start_with?('1.0.2') && mac_os_x? && arm? - if version.start_with?("1.0.2") && windows? + if version.start_with?('1.0.2') && windows? # Patch Makefile.org to update the compiler flags/options table for mingw. - patch source: "openssl-1.0.1q-fix-compiler-flags-table-for-msys.patch", env: env + patch source: 'openssl-1.0.1q-fix-compiler-flags-table-for-msys.patch', env: env end # Out of abundance of caution, we put the feature flags first and then # the crazy platform specific compiler flags at the end. - configure_args << env["CFLAGS"] << env["LDFLAGS"] + configure_args << env['CFLAGS'] << env['LDFLAGS'] - configure_command = configure_args.unshift(configure_cmd).join(" ") + configure_command = configure_args.unshift(configure_cmd).join(' ') command configure_command, env: env, in_msys_bash: true - patch source: "openssl-1.0.1j-windows-relocate-dll.patch", env: env if version.start_with?("1.0.2") && windows? + patch source: 'openssl-1.0.1j-windows-relocate-dll.patch', env: env if version.start_with?('1.0.2') && windows? - make "depend", env: env + make 'depend', env: env # make -j N on openssl is not reliable make "-j #{workers}", env: env if aix? @@ -168,7 +168,7 @@ build do # can't install the library that is already in use. Ideally we would patch openssl # to make this not be an issue. # Bug Ref: http://rt.openssl.org/Ticket/Display.html?id=2986&user=guest&pass=guest - command "sudo /usr/sbin/slibclean", env: env + command 'sudo /usr/sbin/slibclean', env: env end make "-j #{workers} install", env: env end diff --git a/omnibus/config/software/pcre.rb b/omnibus/config/software/pcre.rb index 7eb6145dc..d0de3a34b 100644 --- a/omnibus/config/software/pcre.rb +++ b/omnibus/config/software/pcre.rb @@ -16,21 +16,21 @@ # limitations under the License. # -name "pcre" -default_version "8.44" +name 'pcre' +default_version '8.44' -license "BSD-2-Clause" -license_file "LICENCE" +license 'BSD-2-Clause' +license_file 'LICENCE' skip_transitive_dependency_licensing true -dependency "libedit" -dependency "ncurses" -dependency "config_guess" +dependency 'libedit' +dependency 'ncurses' +dependency 'config_guess' # version_list: url=https://sourceforge.net/projects/pcre/files/pcre/ filter=*.tar.gz -version("8.44") { source sha256: "aecafd4af3bd0f3935721af77b889d9024b2e01d96b58471bd91a3063fb47728" } -version("8.38") { source sha256: "9883e419c336c63b0cb5202b09537c140966d585e4d0da66147dc513da13e629" } +version('8.44') { source sha256: 'aecafd4af3bd0f3935721af77b889d9024b2e01d96b58471bd91a3063fb47728' } +version('8.38') { source sha256: '9883e419c336c63b0cb5202b09537c140966d585e4d0da66147dc513da13e629' } source url: "http://downloads.sourceforge.net/project/pcre/pcre/#{version}/pcre-#{version}.tar.gz" @@ -41,13 +41,13 @@ build do update_config_guess - command "./configure" \ + command './configure' \ " --prefix=#{install_dir}/embedded" \ - " --disable-cpp" \ - " --enable-utf" \ - " --enable-unicode-properties" \ - " --enable-pcretest-libedit" \ - "--disable-pcregrep-jit", env: env + ' --disable-cpp' \ + ' --enable-utf' \ + ' --enable-unicode-properties' \ + ' --enable-pcretest-libedit' \ + '--disable-pcregrep-jit', env: env make "-j #{workers}", env: env make "-j #{workers} install", env: env diff --git a/omnibus/config/software/perl-thread-queue.rb b/omnibus/config/software/perl-thread-queue.rb index 2c608f223..0705ac84b 100644 --- a/omnibus/config/software/perl-thread-queue.rb +++ b/omnibus/config/software/perl-thread-queue.rb @@ -17,13 +17,13 @@ # # expeditor/ignore: deprecated 2021-04 -name "perl-thread-queue" -default_version "3.13" +name 'perl-thread-queue' +default_version '3.13' -dependency "perl" +dependency 'perl' -version "3.13" do - source sha256: "6ba3dacddd2fbb66822b4aa1d11a0a5273cd04c825cb3ff31c20d7037cbfdce8" +version '3.13' do + source sha256: '6ba3dacddd2fbb66822b4aa1d11a0a5273cd04c825cb3ff31c20d7037cbfdce8' end source url: "http://search.cpan.org/CPAN/authors/id/J/JD/JDHEDDEN/Thread-Queue-#{version}.tar.gz" @@ -32,11 +32,11 @@ relative_path "Thread-Queue-#{version}" build do env = with_standard_compiler_flags(with_embedded_path).merge( - "INSTALL_BASE" => "#{install_dir}/embedded" + 'INSTALL_BASE' => "#{install_dir}/embedded" ) command "#{install_dir}/embedded/bin/perl Makefile.PL", env: env make env: env - make "install", env: env + make 'install', env: env end diff --git a/omnibus/config/software/perl.rb b/omnibus/config/software/perl.rb index 7cedfd921..046afd0d8 100644 --- a/omnibus/config/software/perl.rb +++ b/omnibus/config/software/perl.rb @@ -16,20 +16,20 @@ # limitations under the License. # -name "perl" +name 'perl' -license "Artistic-2.0" -license_file "Artistic" +license 'Artistic-2.0' +license_file 'Artistic' skip_transitive_dependency_licensing true -default_version "5.34.0" +default_version '5.34.0' # versions_list: http://www.cpan.org/src/ filter=*.tar.gz -version("5.34.0") { source sha256: "551efc818b968b05216024fb0b727ef2ad4c100f8cb6b43fab615fa78ae5be9a" } -version("5.32.1") { source sha256: "03b693901cd8ae807231b1787798cf1f2e0b8a56218d07b7da44f784a7caeb2c" } -version("5.30.0") { source sha256: "851213c754d98ccff042caa40ba7a796b2cee88c5325f121be5cbb61bbf975f2" } -version("5.22.1") { source sha256: "2b475d0849d54c4250e9cba4241b7b7291cffb45dfd083b677ca7b5d38118f27" } -version("5.18.1") { source sha256: "655e11a8ffba8853efcdce568a142c232600ed120ac24aaebb4e6efe74e85b2b" } +version('5.34.0') { source sha256: '551efc818b968b05216024fb0b727ef2ad4c100f8cb6b43fab615fa78ae5be9a' } +version('5.32.1') { source sha256: '03b693901cd8ae807231b1787798cf1f2e0b8a56218d07b7da44f784a7caeb2c' } +version('5.30.0') { source sha256: '851213c754d98ccff042caa40ba7a796b2cee88c5325f121be5cbb61bbf975f2' } +version('5.22.1') { source sha256: '2b475d0849d54c4250e9cba4241b7b7291cffb45dfd083b677ca7b5d38118f27' } +version('5.18.1') { source sha256: '655e11a8ffba8853efcdce568a142c232600ed120ac24aaebb4e6efe74e85b2b' } source url: "http://www.cpan.org/src/5.0/perl-#{version}.tar.gz" # perl builds perl as libraries into a special directory. We need to include @@ -47,7 +47,7 @@ build do "-Dcc='gcc -m64 -static-libgcc'" elsif aix? "-Dcc='/opt/IBM/xlc/13.1.0/bin/cc_r -q64'" - elsif freebsd? && ohai["os_version"].to_i >= 1_000_024 + elsif freebsd? && ohai['os_version'].to_i >= 1_000_024 "-Dcc='clang'" elsif mac_os_x? "-Dcc='clang'" @@ -55,22 +55,22 @@ build do "-Dcc='gcc -static-libgcc'" end - configure_command = ["sh Configure", - " -de", + configure_command = ['sh Configure', + ' -de', " -Dprefix=#{install_dir}/embedded", - " -Duseshrplib", - " -Dusethreads", + ' -Duseshrplib', + ' -Dusethreads', " #{cc_command}", " -Dnoextensions='DB_File GDBM_File NDBM_File ODBM_File'"] if aix? - configure_command << "-Dmake=gmake" - configure_command << "-Duse64bitall" + configure_command << '-Dmake=gmake' + configure_command << '-Duse64bitall' end - command configure_command.join(" "), env: env + command configure_command.join(' '), env: env make "-j #{workers}", env: env # using the install.perl target lets # us skip install the manpages - make "install.perl", env: env + make 'install.perl', env: env end diff --git a/omnibus/config/software/pkg-config.rb b/omnibus/config/software/pkg-config.rb index 8b6fee392..2ca7adbb0 100644 --- a/omnibus/config/software/pkg-config.rb +++ b/omnibus/config/software/pkg-config.rb @@ -17,15 +17,15 @@ # # expeditor/ignore: deprecated 2021-05 -name "pkg-config" -default_version "0.28" +name 'pkg-config' +default_version '0.28' -dependency "libiconv" -dependency "config_guess" +dependency 'libiconv' +dependency 'config_guess' # version_list: url=https://pkgconfig.freedesktop.org/releases/ filter=*.tar.gz -version("0.28") { source sha256: "6b6eb31c6ec4421174578652c7e141fdaae2dabad1021f420d8713206ac1f845" } +version('0.28') { source sha256: '6b6eb31c6ec4421174578652c7e141fdaae2dabad1021f420d8713206ac1f845' } source url: "https://pkgconfig.freedesktop.org/releases/pkg-config-#{version}.tar.gz" @@ -38,22 +38,22 @@ build do # pkg-config (at least up to 0.28) includes an older version of # libcharset/lib/config.charset that doesn't know about openbsd - patch source: "openbsd-charset.patch", plevel: 1, env: env if openbsd? + patch source: 'openbsd-charset.patch', plevel: 1, env: env if openbsd? - command "./configure" \ + command './configure' \ " --prefix=#{install_dir}/embedded" \ - " --disable-debug" \ - " --disable-host-tool" \ - " --with-internal-glib" \ + ' --disable-debug' \ + ' --disable-host-tool' \ + ' --with-internal-glib' \ " --with-pc-path=#{install_dir}/embedded/bin/pkgconfig", env: env # #203: pkg-configs internal glib does not provide a way to pass ldflags. # Only allows GLIB_CFLAGS and GLIB_LIBS. # These do not serve our purpose, so we must explicitly # ./configure in the glib dir, with the Omnibus ldflags. - command "./configure" \ + command './configure' \ " --prefix=#{install_dir}/embedded" \ - " --with-libiconv=gnu", env: env, cwd: "#{project_dir}/glib" + ' --with-libiconv=gnu', env: env, cwd: "#{project_dir}/glib" make "-j #{workers}", env: env make "-j #{workers} install", env: env diff --git a/omnibus/config/software/postgresql.rb b/omnibus/config/software/postgresql.rb index a593e1a17..4d0af8d89 100644 --- a/omnibus/config/software/postgresql.rb +++ b/omnibus/config/software/postgresql.rb @@ -15,37 +15,37 @@ # limitations under the License. # -name "postgresql" -default_version "13.5" +name 'postgresql' +default_version '13.5' -license "PostgreSQL" -license_file "COPYRIGHT" +license 'PostgreSQL' +license_file 'COPYRIGHT' skip_transitive_dependency_licensing true -dependency "autoconf" -dependency "automake" -dependency "m4" -dependency "pkg-config" -dependency "zlib" -dependency "openssl" -dependency "libedit" -dependency "libossp-uuid" -dependency "ncurses" -dependency "config_guess" +dependency 'autoconf' +dependency 'automake' +dependency 'm4' +dependency 'pkg-config' +dependency 'zlib' +dependency 'openssl' +dependency 'libedit' +dependency 'libossp-uuid' +dependency 'ncurses' +dependency 'config_guess' # version_list: url=https://ftp.postgresql.org/pub/source/v#{version}/ filter=*.tar.bz2 -version("13.5") { source sha256: "9b81067a55edbaabc418aacef457dd8477642827499560b00615a6ea6c13f6b3" } -version("13.3") { source sha256: "3cd9454fa8c7a6255b6743b767700925ead1b9ab0d7a0f9dcb1151010f8eb4a1" } +version('13.5') { source sha256: '9b81067a55edbaabc418aacef457dd8477642827499560b00615a6ea6c13f6b3' } +version('13.3') { source sha256: '3cd9454fa8c7a6255b6743b767700925ead1b9ab0d7a0f9dcb1151010f8eb4a1' } # Version 12.x will EoL November 14, 2024 -version("12.7") { source sha256: "8490741f47c88edc8b6624af009ce19fda4dc9b31c4469ce2551d84075d5d995" } +version('12.7') { source sha256: '8490741f47c88edc8b6624af009ce19fda4dc9b31c4469ce2551d84075d5d995' } # Version 9.6 will EoL November 11, 2021 -version("9.6.22") { source sha256: "3d32cd101025a0556813397c69feff3df3d63736adb8adeaf365c522f39f2930" } +version('9.6.22') { source sha256: '3d32cd101025a0556813397c69feff3df3d63736adb8adeaf365c522f39f2930' } # Version 9.3 was EoL November 8, 2018 (but used in Supermarket as of 6.2021) -version("9.3.25") { source sha256: "e4953e80415d039ccd33d34be74526a090fd585cf93f296cd9c593972504b6db" } +version('9.3.25') { source sha256: 'e4953e80415d039ccd33d34be74526a090fd585cf93f296cd9c593972504b6db' } source url: "https://ftp.postgresql.org/pub/source/v#{version}/postgresql-#{version}.tar.bz2" @@ -54,25 +54,25 @@ relative_path "postgresql-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) - update_config_guess(target: "config") + update_config_guess(target: 'config') configure_command = [ - "./configure", + './configure', "--prefix=#{install_dir}/embedded", - "--with-libedit-preferred", - "--with-openssl", - "--enable-thread-safety", + '--with-libedit-preferred', + '--with-openssl', + '--enable-thread-safety', "--with-includes=#{install_dir}/embedded/include", "--with-libraries=#{install_dir}/embedded/lib" ] if linux? - configure_command << "--with-uuid=ossp" + configure_command << '--with-uuid=ossp' elsif mac_os_x? - configure_command << "--with-uuid=e2fs" + configure_command << '--with-uuid=e2fs' end - command configure_command.join(" "), env: env + command configure_command.join(' '), env: env make "world -j #{workers}", env: env - make "install-world", env: env + make 'install-world', env: env end diff --git a/omnibus/config/software/python.rb b/omnibus/config/software/python.rb index ef8ea25a8..c03da0c22 100644 --- a/omnibus/config/software/python.rb +++ b/omnibus/config/software/python.rb @@ -16,31 +16,31 @@ # limitations under the License. # -name "python" -description "Python" -default_version "3.9.7" -license_file "LICENSE" +name 'python' +description 'Python' +default_version '3.9.7' +license_file 'LICENSE' skip_transitive_dependency_licensing true source url: "https://www.python.org/ftp/python/#{version}/Python-#{version}.tgz" -version("3.9.6") { source sha256: "d0a35182e19e416fc8eae25a3dcd4d02d4997333e4ad1f2eee6010aadc3fe866" } -version("3.9.7") { source sha256: "a838d3f9360d157040142b715db34f0218e535333696a5569dc6f854604eb9d1" } -version("3.10.0") { source sha256: "c4e0cbad57c90690cb813fb4663ef670b4d0f587d8171e2c42bd4c9245bd2758" } +version('3.9.6') { source sha256: 'd0a35182e19e416fc8eae25a3dcd4d02d4997333e4ad1f2eee6010aadc3fe866' } +version('3.9.7') { source sha256: 'a838d3f9360d157040142b715db34f0218e535333696a5569dc6f854604eb9d1' } +version('3.10.0') { source sha256: 'c4e0cbad57c90690cb813fb4663ef670b4d0f587d8171e2c42bd4c9245bd2758' } -dependency "readline" -dependency "bzip2" -dependency "zlib" -dependency "openssl" -dependency "ncurses" -dependency "libffi" -dependency "config_guess" +dependency 'readline' +dependency 'bzip2' +dependency 'zlib' +dependency 'openssl' +dependency 'ncurses' +dependency 'libffi' +dependency 'config_guess' relative_path "Python-#{version}" build do # Disables nis and dbm -- both cause build issues - patch source: "disable_modules.patch", target: "Modules/Setup" + patch source: 'disable_modules.patch', target: 'Modules/Setup' env = with_standard_compiler_flags(with_embedded_path) update_config_guess diff --git a/omnibus/config/software/readline.rb b/omnibus/config/software/readline.rb index c6d56788d..09d90263b 100644 --- a/omnibus/config/software/readline.rb +++ b/omnibus/config/software/readline.rb @@ -14,26 +14,26 @@ # See the License for the specific language governing permissions and # limitations under the License. -name "readline" +name 'readline' -default_version "8.1" +default_version '8.1' -version("8.1") { source sha256: "f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" } +version('8.1') { source sha256: 'f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02' } source url: "https://mirrors.kernel.org/gnu/readline/readline-#{version}.tar.gz" -dependency "config_guess" +dependency 'config_guess' relative_path "readline-#{version}" build do env = with_standard_compiler_flags(with_embedded_path) update_config_guess - configure_command = ["./configure", - "--disable-mpfr", + configure_command = ['./configure', + '--disable-mpfr', "--prefix=#{install_dir}/embedded"] - command configure_command.join(" "), env: env + command configure_command.join(' '), env: env make "-j #{workers}", env: env make "-j #{workers} install", env: env end diff --git a/omnibus/config/software/ruby.rb b/omnibus/config/software/ruby.rb index c20602941..7d4353bb9 100644 --- a/omnibus/config/software/ruby.rb +++ b/omnibus/config/software/ruby.rb @@ -16,11 +16,11 @@ # limitations under the License. # -name "ruby" -license "BSD-2-Clause" -license_file "BSDL" -license_file "COPYING" -license_file "LEGAL" +name 'ruby' +license 'BSD-2-Clause' +license_file 'BSDL' +license_file 'COPYING' +license_file 'LEGAL' skip_transitive_dependency_licensing true @@ -30,26 +30,26 @@ skip_transitive_dependency_licensing true # - verify that all ffi libs are available for your version on all platforms. # - when upgrading please check the ABI version and update the exclusion until # https://gitlab.com/gitlab-org/omnibus-gitlab/issues/3414 is addressed -default_version "2.7.5" +default_version '2.7.5' fips_enabled = (project.overrides[:fips] && project.overrides[:fips][:enabled]) || false -dependency "patch" if solaris? && platform_version.satisfies?("10") -dependency "ncurses" unless windows? || version.satisfies?(">= 2.1") -dependency "zlib" -dependency "openssl" -dependency "libffi" -dependency "libyaml" +dependency 'patch' if solaris? && platform_version.satisfies?('10') +dependency 'ncurses' unless windows? || version.satisfies?('>= 2.1') +dependency 'zlib' +dependency 'openssl' +dependency 'libffi' +dependency 'libyaml' # Needed for chef_gem installs of (e.g.) nokogiri on upgrades - # they expect to see our libiconv instead of a system version. # Ignore on windows - TDM GCC comes with libiconv in the runtime # and that's the only one we will ever use. -dependency "libiconv" +dependency 'libiconv' -version("2.7.5") { source sha256: "2755b900a21235b443bb16dadd9032f784d4a88f143d852bc5d154f22b8781f1" } -version("2.7.4") { source sha256: "3043099089608859fc8cce7f9fdccaa1f53a462457e3838ec3b25a7d609fbc5b" } -version("2.7.3") { source sha256: "8925a95e31d8f2c81749025a52a544ea1d05dad18794e6828709268b92e55338" } -version("2.7.2") { source sha256: "6e5706d0d4ee4e1e2f883db9d768586b4d06567debea353c796ec45e8321c3d4" } +version('2.7.5') { source sha256: '2755b900a21235b443bb16dadd9032f784d4a88f143d852bc5d154f22b8781f1' } +version('2.7.4') { source sha256: '3043099089608859fc8cce7f9fdccaa1f53a462457e3838ec3b25a7d609fbc5b' } +version('2.7.3') { source sha256: '8925a95e31d8f2c81749025a52a544ea1d05dad18794e6828709268b92e55338' } +version('2.7.2') { source sha256: '6e5706d0d4ee4e1e2f883db9d768586b4d06567debea353c796ec45e8321c3d4' } source url: "https://cache.ruby-lang.org/pub/ruby/#{version.match(/^(\d+\.\d+)/)[0]}/ruby-#{version}.tar.gz" @@ -64,8 +64,8 @@ if mac_os_x? # would be harmless, except that autoconf treats any output to stderr as # a failure when it makes a test program to check your CFLAGS (regardless # of the actual exit code from the compiler). - env["CFLAGS"] << " -I#{install_dir}/embedded/include/ncurses -arch x86_64 -m64 -O3 -g -pipe -Qunused-arguments" - env["LDFLAGS"] << " -arch x86_64" + env['CFLAGS'] << " -I#{install_dir}/embedded/include/ncurses -arch x86_64 -m64 -O3 -g -pipe -Qunused-arguments" + env['LDFLAGS'] << ' -arch x86_64' elsif freebsd? # Stops "libtinfo.so.5.9: could not read symbols: Bad value" error when # compiling ext/readline. See the following for more info: @@ -73,50 +73,50 @@ elsif freebsd? # https://lists.freebsd.org/pipermail/freebsd-current/2013-October/045425.html # http://mailing.freebsd.ports-bugs.narkive.com/kCgK8sNQ/ports-183106-patch-sysutils-libcdio-does-not-build-on-10-0-and-head # - env["LDFLAGS"] << " -ltinfow" + env['LDFLAGS'] << ' -ltinfow' elsif aix? # this magic per IBM - env["LDSHARED"] = "xlc -G" - env["CFLAGS"] = "-I#{install_dir}/embedded/include/ncurses -I#{install_dir}/embedded/include" + env['LDSHARED'] = 'xlc -G' + env['CFLAGS'] = "-I#{install_dir}/embedded/include/ncurses -I#{install_dir}/embedded/include" # this magic per IBM - env["XCFLAGS"] = "-DRUBY_EXPORT" + env['XCFLAGS'] = '-DRUBY_EXPORT' # need CPPFLAGS set so ruby doesn't try to be too clever - env["CPPFLAGS"] = "-I#{install_dir}/embedded/include/ncurses -I#{install_dir}/embedded/include" - env["SOLIBS"] = "-lm -lc" + env['CPPFLAGS'] = "-I#{install_dir}/embedded/include/ncurses -I#{install_dir}/embedded/include" + env['SOLIBS'] = '-lm -lc' # need to use GNU m4, default m4 doesn't work - env["M4"] = "/opt/freeware/bin/m4" -elsif solaris? && platform_version.satisfies?("10") + env['M4'] = '/opt/freeware/bin/m4' +elsif solaris? && platform_version.satisfies?('10') if sparc? # Known issue with rubby where too much GCC optimization blows up miniruby on sparc - env["CFLAGS"] << " -std=c99 -O0 -g -pipe -mcpu=v9" - env["LDFLAGS"] << " -mcpu=v9" + env['CFLAGS'] << ' -std=c99 -O0 -g -pipe -mcpu=v9' + env['LDFLAGS'] << ' -mcpu=v9' else - env["CFLAGS"] << " -std=c99 -O3 -g -pipe" + env['CFLAGS'] << ' -std=c99 -O3 -g -pipe' end elsif windows? - env["CPPFLAGS"] << " -DFD_SETSIZE=2048" + env['CPPFLAGS'] << ' -DFD_SETSIZE=2048' else # including linux - env["CFLAGS"] << if version.satisfies?(">= 2.3.0") && - rhel? && platform_version.satisfies?("< 6.0") - " -O2 -g -pipe" + env['CFLAGS'] << if version.satisfies?('>= 2.3.0') && + rhel? && platform_version.satisfies?('< 6.0') + ' -O2 -g -pipe' else - " -O3 -g -pipe" + ' -O3 -g -pipe' end end build do - env["CFLAGS"] << " -fno-omit-frame-pointer" + env['CFLAGS'] << ' -fno-omit-frame-pointer' # AIX needs /opt/freeware/bin only for patch patch_env = env.dup - patch_env["PATH"] = "/opt/freeware/bin:#{env["PATH"]}" if aix? + patch_env['PATH'] = "/opt/freeware/bin:#{env['PATH']}" if aix? - if solaris? && platform_version.satisfies?("10") && version.satisfies?(">= 2.1") - patch source: "ruby-no-stack-protector.patch", plevel: 1, env: patch_env - elsif solaris? && platform_version.satisfies?("10") && version =~ /^1.9/ - patch source: "ruby-sparc-1.9.3-c99.patch", plevel: 1, env: patch_env - elsif solaris? && platform_version.satisfies?("11") && version =~ /^2.1/ - patch source: "ruby-solaris-linux-socket-compat.patch", plevel: 1, env: patch_env + if solaris? && platform_version.satisfies?('10') && version.satisfies?('>= 2.1') + patch source: 'ruby-no-stack-protector.patch', plevel: 1, env: patch_env + elsif solaris? && platform_version.satisfies?('10') && version =~ /^1.9/ + patch source: 'ruby-sparc-1.9.3-c99.patch', plevel: 1, env: patch_env + elsif solaris? && platform_version.satisfies?('11') && version =~ /^2.1/ + patch source: 'ruby-solaris-linux-socket-compat.patch', plevel: 1, env: patch_env end # wrlinux7/ios_xr build boxes from Cisco include libssp and there is no way to @@ -134,79 +134,79 @@ build do # and ruby trying to set LD_LIBRARY_PATH itself gets it wrong. # # Also, fix paths emitted in the makefile on windows on both msys and msys2. - if version.satisfies?(">= 2.1") - patch source: "ruby-mkmf.patch", plevel: 1, env: patch_env + if version.satisfies?('>= 2.1') + patch source: 'ruby-mkmf.patch', plevel: 1, env: patch_env # should intentionally break and fail to apply on 2.2, patch will need to # be fixed. end # Enable custom patch created by ayufan that allows to count memory allocations # per-thread. This is asked to be upstreamed as part of https://github.com/ruby/ruby/pull/3978 - patch source: "thread-memory-allocations-2.7.patch", plevel: 1, env: patch_env + patch source: 'thread-memory-allocations-2.7.patch', plevel: 1, env: patch_env # Fix reserve stack segmentation fault when building on RHEL5 or below # Currently only affects 2.1.7 and 2.2.3. This patch taken from the fix # in Ruby trunk and expected to be included in future point releases. # https://redmine.ruby-lang.org/issues/11602 if rhel? && - platform_version.satisfies?("< 6") && - (version == "2.1.7" || version == "2.2.3") + platform_version.satisfies?('< 6') && + (version == '2.1.7' || version == '2.2.3') - patch source: "ruby-fix-reserve-stack-segfault.patch", plevel: 1, env: patch_env + patch source: 'ruby-fix-reserve-stack-segfault.patch', plevel: 1, env: patch_env end # copy_file_range() has been disabled on recent RedHat kernels: # 1. https://gitlab.com/gitlab-org/gitlab/-/issues/218999 # 2. https://bugs.ruby-lang.org/issues/16965 # 3. https://bugzilla.redhat.com/show_bug.cgi?id=1783554 - patch source: "ruby-disable-copy-file-range.patch", plevel: 1, env: patch_env if centos? || rhel? + patch source: 'ruby-disable-copy-file-range.patch', plevel: 1, env: patch_env if centos? || rhel? - configure_command = ["--with-out-ext=dbm,readline", - "--enable-shared", - "--disable-install-doc", - "--without-gmp", - "--without-gdbm", - "--without-tk", - "--disable-dtrace"] - configure_command << "--with-ext=psych" if version.satisfies?("< 2.3") - configure_command << "--with-bundled-md5" if fips_enabled + configure_command = ['--with-out-ext=dbm,readline', + '--enable-shared', + '--disable-install-doc', + '--without-gmp', + '--without-gdbm', + '--without-tk', + '--disable-dtrace'] + configure_command << '--with-ext=psych' if version.satisfies?('< 2.3') + configure_command << '--with-bundled-md5' if fips_enabled if aix? # need to patch ruby's configure file so it knows how to find shared libraries - patch source: "ruby-aix-configure.patch", plevel: 1, env: patch_env + patch source: 'ruby-aix-configure.patch', plevel: 1, env: patch_env # have ruby use zlib on AIX correctly - patch source: "ruby_aix_openssl.patch", plevel: 1, env: patch_env + patch source: 'ruby_aix_openssl.patch', plevel: 1, env: patch_env # AIX has issues with ssl retries, need to patch to have it retry - patch source: "ruby_aix_2_1_3_ssl_EAGAIN.patch", plevel: 1, env: patch_env + patch source: 'ruby_aix_2_1_3_ssl_EAGAIN.patch', plevel: 1, env: patch_env # the next two patches are because xlc doesn't deal with long vs int types well - patch source: "ruby-aix-atomic.patch", plevel: 1, env: patch_env - patch source: "ruby-aix-vm-core.patch", plevel: 1, env: patch_env + patch source: 'ruby-aix-atomic.patch', plevel: 1, env: patch_env + patch source: 'ruby-aix-vm-core.patch', plevel: 1, env: patch_env # per IBM, just help ruby along on what it's running on - configure_command << "--host=powerpc-ibm-aix6.1.0.0 --target=powerpc-ibm-aix6.1.0.0 --build=powerpc-ibm-aix6.1.0.0 --enable-pthread" + configure_command << '--host=powerpc-ibm-aix6.1.0.0 --target=powerpc-ibm-aix6.1.0.0 --build=powerpc-ibm-aix6.1.0.0 --enable-pthread' elsif freebsd? # Disable optional support C level backtrace support. This requires the # optional devel/libexecinfo port to be installed. - configure_command << "ac_cv_header_execinfo_h=no" + configure_command << 'ac_cv_header_execinfo_h=no' configure_command << "--with-opt-dir=#{install_dir}/embedded" elsif smartos? # Opscode patch - someara@opscode.com # GCC 4.7.0 chokes on mismatched function types between OpenSSL 1.0.1c and Ruby 1.9.3-p286 - patch source: "ruby-openssl-1.0.1c.patch", plevel: 1, env: patch_env + patch source: 'ruby-openssl-1.0.1c.patch', plevel: 1, env: patch_env # Patches taken from RVM. # http://bugs.ruby-lang.org/issues/5384 # https://www.illumos.org/issues/1587 # https://github.com/wayneeseguin/rvm/issues/719 - patch source: "rvm-cflags.patch", plevel: 1, env: patch_env + patch source: 'rvm-cflags.patch', plevel: 1, env: patch_env # From RVM forum # https://github.com/wayneeseguin/rvm/commit/86766534fcc26f4582f23842a4d3789707ce6b96 - configure_command << "ac_cv_func_dl_iterate_phdr=no" + configure_command << 'ac_cv_func_dl_iterate_phdr=no' configure_command << "--with-opt-dir=#{install_dir}/embedded" elsif windows? - configure_command << " debugflags=-g" + configure_command << ' debugflags=-g' else # TODO: Consider pulling in Gitlab's OhaiHelper if raspberry_pi is needed # configure_command << %w(host target build).map { |w| "--#{w}=#{OhaiHelper.gcc_target}" } if OhaiHelper.raspberry_pi? @@ -216,7 +216,7 @@ build do # FFS: works around a bug that infects AIX when it picks up our pkg-config # AFAIK, ruby does not need or use this pkg-config it just causes the build to fail. # The alternative would be to patch configure to remove all the pkg-config garbage entirely - env["PKG_CONFIG"] = "/bin/true" if aix? + env['PKG_CONFIG'] = '/bin/true' if aix? configure(*configure_command, env: env) make "-j #{workers}", env: env @@ -225,14 +225,14 @@ build do if windows? # Needed now that we switched to msys2 and have not figured out how to tell # it how to statically link yet - dlls = ["libwinpthread-1"] + dlls = ['libwinpthread-1'] dlls << if windows_arch_i386? - "libgcc_s_dw2-1" + 'libgcc_s_dw2-1' else - "libgcc_s_seh-1" + 'libgcc_s_seh-1' end dlls.each do |dll| - arch_suffix = windows_arch_i386? ? "32" : "64" + arch_suffix = windows_arch_i386? ? '32' : '64' windows_path = "C:/msys2/mingw#{arch_suffix}/bin/#{dll}.dll" raise "Cannot find required DLL needed for dynamic linking: #{windows_path}" unless File.exist?(windows_path) diff --git a/omnibus/config/software/rubygems.rb b/omnibus/config/software/rubygems.rb index 320df397b..e398621b8 100644 --- a/omnibus/config/software/rubygems.rb +++ b/omnibus/config/software/rubygems.rb @@ -16,15 +16,15 @@ # limitations under the License. # -name "rubygems" -default_version "3.1.4" +name 'rubygems' +default_version '3.1.4' -license "MIT" -license_file "LICENSE.txt" +license 'MIT' +license_file 'LICENSE.txt' skip_transitive_dependency_licensing true -dependency "ruby" +dependency 'ruby' if version && !source # NOTE: 2.1.11 is the last version of rubygems before the 2.2.x change to native gem install location @@ -35,14 +35,14 @@ if version && !source # We have switched from tarballs to just `gem update --system`, but for backcompat # we pin the previously known tarballs. known_tarballs = { - "2.1.11" => "b561b7aaa70d387e230688066e46e448", - "2.2.1" => "1f0017af0ad3d3ed52665132f80e7443", - "2.4.1" => "7e39c31806bbf9268296d03bd97ce718", - "2.4.4" => "440a89ad6a3b1b7a69b034233cc4658e", - "2.4.5" => "5918319a439c33ac75fbbad7fd60749d", - "2.4.8" => "dc77b51449dffe5b31776bff826bf559", - "2.7.9" => "173272ed55405caf7f858b6981fff526", - "3.1.4" => "d117187a8f016cbe8f52011ae02e858b" + '2.1.11' => 'b561b7aaa70d387e230688066e46e448', + '2.2.1' => '1f0017af0ad3d3ed52665132f80e7443', + '2.4.1' => '7e39c31806bbf9268296d03bd97ce718', + '2.4.4' => '440a89ad6a3b1b7a69b034233cc4658e', + '2.4.5' => '5918319a439c33ac75fbbad7fd60749d', + '2.4.8' => 'dc77b51449dffe5b31776bff826bf559', + '2.7.9' => '173272ed55405caf7f858b6981fff526', + '3.1.4' => 'd117187a8f016cbe8f52011ae02e858b' } known_tarballs.each do |version, md5| version version do @@ -51,12 +51,12 @@ if version && !source end end - version("v2.4.4_plus_debug") { source git: "https://github.com/danielsdeleo/rubygems.git" } - version("2.4.4.debug.1") { source git: "https://github.com/danielsdeleo/rubygems.git" } + version('v2.4.4_plus_debug') { source git: 'https://github.com/danielsdeleo/rubygems.git' } + version('2.4.4.debug.1') { source git: 'https://github.com/danielsdeleo/rubygems.git' } # This is the 2.4.8 release with a fix for # windows so things like `gem install "pry"` still # work - version("jdm/2.4.8-patched") { source git: "https://github.com/jaym/rubygems.git" } + version('jdm/2.4.8-patched') { source git: 'https://github.com/jaym/rubygems.git' } end # If we still don't have a source (if it's a tarball) grab from ruby ... @@ -66,23 +66,23 @@ if version && !source begin Gem::Version.new(version) rescue ArgumentError - source git: "https://github.com/rubygems/rubygems.git" + source git: 'https://github.com/rubygems/rubygems.git' end end # git repo is always expanded to "rubygems" -relative_path "rubygems" if source&.include?(:git) +relative_path 'rubygems' if source&.include?(:git) build do env = with_standard_compiler_flags(with_embedded_path) if source # Building from source: - ruby "setup.rb --no-document", env: env + ruby 'setup.rb --no-document', env: env else # Installing direct from rubygems: # If there is no version, this will get latest. gem "update --system #{version}", env: env - patch source: "license/add-license-file.patch" + patch source: 'license/add-license-file.patch' end end diff --git a/omnibus/config/software/runit.rb b/omnibus/config/software/runit.rb index abd18ef89..3bba82db4 100644 --- a/omnibus/config/software/runit.rb +++ b/omnibus/config/software/runit.rb @@ -15,16 +15,16 @@ # limitations under the License. # -name "runit" -default_version "2.1.2" +name 'runit' +default_version '2.1.2' -license "BSD-3-Clause" -license_file "../package/COPYING" +license 'BSD-3-Clause' +license_file '../package/COPYING' skip_transitive_dependency_licensing true -version "2.1.2" do - source md5: "6c985fbfe3a34608eb3c53dc719172c4" +version '2.1.2' do + source md5: '6c985fbfe3a34608eb3c53dc719172c4' end source url: "http://smarden.org/runit/runit-#{version}.tar.gz" @@ -35,16 +35,16 @@ build do # Patch runit to not consider status of log service associated with a service # on determining output of status command. For details, check # https://gitlab.com/gitlab-org/omnibus-gitlab/issues/4008 - patch source: "log-status.patch" + patch source: 'log-status.patch' env = with_standard_compiler_flags(with_embedded_path) # Put runit where we want it, not where they tell us to - command "sed -i -e \"s/^char\\ \\*varservice\\ \\=\\\"\\/service\\/\\\";$/char\\ \\*varservice\\ \\=\\\"#{install_dir.gsub("/", '\\/')}\\/service\\/\\\";/\" sv.c", + command "sed -i -e \"s/^char\\ \\*varservice\\ \\=\\\"\\/service\\/\\\";$/char\\ \\*varservice\\ \\=\\\"#{install_dir.gsub('/', '\\/')}\\/service\\/\\\";/\" sv.c", env: env # TODO: the following is not idempotent - command "sed -i -e s:-static:: Makefile", env: env + command 'sed -i -e s:-static:: Makefile', env: env # Build it make "-j #{workers}", env: env @@ -62,7 +62,7 @@ build do copy "#{project_dir}/svlogd", "#{install_dir}/embedded/bin" copy "#{project_dir}/utmpset", "#{install_dir}/embedded/bin" - erb source: "runsvdir-start.erb", + erb source: 'runsvdir-start.erb', dest: "#{install_dir}/embedded/bin/runsvdir-start", mode: 0o755, vars: { install_dir: install_dir } diff --git a/omnibus/config/software/wireguard-tools.rb b/omnibus/config/software/wireguard-tools.rb index f5889af54..211e86f9f 100644 --- a/omnibus/config/software/wireguard-tools.rb +++ b/omnibus/config/software/wireguard-tools.rb @@ -15,27 +15,27 @@ # limitations under the License. # -name "wireguard-tools" -description "wireguard userspace utilities" -default_version "1.0.20210424" +name 'wireguard-tools' +description 'wireguard userspace utilities' +default_version '1.0.20210424' default_src_url = "https://github.com/WireGuard/wireguard-tools/archive/refs/tags/v#{version}.tar.gz" -version "1.0.20210424" do - source url: default_src_url, sha256: "6b32b5deba067b9a920f008a006f001fa1ec903dc69fcaa5674b5a043146c1f7" +version '1.0.20210424' do + source url: default_src_url, sha256: '6b32b5deba067b9a920f008a006f001fa1ec903dc69fcaa5674b5a043146c1f7' end relative_path "wireguard-tools-#{version}/src" -license "GPL-2.0" +license 'GPL-2.0' build do env = with_standard_compiler_flags(with_embedded_path).merge( - "PREFIX" => "#{install_dir}/embedded", - "WITH_BASHCOMPLETION" => "no", - "WITH_SYSTEMDUNITS" => "no", - "WITH_WGQUICK" => "no", - "SYSCONFDIR" => "/etc/firezone", - "RUNSTATEDIR" => "/var/opt/firezone/run" + 'PREFIX' => "#{install_dir}/embedded", + 'WITH_BASHCOMPLETION' => 'no', + 'WITH_SYSTEMDUNITS' => 'no', + 'WITH_WGQUICK' => 'no', + 'SYSCONFDIR' => '/etc/firezone', + 'RUNSTATEDIR' => '/var/opt/firezone/run' ) make "-j #{workers}", env: env diff --git a/omnibus/config/software/zlib.rb b/omnibus/config/software/zlib.rb index 0f25d25e5..02d8266ee 100644 --- a/omnibus/config/software/zlib.rb +++ b/omnibus/config/software/zlib.rb @@ -16,19 +16,19 @@ # limitations under the License. # -name "zlib" -default_version "1.2.11" +name 'zlib' +default_version '1.2.11' # version_list: url=https://zlib.net/fossils/ filter=*.tar.gz -version("1.2.11") { source sha256: "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1" } -version("1.2.8") { source sha256: "36658cb768a54c1d4dec43c3116c27ed893e88b02ecfcb44f2166f9c0b7f2a0d" } -version("1.2.6") { source sha256: "21235e08552e6feba09ea5e8d750805b3391c62fb81c71a235c0044dc7a8a61b" } +version('1.2.11') { source sha256: 'c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1' } +version('1.2.8') { source sha256: '36658cb768a54c1d4dec43c3116c27ed893e88b02ecfcb44f2166f9c0b7f2a0d' } +version('1.2.6') { source sha256: '21235e08552e6feba09ea5e8d750805b3391c62fb81c71a235c0044dc7a8a61b' } source url: "https://zlib.net/fossils/zlib-#{version}.tar.gz" -license "Zlib" -license_file "README" +license 'Zlib' +license_file 'README' skip_transitive_dependency_licensing true relative_path "zlib-#{version}" @@ -37,22 +37,22 @@ build do if windows? env = with_standard_compiler_flags(with_embedded_path) - patch source: "zlib-windows-relocate.patch", env: env + patch source: 'zlib-windows-relocate.patch', env: env # We can't use the top-level Makefile. Instead, the developers have made # an organic, artisanal, hand-crafted Makefile.gcc for us which takes a few # variables. - env["BINARY_PATH"] = "/bin" - env["LIBRARY_PATH"] = "/lib" - env["INCLUDE_PATH"] = "/include" - env["DESTDIR"] = "#{install_dir}/embedded" + env['BINARY_PATH'] = '/bin' + env['LIBRARY_PATH'] = '/lib' + env['INCLUDE_PATH'] = '/include' + env['DESTDIR'] = "#{install_dir}/embedded" make_args = [ - "-fwin32/Makefile.gcc", - "SHARED_MODE=1", - "CFLAGS=\"#{env["CFLAGS"]} -Wall\"", - "ASFLAGS=\"#{env["CFLAGS"]} -Wall\"", - "LDFLAGS=\"#{env["LDFLAGS"]}\"" + '-fwin32/Makefile.gcc', + 'SHARED_MODE=1', + "CFLAGS=\"#{env['CFLAGS']} -Wall\"", + "ASFLAGS=\"#{env['CFLAGS']} -Wall\"", + "LDFLAGS=\"#{env['LDFLAGS']}\"" # The win32 makefile for zlib does not handle parallel make correctly. # In particular, see its rule for IMPLIB and SHAREDLIB. The ld step in # SHAREDLIB will generate both the dll and the dll.a files. The step to @@ -64,7 +64,7 @@ build do ] make(*make_args, env: env) - make("install", *make_args, env: env) + make('install', *make_args, env: env) else # We omit the omnibus path here because it breaks mac_os_x builds by picking # up the embedded libtool instead of the system libtool which the zlib @@ -74,7 +74,7 @@ build do if freebsd? # FreeBSD 10+ gets cranky if zlib is not compiled in a # position-independent way. - env["CFLAGS"] << " -fPIC" + env['CFLAGS'] << ' -fPIC' end configure env: env diff --git a/omnibus/cookbooks/firezone/Berksfile b/omnibus/cookbooks/firezone/Berksfile index 4fa7e5967..69c44c3c6 100644 --- a/omnibus/cookbooks/firezone/Berksfile +++ b/omnibus/cookbooks/firezone/Berksfile @@ -1,8 +1,8 @@ # frozen_string_literal: true -source "https://supermarket.chef.io" +source 'https://supermarket.chef.io' metadata -cookbook "enterprise" -cookbook "fipsify" +cookbook 'enterprise' +cookbook 'fipsify' diff --git a/omnibus/cookbooks/firezone/Gemfile b/omnibus/cookbooks/firezone/Gemfile index bd42b976c..b70e7217b 100644 --- a/omnibus/cookbooks/firezone/Gemfile +++ b/omnibus/cookbooks/firezone/Gemfile @@ -1,7 +1,7 @@ # frozen_string_literal: true -source "https://rubygems.org" +source 'https://rubygems.org' -gem "berkshelf" -gem "chef", "~> 16.17.18" -gem "chef-bin", "~> 16.17.18" +gem 'berkshelf' +gem 'chef', '~> 16.17.18' +gem 'chef-bin', '~> 16.17.18' diff --git a/omnibus/cookbooks/firezone/Policyfile.rb b/omnibus/cookbooks/firezone/Policyfile.rb index 3d859e3cb..e1cf63d55 100644 --- a/omnibus/cookbooks/firezone/Policyfile.rb +++ b/omnibus/cookbooks/firezone/Policyfile.rb @@ -6,13 +6,13 @@ # https://docs.chef.io/policyfile/ # A name that describes what the system you're building with Chef does. -name "firezone" +name 'firezone' # Where to find external cookbooks: default_source :supermarket # run_list: chef-client will run these recipes in the order specified. -run_list "firezone::default" +run_list 'firezone::default' # Specify a custom source for a single cookbook: -cookbook "firezone", path: "." +cookbook 'firezone', path: '.' diff --git a/omnibus/cookbooks/firezone/attributes/default.rb b/omnibus/cookbooks/firezone/attributes/default.rb index 593a7099b..bc5998047 100644 --- a/omnibus/cookbooks/firezone/attributes/default.rb +++ b/omnibus/cookbooks/firezone/attributes/default.rb @@ -2,7 +2,7 @@ # # Firezone configuration -require "etc" +require 'etc' # # Attributes here will be applied to configure the application and the services @@ -28,62 +28,62 @@ require "etc" # The fully qualified domain name. Will use the node's fqdn if nothing is # specified. Used for generating URLs that point back to this application # and for securing the Websocket connections to the UI. -default["firezone"]["fqdn"] = (node["fqdn"] || node["hostname"]).downcase +default['firezone']['fqdn'] = (node['fqdn'] || node['hostname']).downcase -default["firezone"]["config_directory"] = "/etc/firezone" -default["firezone"]["install_directory"] = "/opt/firezone" -default["firezone"]["app_directory"] = "#{node["firezone"]["install_directory"]}/embedded/service/firezone" -default["firezone"]["log_directory"] = "/var/log/firezone" -default["firezone"]["var_directory"] = "/var/opt/firezone" -default["firezone"]["user"] = "firezone" -default["firezone"]["group"] = "firezone" +default['firezone']['config_directory'] = '/etc/firezone' +default['firezone']['install_directory'] = '/opt/firezone' +default['firezone']['app_directory'] = "#{node['firezone']['install_directory']}/embedded/service/firezone" +default['firezone']['log_directory'] = '/var/log/firezone' +default['firezone']['var_directory'] = '/var/opt/firezone' +default['firezone']['user'] = 'firezone' +default['firezone']['group'] = 'firezone' # Email for the primary admin user. -default["firezone"]["admin_email"] = "firezone@localhost" +default['firezone']['admin_email'] = 'firezone@localhost' # The outgoing interface name. # This is where tunneled traffic will exit the WireGuard tunnel. # If set to nil, this is will be set to the interface for the machine's # default route. -default["firezone"]["egress_interface"] = nil +default['firezone']['egress_interface'] = nil # Whether to use OpenSSL FIPS mode across Firezone. Default disabled. -default["firezone"]["fips_enabled"] = nil +default['firezone']['fips_enabled'] = nil # ## Enterprise # # The "enterprise" cookbook provides recipes and resources we can use for this # app. -default["enterprise"]["name"] = "firezone" +default['enterprise']['name'] = 'firezone' # Enterprise uses install_path internally, but we use install_directory because # it's more consistent. Alias it here so both work. -default["firezone"]["install_path"] = node["firezone"]["install_directory"] +default['firezone']['install_path'] = node['firezone']['install_directory'] # An identifier used in /etc/inittab (default is 'SUP'). Needs to be a unique # (for the file) sequence of 1-4 characters. -default["firezone"]["sysvinit_id"] = "SUP" +default['firezone']['sysvinit_id'] = 'SUP' # ## Nginx # These attributes control Firezone-specific portions of the Nginx # configuration and the virtual host for the Firezone Phoenix app. -default["firezone"]["nginx"]["enabled"] = true -default["firezone"]["nginx"]["force_ssl"] = true -default["firezone"]["nginx"]["non_ssl_port"] = 80 -default["firezone"]["nginx"]["ssl_port"] = 443 -default["firezone"]["nginx"]["directory"] = "#{node["firezone"]["var_directory"]}/nginx/etc" -default["firezone"]["nginx"]["log_directory"] = "#{node["firezone"]["log_directory"]}/nginx" -default["firezone"]["nginx"]["log_rotation"]["file_maxbytes"] = 104_857_600 -default["firezone"]["nginx"]["log_rotation"]["num_to_keep"] = 10 -default["firezone"]["nginx"]["log_x_forwarded_for"] = false +default['firezone']['nginx']['enabled'] = true +default['firezone']['nginx']['force_ssl'] = true +default['firezone']['nginx']['non_ssl_port'] = 80 +default['firezone']['nginx']['ssl_port'] = 443 +default['firezone']['nginx']['directory'] = "#{node['firezone']['var_directory']}/nginx/etc" +default['firezone']['nginx']['log_directory'] = "#{node['firezone']['log_directory']}/nginx" +default['firezone']['nginx']['log_rotation']['file_maxbytes'] = 104_857_600 +default['firezone']['nginx']['log_rotation']['num_to_keep'] = 10 +default['firezone']['nginx']['log_x_forwarded_for'] = false # Redirect to the FQDN -default["firezone"]["nginx"]["redirect_to_canonical"] = false +default['firezone']['nginx']['redirect_to_canonical'] = false # Controls nginx caching, used to cache some endpoints -default["firezone"]["nginx"]["cache"]["enabled"] = false -default["firezone"]["nginx"]["cache"]["directory"] = "#{node["firezone"]["var_directory"]}/nginx/cache" +default['firezone']['nginx']['cache']['enabled'] = false +default['firezone']['nginx']['cache']['directory'] = "#{node['firezone']['var_directory']}/nginx/cache" # These attributes control the main nginx.conf, including the events and http # contexts. @@ -91,20 +91,20 @@ default["firezone"]["nginx"]["cache"]["directory"] = "#{node["firezone"]["var_di # These will be copied to the top-level nginx namespace and used in a # template from the community nginx cookbook # (https://github.com/miketheman/nginx/blob/master/templates/default/nginx.conf.erb) -default["firezone"]["nginx"]["user"] = node["firezone"]["user"] -default["firezone"]["nginx"]["group"] = node["firezone"]["group"] -default["firezone"]["nginx"]["dir"] = node["firezone"]["nginx"]["directory"] -default["firezone"]["nginx"]["log_dir"] = node["firezone"]["nginx"]["log_directory"] -default["firezone"]["nginx"]["pid"] = "#{node["firezone"]["nginx"]["directory"]}/nginx.pid" -default["firezone"]["nginx"]["daemon_disable"] = true -default["firezone"]["nginx"]["gzip"] = "on" -default["firezone"]["nginx"]["gzip_static"] = "off" -default["firezone"]["nginx"]["gzip_http_version"] = "1.0" -default["firezone"]["nginx"]["gzip_comp_level"] = "2" -default["firezone"]["nginx"]["gzip_proxied"] = "any" -default["firezone"]["nginx"]["gzip_vary"] = "off" -default["firezone"]["nginx"]["gzip_buffers"] = nil -default["firezone"]["nginx"]["gzip_types"] = %w[ +default['firezone']['nginx']['user'] = node['firezone']['user'] +default['firezone']['nginx']['group'] = node['firezone']['group'] +default['firezone']['nginx']['dir'] = node['firezone']['nginx']['directory'] +default['firezone']['nginx']['log_dir'] = node['firezone']['nginx']['log_directory'] +default['firezone']['nginx']['pid'] = "#{node['firezone']['nginx']['directory']}/nginx.pid" +default['firezone']['nginx']['daemon_disable'] = true +default['firezone']['nginx']['gzip'] = 'on' +default['firezone']['nginx']['gzip_static'] = 'off' +default['firezone']['nginx']['gzip_http_version'] = '1.0' +default['firezone']['nginx']['gzip_comp_level'] = '2' +default['firezone']['nginx']['gzip_proxied'] = 'any' +default['firezone']['nginx']['gzip_vary'] = 'off' +default['firezone']['nginx']['gzip_buffers'] = nil +default['firezone']['nginx']['gzip_types'] = %w[ text/plain text/css application/x-javascript @@ -116,37 +116,37 @@ default["firezone"]["nginx"]["gzip_types"] = %w[ application/javascript application/json ] -default["firezone"]["nginx"]["gzip_min_length"] = 1000 -default["firezone"]["nginx"]["gzip_disable"] = 'MSIE [1-6]\.' -default["firezone"]["nginx"]["keepalive"] = "on" -default["firezone"]["nginx"]["keepalive_timeout"] = 65 -default["firezone"]["nginx"]["worker_processes"] = node["cpu"] && node["cpu"]["total"] ? node["cpu"]["total"] : 1 -default["firezone"]["nginx"]["worker_connections"] = 1024 -default["firezone"]["nginx"]["worker_rlimit_nofile"] = nil -default["firezone"]["nginx"]["multi_accept"] = false -default["firezone"]["nginx"]["event"] = nil -default["firezone"]["nginx"]["server_tokens"] = nil -default["firezone"]["nginx"]["server_names_hash_bucket_size"] = 64 -default["firezone"]["nginx"]["sendfile"] = "on" -default["firezone"]["nginx"]["access_log_options"] = nil -default["firezone"]["nginx"]["error_log_options"] = nil -default["firezone"]["nginx"]["disable_access_log"] = false -default["firezone"]["nginx"]["default_site_enabled"] = false -default["firezone"]["nginx"]["types_hash_max_size"] = 2048 -default["firezone"]["nginx"]["types_hash_bucket_size"] = 64 -default["firezone"]["nginx"]["proxy_read_timeout"] = nil -default["firezone"]["nginx"]["client_body_buffer_size"] = nil -default["firezone"]["nginx"]["client_max_body_size"] = "250m" -default["firezone"]["nginx"]["default"]["modules"] = [] +default['firezone']['nginx']['gzip_min_length'] = 1000 +default['firezone']['nginx']['gzip_disable'] = 'MSIE [1-6]\.' +default['firezone']['nginx']['keepalive'] = 'on' +default['firezone']['nginx']['keepalive_timeout'] = 65 +default['firezone']['nginx']['worker_processes'] = node['cpu'] && node['cpu']['total'] ? node['cpu']['total'] : 1 +default['firezone']['nginx']['worker_connections'] = 1024 +default['firezone']['nginx']['worker_rlimit_nofile'] = nil +default['firezone']['nginx']['multi_accept'] = false +default['firezone']['nginx']['event'] = nil +default['firezone']['nginx']['server_tokens'] = nil +default['firezone']['nginx']['server_names_hash_bucket_size'] = 64 +default['firezone']['nginx']['sendfile'] = 'on' +default['firezone']['nginx']['access_log_options'] = nil +default['firezone']['nginx']['error_log_options'] = nil +default['firezone']['nginx']['disable_access_log'] = false +default['firezone']['nginx']['default_site_enabled'] = false +default['firezone']['nginx']['types_hash_max_size'] = 2048 +default['firezone']['nginx']['types_hash_bucket_size'] = 64 +default['firezone']['nginx']['proxy_read_timeout'] = nil +default['firezone']['nginx']['client_body_buffer_size'] = nil +default['firezone']['nginx']['client_max_body_size'] = '250m' +default['firezone']['nginx']['default']['modules'] = [] # ## Postgres # ### Use the bundled Postgres instance (default, recommended): # -default["firezone"]["postgresql"]["enabled"] = true -default["firezone"]["postgresql"]["username"] = node["firezone"]["user"] -default["firezone"]["postgresql"]["data_directory"] = "#{node["firezone"]["var_directory"]}/postgresql/13.3/data" +default['firezone']['postgresql']['enabled'] = true +default['firezone']['postgresql']['username'] = node['firezone']['user'] +default['firezone']['postgresql']['data_directory'] = "#{node['firezone']['var_directory']}/postgresql/13.3/data" # ### Using an external Postgres database # @@ -161,38 +161,38 @@ default["firezone"]["postgresql"]["data_directory"] = "#{node["firezone"]["var_d # Further database configuration options can be found below # ### Logs -default["firezone"]["postgresql"]["log_directory"] = "#{node["firezone"]["log_directory"]}/postgresql" -default["firezone"]["postgresql"]["log_rotation"]["file_maxbytes"] = 104_857_600 -default["firezone"]["postgresql"]["log_rotation"]["num_to_keep"] = 10 +default['firezone']['postgresql']['log_directory'] = "#{node['firezone']['log_directory']}/postgresql" +default['firezone']['postgresql']['log_rotation']['file_maxbytes'] = 104_857_600 +default['firezone']['postgresql']['log_rotation']['num_to_keep'] = 10 # ### Postgres Settings -default["firezone"]["postgresql"]["checkpoint_completion_target"] = 0.5 -default["firezone"]["postgresql"]["checkpoint_segments"] = 3 -default["firezone"]["postgresql"]["checkpoint_timeout"] = "5min" -default["firezone"]["postgresql"]["checkpoint_warning"] = "30s" -default["firezone"]["postgresql"]["effective_cache_size"] = "128MB" -default["firezone"]["postgresql"]["listen_address"] = "127.0.0.1" -default["firezone"]["postgresql"]["max_connections"] = 350 -default["firezone"]["postgresql"]["md5_auth_cidr_addresses"] = ["127.0.0.1/32", "::1/128"] -default["firezone"]["postgresql"]["port"] = 15_432 -default["firezone"]["postgresql"]["shared_buffers"] = "#{(node["memory"]["total"].to_i / 4) / 1024}MB" -default["firezone"]["postgresql"]["shmmax"] = 17_179_869_184 -default["firezone"]["postgresql"]["shmall"] = 4_194_304 -default["firezone"]["postgresql"]["work_mem"] = "8MB" +default['firezone']['postgresql']['checkpoint_completion_target'] = 0.5 +default['firezone']['postgresql']['checkpoint_segments'] = 3 +default['firezone']['postgresql']['checkpoint_timeout'] = '5min' +default['firezone']['postgresql']['checkpoint_warning'] = '30s' +default['firezone']['postgresql']['effective_cache_size'] = '128MB' +default['firezone']['postgresql']['listen_address'] = '127.0.0.1' +default['firezone']['postgresql']['max_connections'] = 350 +default['firezone']['postgresql']['md5_auth_cidr_addresses'] = ['127.0.0.1/32', '::1/128'] +default['firezone']['postgresql']['port'] = 15_432 +default['firezone']['postgresql']['shared_buffers'] = "#{(node['memory']['total'].to_i / 4) / 1024}MB" +default['firezone']['postgresql']['shmmax'] = 17_179_869_184 +default['firezone']['postgresql']['shmall'] = 4_194_304 +default['firezone']['postgresql']['work_mem'] = '8MB' # ## Common Database Settings # # The settings below configure how Firezone connects to and uses your database. # At this time only Postgres (and Postgres-compatible) databases are supported. -default["firezone"]["database"]["user"] = node["firezone"]["postgresql"]["username"] -default["firezone"]["database"]["name"] = "firezone" -default["firezone"]["database"]["host"] = node["firezone"]["postgresql"]["listen_address"] -default["firezone"]["database"]["port"] = node["firezone"]["postgresql"]["port"] -default["firezone"]["database"]["ssl"] = false -default["firezone"]["database"]["ssl_opts"] = {} -default["firezone"]["database"]["parameters"] = {} -default["firezone"]["database"]["pool"] = [10, Etc.nprocessors].max -default["firezone"]["database"]["extensions"] = { "plpgsql" => true, "pg_trgm" => true } +default['firezone']['database']['user'] = node['firezone']['postgresql']['username'] +default['firezone']['database']['name'] = 'firezone' +default['firezone']['database']['host'] = node['firezone']['postgresql']['listen_address'] +default['firezone']['database']['port'] = node['firezone']['postgresql']['port'] +default['firezone']['database']['ssl'] = false +default['firezone']['database']['ssl_opts'] = {} +default['firezone']['database']['parameters'] = {} +default['firezone']['database']['pool'] = [10, Etc.nprocessors].max +default['firezone']['database']['extensions'] = { 'plpgsql' => true, 'pg_trgm' => true } # Uncomment to specify a database password. Not usually needed if using the bundled Postgresql. # default['firezone']['database']['password'] = 'change_me' @@ -200,70 +200,70 @@ default["firezone"]["database"]["extensions"] = { "plpgsql" => true, "pg_trgm" = # ## Phoenix # ### The Phoenix web app for Firezone -default["firezone"]["phoenix"]["enabled"] = true -default["firezone"]["phoenix"]["port"] = 13_000 -default["firezone"]["phoenix"]["log_directory"] = "#{node["firezone"]["log_directory"]}/phoenix" -default["firezone"]["phoenix"]["log_rotation"]["file_maxbytes"] = 104_857_600 -default["firezone"]["phoenix"]["log_rotation"]["num_to_keep"] = 10 +default['firezone']['phoenix']['enabled'] = true +default['firezone']['phoenix']['port'] = 13_000 +default['firezone']['phoenix']['log_directory'] = "#{node['firezone']['log_directory']}/phoenix" +default['firezone']['phoenix']['log_rotation']['file_maxbytes'] = 104_857_600 +default['firezone']['phoenix']['log_rotation']['num_to_keep'] = 10 # ## WireGuard # ### Interface Management # Enable management of the WireGuard interface itself. Set this to false if you # want to manually create your WireGuard interface and manage its interface properties. -default["firezone"]["wireguard"]["enabled"] = true -default["firezone"]["wireguard"]["log_directory"] = "#{node["firezone"]["log_directory"]}/wireguard" -default["firezone"]["wireguard"]["log_rotation"]["file_maxbytes"] = 104_857_600 -default["firezone"]["wireguard"]["log_rotation"]["num_to_keep"] = 10 +default['firezone']['wireguard']['enabled'] = true +default['firezone']['wireguard']['log_directory'] = "#{node['firezone']['log_directory']}/wireguard" +default['firezone']['wireguard']['log_rotation']['file_maxbytes'] = 104_857_600 +default['firezone']['wireguard']['log_rotation']['num_to_keep'] = 10 # The WireGuard interface name Firezone will apply configuration settings to. -default["firezone"]["wireguard"]["interface_name"] = "wg-firezone" +default['firezone']['wireguard']['interface_name'] = 'wg-firezone' # WireGuard listen port -default["firezone"]["wireguard"]["port"] = 51_820 +default['firezone']['wireguard']['port'] = 51_820 # WireGuard interface MTU -default["firezone"]["wireguard"]["mtu"] = 1420 +default['firezone']['wireguard']['mtu'] = 1420 # WireGuard endpoint # By default, the public IP address of this server is used as the Endpoint # field for generating Device configs. Override this if you wish to change. -default["firezone"]["wireguard"]["endpoint"] = nil +default['firezone']['wireguard']['endpoint'] = nil # Default AllowedIPs to use for generated device configs specified as a comma-separated # list of IPv4 / IPv6 CIDRs. # Default is to tunnel all IPv4 and IPv6 traffic with '0.0.0.0/0, ::/0' -default["firezone"]["wireguard"]["allowed_ips"] = "0.0.0.0/0, ::/0" +default['firezone']['wireguard']['allowed_ips'] = '0.0.0.0/0, ::/0' # Default DNS servers to use for generated device configs. # Defaults to CloudFlare's public DNS. Set to nil to omit DNS from generated # device configurations. -default["firezone"]["wireguard"]["dns"] = "1.1.1.1, 1.0.0.1" +default['firezone']['wireguard']['dns'] = '1.1.1.1, 1.0.0.1' # Default PersistentKeepalive setting to use for generated device configs. # See https://www.wireguard.com/quickstart/#nat-and-firewall-traversal-persistence # Set to 0 or nil to disable. Default 0. -default["firezone"]["wireguard"]["persistent_keepalive"] = 0 +default['firezone']['wireguard']['persistent_keepalive'] = 0 # Enable or disable IPv4 connectivity in your WireGuard network. Default enabled. -default["firezone"]["wireguard"]["ipv4"]["enabled"] = true +default['firezone']['wireguard']['ipv4']['enabled'] = true # The CIDR-formatted IPv4 network to use for your WireGuard network. Default 10.3.2.0/24. -default["firezone"]["wireguard"]["ipv4"]["network"] = "10.3.2.0/24" +default['firezone']['wireguard']['ipv4']['network'] = '10.3.2.0/24' # The IPv4 address to assign to your WireGuard interface. Must be an address # contained within the WireGuard network specific above. Default 10.3.2.1. -default["firezone"]["wireguard"]["ipv4"]["address"] = "10.3.2.1" +default['firezone']['wireguard']['ipv4']['address'] = '10.3.2.1' # Enable or disable IPv4 connectivity in your WireGuard network. Default enabled. -default["firezone"]["wireguard"]["ipv6"]["enabled"] = true +default['firezone']['wireguard']['ipv6']['enabled'] = true # The CIDR-formatted IPv4 network to use for your WireGuard network. Default fd00::3:2:0/120. -default["firezone"]["wireguard"]["ipv6"]["network"] = "fd00::3:2:0/120" +default['firezone']['wireguard']['ipv6']['network'] = 'fd00::3:2:0/120' # The IPv4 address to assign to your WireGuard interface. Must be an address # contained within the WireGuard network specific above. Default fd00::3:2:1. -default["firezone"]["wireguard"]["ipv6"]["address"] = "fd00::3:2:1" +default['firezone']['wireguard']['ipv6']['address'] = 'fd00::3:2:1' # ## Runit @@ -271,30 +271,30 @@ default["firezone"]["wireguard"]["ipv6"]["address"] = "fd00::3:2:1" # see (https://github.com/chef-cookbooks/enterprise-chef-common/pull/17) # # Will be copied to the root node.runit namespace. -default["firezone"]["runit"]["svlogd_bin"] = "#{node["firezone"]["install_directory"]}/embedded/bin/svlogd" +default['firezone']['runit']['svlogd_bin'] = "#{node['firezone']['install_directory']}/embedded/bin/svlogd" # ## SSL -default["firezone"]["ssl"]["directory"] = "/var/opt/firezone/ssl" +default['firezone']['ssl']['directory'] = '/var/opt/firezone/ssl' # Enable / disable SSL -default["firezone"]["ssl"]["enabled"] = true +default['firezone']['ssl']['enabled'] = true # Paths to the SSL certificate and key files. If these are not provided we will # attempt to generate a self-signed certificate and use that instead. -default["firezone"]["ssl"]["certificate"] = nil -default["firezone"]["ssl"]["certificate_key"] = nil +default['firezone']['ssl']['certificate'] = nil +default['firezone']['ssl']['certificate_key'] = nil # Path to the SSL dhparam file if you want to specify your own SSL DH parameters. -default["firezone"]["ssl"]["ssl_dhparam"] = nil +default['firezone']['ssl']['ssl_dhparam'] = nil # These are used in creating a self-signed cert if you haven't brought your own. -default["firezone"]["ssl"]["country_name"] = "US" -default["firezone"]["ssl"]["state_name"] = "CA" -default["firezone"]["ssl"]["locality_name"] = "San Francisco" -default["firezone"]["ssl"]["company_name"] = "My Company" -default["firezone"]["ssl"]["organizational_unit_name"] = "Operations" -default["firezone"]["ssl"]["email_address"] = "you@example.com" +default['firezone']['ssl']['country_name'] = 'US' +default['firezone']['ssl']['state_name'] = 'CA' +default['firezone']['ssl']['locality_name'] = 'San Francisco' +default['firezone']['ssl']['company_name'] = 'My Company' +default['firezone']['ssl']['organizational_unit_name'] = 'Operations' +default['firezone']['ssl']['email_address'] = 'you@example.com' # ### Cipher settings # @@ -305,12 +305,12 @@ default["firezone"]["ssl"]["email_address"] = "you@example.com" # # If your infrastructure still has requirements for the vulnerable/venerable SSLV3, you can add # "SSLv3" to the below line. -default["firezone"]["ssl"]["ciphers"] = - "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA" -default["firezone"]["ssl"]["fips_ciphers"] = "FIPS@STRENGTH:!aNULL:!eNULL" -default["firezone"]["ssl"]["protocols"] = "TLSv1 TLSv1.1 TLSv1.2" -default["firezone"]["ssl"]["session_cache"] = "shared:SSL:4m" -default["firezone"]["ssl"]["session_timeout"] = "5m" +default['firezone']['ssl']['ciphers'] = + 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA' +default['firezone']['ssl']['fips_ciphers'] = 'FIPS@STRENGTH:!aNULL:!eNULL' +default['firezone']['ssl']['protocols'] = 'TLSv1 TLSv1.1 TLSv1.2' +default['firezone']['ssl']['session_cache'] = 'shared:SSL:4m' +default['firezone']['ssl']['session_timeout'] = '5m' # ### robots.txt Settings # @@ -318,8 +318,8 @@ default["firezone"]["ssl"]["session_timeout"] = "5m" # http://www.robotstxt.org/robotstxt.html for more information. Only a single # line for each item is supported. If a value is nil, the line will not be # present in the file. -default["firezone"]["robots_allow"] = "/" -default["firezone"]["robots_disallow"] = nil +default['firezone']['robots_allow'] = '/' +default['firezone']['robots_disallow'] = nil # ### Outbound Email Settings # @@ -328,18 +328,18 @@ default["firezone"]["robots_disallow"] = nil # (usually set up with a relay host) be configured on this machine. # # SMTP will use the 'plain' authentication method. -default["firezone"]["from_email"] = nil -default["firezone"]["smtp_address"] = nil -default["firezone"]["smtp_password"] = nil -default["firezone"]["smtp_port"] = nil -default["firezone"]["smtp_user_name"] = nil +default['firezone']['from_email'] = nil +default['firezone']['smtp_address'] = nil +default['firezone']['smtp_password'] = nil +default['firezone']['smtp_port'] = nil +default['firezone']['smtp_user_name'] = nil # ## Telemetry # # Firezone relies heavily on hashed, anonymized telemetry data to help us build # a better product for our users. This data is stored securely and is not # shared or accessible to any third parties. Set this to false to disable. -default["firezone"]["telemetry"]["enabled"] = true +default['firezone']['telemetry']['enabled'] = true # ## Diagnostics Settings @@ -350,8 +350,8 @@ default["firezone"]["telemetry"]["enabled"] = true # is used to determine the server's publicly routable IP address for populating # device configurations and setting up firewall rules. Set this to false to # disable. -default["firezone"]["connectivity_checks"]["enabled"] = true +default['firezone']['connectivity_checks']['enabled'] = true # Amount of time to sleep between connectivity checks, in seconds. # Default: 3600 (1 hour). Minimum: 60 (1 minute). Maximum: 86400 (1 day). -default["firezone"]["connectivity_checks"]["interval"] = 3_600 +default['firezone']['connectivity_checks']['interval'] = 3_600 diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb index 907bd080c..f511635b0 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb @@ -1,35 +1,35 @@ # frozen_string_literal: true -require "mixlib/shellout" -require "uri" -require "net/http" -require "json" +require 'mixlib/shellout' +require 'uri' +require 'net/http' +require 'json' desc = <<~DESC Resets the password for admin with email specified by default['firezone']['admin_email'] or creates a new admin if that email doesn't exist. DESC def capture - telemetry_file = "/var/opt/firezone/cache/telemetry_id" + telemetry_file = '/var/opt/firezone/cache/telemetry_id' if File.exist?(telemetry_file) telemetry_id = File.read(telemetry_file) if telemetry_id - uri = URI("https://telemetry.firez.one/capture/") + uri = URI('https://telemetry.firez.one/capture/') data = { - api_key: "phc_ubuPhiqqjMdedpmbWpG2Ak3axqv5eMVhFDNBaXl9UZK", - event: "firezone-ctl create-or-reset-admin", + api_key: 'phc_ubuPhiqqjMdedpmbWpG2Ak3axqv5eMVhFDNBaXl9UZK', + event: 'firezone-ctl create-or-reset-admin', properties: { distinct_id: telemetry_id } } - unless File.exist?("/var/opt/firezone/.disable_telemetry") || ENV["TELEMETRY_ENABLED"] == "false" - Net::HTTP.post(uri, data.to_json, "Content-Type" => "application/json") + unless File.exist?('/var/opt/firezone/.disable_telemetry') || ENV['TELEMETRY_ENABLED'] == 'false' + Net::HTTP.post(uri, data.to_json, 'Content-Type' => 'application/json') end end end end -add_command_under_category "create-or-reset-admin", "general", desc, 2 do +add_command_under_category 'create-or-reset-admin', 'general', desc, 2 do command = %W( chef-client -z @@ -40,7 +40,7 @@ add_command_under_category "create-or-reset-admin", "general", desc, 2 do capture - result = run_command(command.join(" ")) + result = run_command(command.join(' ')) remove_old_node_state Kernel.exit 1 unless result.success? end diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb index acde69da8..570563cd0 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb @@ -1,32 +1,32 @@ # frozen_string_literal: true -require "mixlib/shellout" -require "uri" -require "net/http" -require "json" +require 'mixlib/shellout' +require 'uri' +require 'net/http' +require 'json' def capture - telemetry_file = "/var/opt/firezone/cache/telemetry_id" + telemetry_file = '/var/opt/firezone/cache/telemetry_id' if File.exist?(telemetry_file) telemetry_id = File.read(telemetry_file) if telemetry_id - uri = URI("https://telemetry.firez.one/capture/") + uri = URI('https://telemetry.firez.one/capture/') data = { - api_key: "phc_ubuPhiqqjMdedpmbWpG2Ak3axqv5eMVhFDNBaXl9UZK", - event: "firezone-ctl create-or-reset-admin", + api_key: 'phc_ubuPhiqqjMdedpmbWpG2Ak3axqv5eMVhFDNBaXl9UZK', + event: 'firezone-ctl create-or-reset-admin', properties: { distinct_id: telemetry_id } } - unless File.exist?("/var/opt/firezone/.disable_telemetry") || ENV["TELEMETRY_ENABLED"] == "false" - Net::HTTP.post(uri, data.to_json, "Content-Type" => "application/json") + unless File.exist?('/var/opt/firezone/.disable_telemetry') || ENV['TELEMETRY_ENABLED'] == 'false' + Net::HTTP.post(uri, data.to_json, 'Content-Type' => 'application/json') end end end end -add_command_under_category "reconfigure", "general", "Reconfigure the application.", 2 do - status = run_chef("#{base_path}/embedded/cookbooks/dna.json", "--chef-license=accept") +add_command_under_category 'reconfigure', 'general', 'Reconfigure the application.', 2 do + status = run_chef("#{base_path}/embedded/cookbooks/dna.json", '--chef-license=accept') capture diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/reset_network.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/reset_network.rb index f475197cc..db8d60e6c 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/reset_network.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/reset_network.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require "mixlib/shellout" +require 'mixlib/shellout' -add_command_under_category "reset-network", "general", "Resets nftables, WireGuard interface, "\ - "and routing table back to Firezone defaults.", 2 do +add_command_under_category 'reset-network', 'general', 'Resets nftables, WireGuard interface, '\ + 'and routing table back to Firezone defaults.', 2 do command = %W( chef-client -z @@ -12,7 +12,7 @@ add_command_under_category "reset-network", "general", "Resets nftables, WireGua -o recipe[firezone::teardown],recipe[firezone::network] ) - result = run_command(command.join(" ")) + result = run_command(command.join(' ')) remove_old_node_state Kernel.exit 1 unless result.success? end diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/teardown.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/teardown.rb index 85a387515..7a2e9c3a4 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/teardown.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/teardown.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require "mixlib/shellout" +require 'mixlib/shellout' -add_command_under_category "teardown-network", "general", "Removes WireGuard interface and firezone nftables table.", +add_command_under_category 'teardown-network', 'general', 'Removes WireGuard interface and firezone nftables table.', 2 do command = %W( chef-client @@ -12,7 +12,7 @@ add_command_under_category "teardown-network", "general", "Removes WireGuard int -o recipe[firezone::teardown] ) - result = run_command(command.join(" ")) + result = run_command(command.join(' ')) remove_old_node_state Kernel.exit 1 unless result.success? end diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb index 4569b2222..52013f511 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/version.rb @@ -15,13 +15,13 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -require "json" +require 'json' -add_command_under_category "version", "general", "Display current version of Firezone", 2 do - version = JSON.parse(File.read("/opt/firezone/version-manifest.json"))["build_version"] +add_command_under_category 'version', 'general', 'Display current version of Firezone', 2 do + version = JSON.parse(File.read('/opt/firezone/version-manifest.json'))['build_version'] puts version rescue Errno::ENOENT => e - puts "Error determining version!" + puts 'Error determining version!' puts e.message.to_s exit(1) end diff --git a/omnibus/cookbooks/firezone/libraries/config.rb b/omnibus/cookbooks/firezone/libraries/config.rb index 93fe9f275..6518a9413 100644 --- a/omnibus/cookbooks/firezone/libraries/config.rb +++ b/omnibus/cookbooks/firezone/libraries/config.rb @@ -1,11 +1,13 @@ # frozen_string_literal: true -require "json" -require "fileutils" -require "securerandom" +require 'json' +require 'fileutils' +require 'securerandom' # Manages configuration class Firezone + # rubocop:disable Metrics/ModuleLength + # Config module module Config class IncompleteConfig < StandardError; end class IncompatibleConfig < StandardError; end @@ -16,9 +18,9 @@ class Firezone node.from_file(filename) else # Write out the new file, but with everything commented out - File.open(filename, "w") do |file| + File.open(filename, 'w') do |file| File.open( - "#{node["firezone"]["install_directory"]}/embedded/cookbooks/firezone/attributes/default.rb", "r" + "#{node['firezone']['install_directory']}/embedded/cookbooks/firezone/attributes/default.rb", 'r' ).read.each_line do |line| file.write "# #{line}" end @@ -54,7 +56,7 @@ class Firezone create_directory!(filename) if File.exist?(filename) node.consume_attributes( - "firezone" => Chef::JSONCompat.from_json(open(filename).read) + 'firezone' => Chef::JSONCompat.from_json(open(filename).read) ) end rescue StandardError => e @@ -66,33 +68,33 @@ class Firezone def self.load_or_create_secrets!(filename, node) create_directory!(filename) secrets = Chef::JSONCompat.from_json(File.open(filename).read) - node.consume_attributes("firezone" => secrets) + node.consume_attributes('firezone' => secrets) rescue Errno::ENOENT begin secret_key_base = - node.dig("firezone", "secret_key_base") || SecureRandom.base64(48) + node.dig('firezone', 'secret_key_base') || SecureRandom.base64(48) live_view_signing_salt = - node.dig("firezone", "live_view_signing_salt") || SecureRandom.base64(24) + node.dig('firezone', 'live_view_signing_salt') || SecureRandom.base64(24) cookie_signing_salt = - node.dig("firezone", "cookie_signing_salt") || SecureRandom.base64(6) + node.dig('firezone', 'cookie_signing_salt') || SecureRandom.base64(6) wireguard_private_key = - node.dig("firezone", - "wireguard_private_key") || `#{node["firezone"]["install_directory"]}/embedded/bin/wg genkey`.chomp + node.dig('firezone', + 'wireguard_private_key') || `#{node['firezone']['install_directory']}/embedded/bin/wg genkey`.chomp database_encryption_key = - node.dig("firezone", "database_encryption_key") || SecureRandom.base64(32) + node.dig('firezone', 'database_encryption_key') || SecureRandom.base64(32) default_admin_password = - node.dig("firezone", "default_admin_password") || SecureRandom.base64(8) + node.dig('firezone', 'default_admin_password') || SecureRandom.base64(8) secrets = { - "secret_key_base" => secret_key_base, - "live_view_signing_salt" => live_view_signing_salt, - "cookie_signing_salt" => cookie_signing_salt, - "wireguard_private_key" => wireguard_private_key, - "database_encryption_key" => database_encryption_key, - "default_admin_password" => default_admin_password + 'secret_key_base' => secret_key_base, + 'live_view_signing_salt' => live_view_signing_salt, + 'cookie_signing_salt' => cookie_signing_salt, + 'wireguard_private_key' => wireguard_private_key, + 'database_encryption_key' => database_encryption_key, + 'default_admin_password' => default_admin_password } - open(filename, "w") do |file| + open(filename, 'w') do |file| file.puts Chef::JSONCompat.to_json_pretty(secrets) end Chef::Log.info("Creating secrets file #{filename}") @@ -100,7 +102,7 @@ class Firezone Chef::Log.warn "Could not create #{filename}: #{e}" end - node.consume_attributes("firezone" => secrets) + node.consume_attributes('firezone' => secrets) end def self.audit_config(config) @@ -127,22 +129,22 @@ class Firezone "Got some, but not all, of AWS user credentials. To access an S3 bucket with IAM user credentials, provide #{static_s3_creds}. To use an IAM role, do not set these." end - if config["s3_bucket"] =~ /\./ && - (config["s3_domain_style"] != ":s3_path_url" || config["s3_region"] != "us-east-1") + if config['s3_bucket'] =~ /\./ && + (config['s3_domain_style'] != ':s3_path_url' || config['s3_region'] != 'us-east-1') raise IncompatibleConfig, "Incompatible S3 bucket settings. If the bucket name contains periods, the bucket must be in us-east-1 and the domain style must be :s3_path_url.\nAmazon recommends against periods in bucket names. See: https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html" end end def self.audit_fips_config(config) - unless built_with_fips?(config["install_directory"]) + unless built_with_fips?(config['install_directory']) if fips_enabled_in_kernel? raise IncompatibleConfig, - "Detected FIPS is enabled in the kernel, but FIPS is not supported by this installer." + 'Detected FIPS is enabled in the kernel, but FIPS is not supported by this installer.' end - if config["fips_enabled"] + if config['fips_enabled'] raise IncompatibleConfig, - "You have enabled FIPS in your configuration, but FIPS is not supported by this installer." + 'You have enabled FIPS in your configuration, but FIPS is not supported by this installer.' end end end @@ -152,32 +154,32 @@ class Firezone end def self.fips_enabled_in_kernel? - fips_path = "/proc/sys/crypto/fips_enabled" - (File.exist?(fips_path) && File.read(fips_path).chomp != "0") + fips_path = '/proc/sys/crypto/fips_enabled' + (File.exist?(fips_path) && File.read(fips_path).chomp != '0') end def self.maybe_turn_on_fips(node) # the compexity of this method is currently needed to figure out what words to display # to the poor human who has to deal with FIPS - case node["firezone"]["fips_enabled"] + case node['firezone']['fips_enabled'] when nil # the default value, set fips mode based on whether it is enabled in the kernel - node.normal["firezone"]["fips_enabled"] = Firezone::Config.fips_enabled_in_kernel? - if node["firezone"]["fips_enabled"] - Chef::Log.warn("Detected FIPS-enabled kernel; enabling FIPS 140-2 for Firezone services.") + node.normal['firezone']['fips_enabled'] = Firezone::Config.fips_enabled_in_kernel? + if node['firezone']['fips_enabled'] + Chef::Log.warn('Detected FIPS-enabled kernel; enabling FIPS 140-2 for Firezone services.') end when false - node.normal["firezone"]["fips_enabled"] = Firezone::Config.fips_enabled_in_kernel? - if node["firezone"]["fips_enabled"] - Chef::Log.warn("Detected FIPS-enabled kernel; enabling FIPS 140-2 for Firezone services.") - Chef::Log.warn("fips_enabled was set to false; ignoring this and setting to true or else Firezone services will fail with crypto errors.") + node.normal['firezone']['fips_enabled'] = Firezone::Config.fips_enabled_in_kernel? + if node['firezone']['fips_enabled'] + Chef::Log.warn('Detected FIPS-enabled kernel; enabling FIPS 140-2 for Firezone services.') + Chef::Log.warn('fips_enabled was set to false; ignoring this and setting to true or else Firezone services will fail with crypto errors.') end when true - Chef::Log.warn("Overriding FIPS detection: FIPS 140-2 mode is ON.") + Chef::Log.warn('Overriding FIPS detection: FIPS 140-2 mode is ON.') else - node.normal["firezone"]["fips_enabled"] = true - Chef::Log.warn("fips_enabled is set to something other than boolean true/false; assuming FIPS mode should be enabled.") - Chef::Log.warn("Overriding FIPS detection: FIPS 140-2 mode is ON.") + node.normal['firezone']['fips_enabled'] = true + Chef::Log.warn('fips_enabled is set to something other than boolean true/false; assuming FIPS mode should be enabled.') + Chef::Log.warn('Overriding FIPS detection: FIPS 140-2 mode is ON.') end end @@ -188,11 +190,11 @@ class Firezone # If the value is a String or Number and the attribute name is attr_name. # Used to write out environment variables to a file. def self.environment_variables_from(attributes) - attributes.reduce "" do |str, attr| + attributes.reduce '' do |str, attr| str << if attr[1].is_a?(String) || attr[1].is_a?(Numeric) || attr[1] == true || attr[1] == false "export #{attr[0].upcase}=\"#{attr[1]}\"\n" else - "" + '' end end end @@ -202,53 +204,53 @@ class Firezone # NOTE: All these variables must be Strings env = { - "EGRESS_INTERFACE" => attributes["egress_interface"], - "WG_PATH" => "#{attributes["install_directory"]}/embedded/bin/wg", - "NFT_PATH" => "#{attributes["install_directory"]}/embedded/sbin/nft", - "MIX_ENV" => "prod", - "DATABASE_NAME" => attributes["database"]["name"], - "DATABASE_USER" => attributes["database"]["user"], - "DATABASE_HOST" => attributes["database"]["host"], - "DATABASE_PORT" => attributes["database"]["port"].to_s, - "DATABASE_POOL" => attributes["database"]["pool"].to_s, - "DATABASE_SSL" => attributes["database"]["ssl"].to_s, - "DATABASE_SSL_OPTS" => attributes["database"]["ssl_opts"].to_json, - "DATABASE_PARAMETERS" => attributes["database"]["parameters"].to_json, - "PHOENIX_PORT" => attributes["phoenix"]["port"].to_s, - "URL_HOST" => attributes["fqdn"], - "ADMIN_EMAIL" => attributes["admin_email"], - "WIREGUARD_INTERFACE_NAME" => attributes["wireguard"]["interface_name"], - "WIREGUARD_PORT" => attributes["wireguard"]["port"].to_s, - "WIREGUARD_MTU" => attributes["wireguard"]["mtu"].to_s, - "WIREGUARD_ENDPOINT" => attributes["wireguard"]["endpoint"].to_s, - "WIREGUARD_DNS" => attributes["wireguard"]["dns"].to_s, - "WIREGUARD_ALLOWED_IPS" => attributes["wireguard"]["allowed_ips"].to_s, - "WIREGUARD_PERSISTENT_KEEPALIVE" => attributes["wireguard"]["persistent_keepalive"].to_s, - "WIREGUARD_PUBLIC_KEY" => attributes["wireguard_public_key"], - "WIREGUARD_IPV4_ENABLED" => attributes["wireguard"]["ipv4"]["enabled"].to_s, - "WIREGUARD_IPV4_NETWORK" => attributes["wireguard"]["ipv4"]["network"], - "WIREGUARD_IPV4_ADDRESS" => attributes["wireguard"]["ipv4"]["address"], - "WIREGUARD_IPV6_ENABLED" => attributes["wireguard"]["ipv6"]["enabled"].to_s, - "WIREGUARD_IPV6_NETWORK" => attributes["wireguard"]["ipv6"]["network"], - "WIREGUARD_IPV6_ADDRESS" => attributes["wireguard"]["ipv6"]["address"], + 'EGRESS_INTERFACE' => attributes['egress_interface'], + 'WG_PATH' => "#{attributes['install_directory']}/embedded/bin/wg", + 'NFT_PATH' => "#{attributes['install_directory']}/embedded/sbin/nft", + 'MIX_ENV' => 'prod', + 'DATABASE_NAME' => attributes['database']['name'], + 'DATABASE_USER' => attributes['database']['user'], + 'DATABASE_HOST' => attributes['database']['host'], + 'DATABASE_PORT' => attributes['database']['port'].to_s, + 'DATABASE_POOL' => attributes['database']['pool'].to_s, + 'DATABASE_SSL' => attributes['database']['ssl'].to_s, + 'DATABASE_SSL_OPTS' => attributes['database']['ssl_opts'].to_json, + 'DATABASE_PARAMETERS' => attributes['database']['parameters'].to_json, + 'PHOENIX_PORT' => attributes['phoenix']['port'].to_s, + 'URL_HOST' => attributes['fqdn'], + 'ADMIN_EMAIL' => attributes['admin_email'], + 'WIREGUARD_INTERFACE_NAME' => attributes['wireguard']['interface_name'], + 'WIREGUARD_PORT' => attributes['wireguard']['port'].to_s, + 'WIREGUARD_MTU' => attributes['wireguard']['mtu'].to_s, + 'WIREGUARD_ENDPOINT' => attributes['wireguard']['endpoint'].to_s, + 'WIREGUARD_DNS' => attributes['wireguard']['dns'].to_s, + 'WIREGUARD_ALLOWED_IPS' => attributes['wireguard']['allowed_ips'].to_s, + 'WIREGUARD_PERSISTENT_KEEPALIVE' => attributes['wireguard']['persistent_keepalive'].to_s, + 'WIREGUARD_PUBLIC_KEY' => attributes['wireguard_public_key'], + 'WIREGUARD_IPV4_ENABLED' => attributes['wireguard']['ipv4']['enabled'].to_s, + 'WIREGUARD_IPV4_NETWORK' => attributes['wireguard']['ipv4']['network'], + 'WIREGUARD_IPV4_ADDRESS' => attributes['wireguard']['ipv4']['address'], + 'WIREGUARD_IPV6_ENABLED' => attributes['wireguard']['ipv6']['enabled'].to_s, + 'WIREGUARD_IPV6_NETWORK' => attributes['wireguard']['ipv6']['network'], + 'WIREGUARD_IPV6_ADDRESS' => attributes['wireguard']['ipv6']['address'], # Allow env var to override config - "TELEMETRY_ENABLED" => ENV.fetch("TELEMETRY_ENABLED", - attributes["telemetry"]["enabled"] == false ? "false" : "true"), - "TELEMETRY_ID" => attributes["telemetry_id"], - "CONNECTIVITY_CHECKS_ENABLED" => attributes["connectivity_checks"]["enabled"].to_s, - "CONNECTIVITY_CHECKS_INTERVAL" => attributes["connectivity_checks"]["interval"].to_s, + 'TELEMETRY_ENABLED' => ENV.fetch('TELEMETRY_ENABLED', + attributes['telemetry']['enabled'] == false ? 'false' : 'true'), + 'TELEMETRY_ID' => attributes['telemetry_id'], + 'CONNECTIVITY_CHECKS_ENABLED' => attributes['connectivity_checks']['enabled'].to_s, + 'CONNECTIVITY_CHECKS_INTERVAL' => attributes['connectivity_checks']['interval'].to_s, # secrets - "SECRET_KEY_BASE" => attributes["secret_key_base"], - "LIVE_VIEW_SIGNING_SALT" => attributes["live_view_signing_salt"], - "COOKIE_SIGNING_SALT" => attributes["cookie_signing_salt"], - "DATABASE_ENCRYPTION_KEY" => attributes["database_encryption_key"] + 'SECRET_KEY_BASE' => attributes['secret_key_base'], + 'LIVE_VIEW_SIGNING_SALT' => attributes['live_view_signing_salt'], + 'COOKIE_SIGNING_SALT' => attributes['cookie_signing_salt'], + 'DATABASE_ENCRYPTION_KEY' => attributes['database_encryption_key'] } - env.merge!("DATABASE_PASSWORD" => attributes["database"]["password"]) if attributes.dig("database", "password") + env.merge!('DATABASE_PASSWORD' => attributes['database']['password']) if attributes.dig('database', 'password') - if attributes["default_admin_password"] - env.merge!("DEFAULT_ADMIN_PASSWORD" => attributes["default_admin_password"]) + if attributes['default_admin_password'] + env.merge!('DEFAULT_ADMIN_PASSWORD' => attributes['default_admin_password']) end env @@ -262,4 +264,5 @@ class Firezone end private_class_method :create_directory! end + # rubocop:enable Metrics/ModuleLength end diff --git a/omnibus/cookbooks/firezone/metadata.rb b/omnibus/cookbooks/firezone/metadata.rb index 9c4e94499..9fe7e6ce5 100644 --- a/omnibus/cookbooks/firezone/metadata.rb +++ b/omnibus/cookbooks/firezone/metadata.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -name "firezone" -maintainer "Firezone" -maintainer_email "infra@firez.one" -license "Apache-2.0" -description "Installs/Configures firezone" -version "0.0.1" -chef_version ">= 16.0" +name 'firezone' +maintainer 'Firezone' +maintainer_email 'infra@firez.one' +license 'Apache-2.0' +description 'Installs/Configures firezone' +version '0.0.1' +chef_version '>= 16.0' -depends "enterprise" -depends "runit" -depends "line" +depends 'enterprise' +depends 'runit' +depends 'line' # The `issues_url` points to the location where issues for this cookbook are # tracked. A `View Issues` link will be displayed on this cookbook's page when diff --git a/omnibus/cookbooks/firezone/recipes/app.rb b/omnibus/cookbooks/firezone/recipes/app.rb index 0f72c54f6..ae964bd8c 100644 --- a/omnibus/cookbooks/firezone/recipes/app.rb +++ b/omnibus/cookbooks/firezone/recipes/app.rb @@ -18,41 +18,41 @@ # limitations under the License. # -include_recipe "firezone::config" -include_recipe "firezone::phoenix" +include_recipe 'firezone::config' +include_recipe 'firezone::phoenix' -execute "fix app permissions" do - app_dir = node["firezone"]["app_directory"] - user = node["firezone"]["user"] - group = node["firezone"]["group"] +execute 'fix app permissions' do + app_dir = node['firezone']['app_directory'] + user = node['firezone']['user'] + group = node['firezone']['group'] command "chown -R #{user}:#{group} #{app_dir} && chmod -R o-rwx #{app_dir} && chmod -R g-rwx #{app_dir}" end -file "environment-variables" do - path "#{node["firezone"]["var_directory"]}/etc/env" +file 'environment-variables' do + path "#{node['firezone']['var_directory']}/etc/env" - attributes = node["firezone"].to_hash + attributes = node['firezone'].to_hash # Remove sensitive fields that aren't required for application startup - attributes.delete("wireguard_private_key") - attributes.delete("default_admin_password") + attributes.delete('wireguard_private_key') + attributes.delete('default_admin_password') # Add needed fields to top-level so they get added to application env and get # updated when config is updated. attributes.merge!( - "force_ssl" => node["firezone"]["nginx"]["force_ssl"], - "mix_env" => "prod" + 'force_ssl' => node['firezone']['nginx']['force_ssl'], + 'mix_env' => 'prod' ) content Firezone::Config.environment_variables_from(attributes) - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0600" + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0600' end -execute "database schema" do +execute 'database schema' do command 'bin/firezone eval "FzHttp.Release.migrate"' - cwd node["firezone"]["app_directory"] - environment(Firezone::Config.app_env(node["firezone"])) - user node["firezone"]["user"] + cwd node['firezone']['app_directory'] + environment(Firezone::Config.app_env(node['firezone'])) + user node['firezone']['user'] end diff --git a/omnibus/cookbooks/firezone/recipes/config.rb b/omnibus/cookbooks/firezone/recipes/config.rb index b2451f21e..3e504f4de 100644 --- a/omnibus/cookbooks/firezone/recipes/config.rb +++ b/omnibus/cookbooks/firezone/recipes/config.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require "securerandom" +require 'securerandom' # Cookbook:: firezone # Recipe:: config @@ -27,88 +27,88 @@ require "securerandom" # in it. Firezone::Config.load_or_create!( - "#{node["firezone"]["config_directory"]}/firezone.rb", + "#{node['firezone']['config_directory']}/firezone.rb", node ) Firezone::Config.load_from_json!( - "#{node["firezone"]["config_directory"]}/firezone.json", + "#{node['firezone']['config_directory']}/firezone.json", node ) Firezone::Config.load_or_create_secrets!( - "#{node["firezone"]["config_directory"]}/secrets.json", + "#{node['firezone']['config_directory']}/secrets.json", node ) # Generate new telemetry_id if doesn't exist -unless /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node["firezone"]["telemetry_id"].to_s) - node.default["firezone"]["telemetry_id"] = SecureRandom.uuid +unless /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node['firezone']['telemetry_id'].to_s) + node.default['firezone']['telemetry_id'] = SecureRandom.uuid end -node.default["firezone"]["wireguard_public_key"] = - `echo '#{node["firezone"]["wireguard_private_key"]}' | #{node["firezone"]["install_directory"]}/embedded/bin/wg pubkey`.chomp +node.default['firezone']['wireguard_public_key'] = + `echo '#{node['firezone']['wireguard_private_key']}' | #{node['firezone']['install_directory']}/embedded/bin/wg pubkey`.chomp -Firezone::Config.audit_config(node["firezone"]) +Firezone::Config.audit_config(node['firezone']) Firezone::Config.maybe_turn_on_fips(node) # Copy things we need from the firezone namespace to the top level. This is # necessary for some community cookbooks. -node.consume_attributes("runit" => node["firezone"]["runit"]) +node.consume_attributes('runit' => node['firezone']['runit']) -user node["firezone"]["user"] +user node['firezone']['user'] -group node["firezone"]["group"] do - members [node["firezone"]["user"]] +group node['firezone']['group'] do + members [node['firezone']['user']] end -directory node["firezone"]["config_directory"] do - owner node["firezone"]["user"] - group node["firezone"]["group"] +directory node['firezone']['config_directory'] do + owner node['firezone']['user'] + group node['firezone']['group'] end -directory node["firezone"]["var_directory"] do - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0700" +directory node['firezone']['var_directory'] do + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0700' recursive true end -directory "#{node["firezone"]["app_directory"]}/tmp" do - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0700" +directory "#{node['firezone']['app_directory']}/tmp" do + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0700' recursive true end -directory node["firezone"]["log_directory"] do - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0700" +directory node['firezone']['log_directory'] do + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0700' recursive true end -directory "#{node["firezone"]["var_directory"]}/etc" do - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0700" +directory "#{node['firezone']['var_directory']}/etc" do + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0700' end -file "configuration-variables" do - path "#{node["firezone"]["config_directory"]}/firezone.rb" - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0600" +file 'configuration-variables' do + path "#{node['firezone']['config_directory']}/firezone.rb" + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0600' end -file "#{node["firezone"]["config_directory"]}/secrets.json" do - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0600" +file "#{node['firezone']['config_directory']}/secrets.json" do + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0600' end -file "#{node["firezone"]["var_directory"]}/cache/wg_private_key" do - owner "root" - group "root" - mode "0600" - content node["firezone"]["wireguard_private_key"] +file "#{node['firezone']['var_directory']}/cache/wg_private_key" do + owner 'root' + group 'root' + mode '0600' + content node['firezone']['wireguard_private_key'] action :create_if_missing end diff --git a/omnibus/cookbooks/firezone/recipes/create_admin.rb b/omnibus/cookbooks/firezone/recipes/create_admin.rb index a40b7107b..7ced43dcf 100644 --- a/omnibus/cookbooks/firezone/recipes/create_admin.rb +++ b/omnibus/cookbooks/firezone/recipes/create_admin.rb @@ -18,16 +18,16 @@ # limitations under the License. # -include_recipe "firezone::config" +include_recipe 'firezone::config' -execute "create_admin" do +execute 'create_admin' do command 'bin/firezone rpc "FzHttp.Release.create_admin_user"' - cwd node["firezone"]["app_directory"] - environment(Firezone::Config.app_env(node["firezone"])) - user node["firezone"]["user"] + cwd node['firezone']['app_directory'] + environment(Firezone::Config.app_env(node['firezone'])) + user node['firezone']['user'] end -log "admin_created" do +log 'admin_created' do msg = <<~MSG ================================================================================= @@ -35,8 +35,8 @@ log "admin_created" do Use this to log into the Web UI. - Email: #{node["firezone"]["admin_email"]} - Password: #{node["firezone"]["default_admin_password"]} + Email: #{node['firezone']['admin_email']} + Password: #{node['firezone']['default_admin_password']} ================================================================================= MSG diff --git a/omnibus/cookbooks/firezone/recipes/database.rb b/omnibus/cookbooks/firezone/recipes/database.rb index bb5b35501..808b5eecf 100644 --- a/omnibus/cookbooks/firezone/recipes/database.rb +++ b/omnibus/cookbooks/firezone/recipes/database.rb @@ -19,35 +19,35 @@ # limitations under the License. # -include_recipe "firezone::config" +include_recipe 'firezone::config' # The enterprise_pg resources use the CLI to create databases and users. Set # these environment variables so the commands have the correct connection # settings. -ENV["PGHOST"] = node["firezone"]["database"]["host"] -ENV["PGPORT"] = node["firezone"]["database"]["port"].to_s -ENV["PGUSER"] = node["firezone"]["database"]["user"] -ENV["PGPASSWORD"] = node["firezone"]["database"]["password"] +ENV['PGHOST'] = node['firezone']['database']['host'] +ENV['PGPORT'] = node['firezone']['database']['port'].to_s +ENV['PGUSER'] = node['firezone']['database']['user'] +ENV['PGPASSWORD'] = node['firezone']['database']['password'] -enterprise_pg_user node["firezone"]["database"]["user"] do +enterprise_pg_user node['firezone']['database']['user'] do superuser true - password node["firezone"]["database"]["password"] || "" + password node['firezone']['database']['password'] || '' # If the database user is the same as the main postgres user, don't create it. not_if do - node["firezone"]["database"]["user"] == - node["firezone"]["postgresql"]["username"] + node['firezone']['database']['user'] == + node['firezone']['postgresql']['username'] end end -enterprise_pg_database node["firezone"]["database"]["name"] do - owner node["firezone"]["database"]["user"] +enterprise_pg_database node['firezone']['database']['name'] do + owner node['firezone']['database']['user'] end -node["firezone"]["database"]["extensions"].each do |ext, _enable| +node['firezone']['database']['extensions'].each do |ext, _enable| execute "create postgresql #{ext} extension" do - user node["firezone"]["database"]["user"] + user node['firezone']['database']['user'] command "echo 'CREATE EXTENSION IF NOT EXISTS #{ext}' | psql" - not_if "echo '\\dx' | psql #{node["firezone"]["database"]["name"]} | grep #{ext}" + not_if "echo '\\dx' | psql #{node['firezone']['database']['name']} | grep #{ext}" end end diff --git a/omnibus/cookbooks/firezone/recipes/default.rb b/omnibus/cookbooks/firezone/recipes/default.rb index f81740dbd..263e0ac52 100644 --- a/omnibus/cookbooks/firezone/recipes/default.rb +++ b/omnibus/cookbooks/firezone/recipes/default.rb @@ -5,28 +5,28 @@ # # Copyright:: 2021, Firezone, All Rights Reserved. -include_recipe "firezone::telemetry" -include_recipe "firezone::config" -include_recipe "firezone::setcap" -include_recipe "firezone::log_management" -include_recipe "firezone::ssl" -include_recipe "firezone::network" -include_recipe "firezone::postgresql" -include_recipe "firezone::nginx" -include_recipe "firezone::database" -include_recipe "firezone::app" +include_recipe 'firezone::telemetry' +include_recipe 'firezone::config' +include_recipe 'firezone::setcap' +include_recipe 'firezone::log_management' +include_recipe 'firezone::ssl' +include_recipe 'firezone::network' +include_recipe 'firezone::postgresql' +include_recipe 'firezone::nginx' +include_recipe 'firezone::database' +include_recipe 'firezone::app' # Write out a firezone-running.json at the end of the run -file "#{node["firezone"]["config_directory"]}/firezone-running.json" do - content Chef::JSONCompat.to_json_pretty("firezone" => node["firezone"]) - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0600" +file "#{node['firezone']['config_directory']}/firezone-running.json" do + content Chef::JSONCompat.to_json_pretty('firezone' => node['firezone']) + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0600' end -file "#{node["firezone"]["var_directory"]}/.license.accepted" do - content "" - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0600" +file "#{node['firezone']['var_directory']}/.license.accepted" do + content '' + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0600' end diff --git a/omnibus/cookbooks/firezone/recipes/log_management.rb b/omnibus/cookbooks/firezone/recipes/log_management.rb index fd6f189b8..e89a47f9d 100644 --- a/omnibus/cookbooks/firezone/recipes/log_management.rb +++ b/omnibus/cookbooks/firezone/recipes/log_management.rb @@ -24,31 +24,31 @@ # components do not handle logging to STDOUT well, so logrotate is added # to manage the logs generated by those services. -include_recipe "firezone::config" +include_recipe 'firezone::config' -directory "#{node["firezone"]["var_directory"]}/etc/logrotate.d" do - owner "root" - group "root" - mode "0755" +directory "#{node['firezone']['var_directory']}/etc/logrotate.d" do + owner 'root' + group 'root' + mode '0755' end -template "#{node["firezone"]["var_directory"]}/etc/logrotate.conf" do - source "logrotate.conf.erb" - mode "0644" - owner "root" - group "root" +template "#{node['firezone']['var_directory']}/etc/logrotate.conf" do + source 'logrotate.conf.erb' + mode '0644' + owner 'root' + group 'root' variables( - var_directory: node["firezone"]["var_directory"] + var_directory: node['firezone']['var_directory'] ) end -template "/etc/cron.hourly/firezone_logrotate" do - source "logrotate.cron.erb" - mode "0755" - owner "root" - group "root" +template '/etc/cron.hourly/firezone_logrotate' do + source 'logrotate.cron.erb' + mode '0755' + owner 'root' + group 'root' variables( - install_directory: node["firezone"]["install_directory"], - var_directory: node["firezone"]["var_directory"] + install_directory: node['firezone']['install_directory'], + var_directory: node['firezone']['var_directory'] ) end diff --git a/omnibus/cookbooks/firezone/recipes/network.rb b/omnibus/cookbooks/firezone/recipes/network.rb index 7ef678ef6..0e9ca61da 100644 --- a/omnibus/cookbooks/firezone/recipes/network.rb +++ b/omnibus/cookbooks/firezone/recipes/network.rb @@ -11,13 +11,13 @@ # This recipe basically performs the work of wg-quick without having to # have a configuration file. -include_recipe "firezone::config" -include_recipe "line::default" +include_recipe 'firezone::config' +include_recipe 'line::default' -require "mixlib/shellout" +require 'mixlib/shellout' # Use ip route for finding default egress interface -awk_path = "#{node["firezone"]["install_directory"]}/embedded/bin/awk" +awk_path = "#{node['firezone']['install_directory']}/embedded/bin/awk" egress_int_cmd = Mixlib::ShellOut.new("ip route show default 0.0.0.0/0 | grep -oP '(?<=dev ).*' | cut -f1 -d' '") egress_interface = egress_int_cmd.run_command.stdout.chomp # Set default endpoint ip to default egress ip @@ -25,19 +25,19 @@ egress_addr_cmd = "ip address show dev #{egress_interface} | grep 'inet ' | #{aw egress_ip = Mixlib::ShellOut.new(egress_addr_cmd) egress_ip.run_command -node.default["firezone"]["wireguard"]["endpoint"] ||= egress_ip.stdout.chomp.gsub(%r{/.*}, "") -node.default["firezone"]["egress_interface"] = egress_interface +node.default['firezone']['wireguard']['endpoint'] ||= egress_ip.stdout.chomp.gsub(%r{/.*}, '') +node.default['firezone']['egress_interface'] = egress_interface -replace_or_add "IPv4 packet forwarding" do - path "/etc/sysctl.conf" +replace_or_add 'IPv4 packet forwarding' do + path '/etc/sysctl.conf' pattern(/^\s+#\s+net.ipv4.ip_forward\s+=\s+1/) - line "net.ipv4.ip_forward=1" + line 'net.ipv4.ip_forward=1' end -replace_or_add "IPv6 packet forwarding" do - path "/etc/sysctl.conf" +replace_or_add 'IPv6 packet forwarding' do + path '/etc/sysctl.conf' pattern(/^\s+#\s+net.ipv6.conf.all.forwarding\s+=\s+1/) - line "net.ipv6.conf.all.forwarding=1" + line 'net.ipv6.conf.all.forwarding=1' end -execute "sysctl -p /etc/sysctl.conf" +execute 'sysctl -p /etc/sysctl.conf' diff --git a/omnibus/cookbooks/firezone/recipes/nginx.rb b/omnibus/cookbooks/firezone/recipes/nginx.rb index 4c833c368..215780bf7 100644 --- a/omnibus/cookbooks/firezone/recipes/nginx.rb +++ b/omnibus/cookbooks/firezone/recipes/nginx.rb @@ -19,60 +19,60 @@ # limitations under the License. # -include_recipe "firezone::config" +include_recipe 'firezone::config' -[node["firezone"]["nginx"]["cache"]["directory"], - node["firezone"]["nginx"]["log_directory"], - node["firezone"]["nginx"]["directory"], - "#{node["firezone"]["nginx"]["directory"]}/conf.d", - "#{node["firezone"]["nginx"]["directory"]}/sites-enabled"].each do |dir| +[node['firezone']['nginx']['cache']['directory'], + node['firezone']['nginx']['log_directory'], + node['firezone']['nginx']['directory'], + "#{node['firezone']['nginx']['directory']}/conf.d", + "#{node['firezone']['nginx']['directory']}/sites-enabled"].each do |dir| directory dir do - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0700" + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0700' recursive true end end # Link the mime.types -link "#{node["firezone"]["nginx"]["directory"]}/mime.types" do - to "#{node["firezone"]["install_directory"]}/embedded/conf/mime.types" +link "#{node['firezone']['nginx']['directory']}/mime.types" do + to "#{node['firezone']['install_directory']}/embedded/conf/mime.types" end -template "nginx.conf" do - path "#{node["firezone"]["nginx"]["directory"]}/nginx.conf" - source "nginx.conf.erb" - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0600" - variables(nginx: node["firezone"]["nginx"]) +template 'nginx.conf' do + path "#{node['firezone']['nginx']['directory']}/nginx.conf" + source 'nginx.conf.erb' + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0600' + variables(nginx: node['firezone']['nginx']) end -if node["firezone"]["nginx"]["enabled"] - component_runit_service "nginx" do - package "firezone" +if node['firezone']['nginx']['enabled'] + component_runit_service 'nginx' do + package 'firezone' action :enable - subscribes :restart, "template[nginx.conf]" - subscribes :restart, "template[phoenix.nginx.conf]" + subscribes :restart, 'template[nginx.conf]' + subscribes :restart, 'template[phoenix.nginx.conf]' end else - runit_service "nginx" do + runit_service 'nginx' do action :disable end end # setup log rotation with logrotate because nginx and runit's svlogd # differ in opinion about who does the logging -template "#{node["firezone"]["var_directory"]}/etc/logrotate.d/nginx" do - source "logrotate-rule.erb" - owner "root" - group "root" - mode "0644" +template "#{node['firezone']['var_directory']}/etc/logrotate.d/nginx" do + source 'logrotate-rule.erb' + owner 'root' + group 'root' + mode '0644' variables( - "log_directory" => node["firezone"]["nginx"]["log_directory"], - "log_rotation" => node["firezone"]["nginx"]["log_rotation"], - "postrotate" => "#{node["firezone"]["install_directory"]}/embedded/sbin/nginx -c #{node["firezone"]["nginx"]["directory"]}/nginx.conf -s reopen", - "owner" => "root", - "group" => "root" + 'log_directory' => node['firezone']['nginx']['log_directory'], + 'log_rotation' => node['firezone']['nginx']['log_rotation'], + 'postrotate' => "#{node['firezone']['install_directory']}/embedded/sbin/nginx -c #{node['firezone']['nginx']['directory']}/nginx.conf -s reopen", + 'owner' => 'root', + 'group' => 'root' ) end diff --git a/omnibus/cookbooks/firezone/recipes/phoenix.rb b/omnibus/cookbooks/firezone/recipes/phoenix.rb index 955c386bf..8edd2e927 100644 --- a/omnibus/cookbooks/firezone/recipes/phoenix.rb +++ b/omnibus/cookbooks/firezone/recipes/phoenix.rb @@ -21,49 +21,49 @@ # Common configuration for Phoenix -include_recipe "firezone::config" -include_recipe "firezone::nginx" -include_recipe "firezone::wireguard" +include_recipe 'firezone::config' +include_recipe 'firezone::nginx' +include_recipe 'firezone::wireguard' -[node["firezone"]["phoenix"]["log_directory"], - "#{node["firezone"]["var_directory"]}/phoenix/run"].each do |dir| +[node['firezone']['phoenix']['log_directory'], + "#{node['firezone']['var_directory']}/phoenix/run"].each do |dir| directory dir do - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0700" + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0700' recursive true end end -template "phoenix.nginx.conf" do - path "#{node["firezone"]["nginx"]["directory"]}/sites-enabled/phoenix" - source "phoenix.nginx.conf.erb" - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0600" - variables(nginx: node["firezone"]["nginx"], - phoenix: node["firezone"]["phoenix"], - fqdn: node["firezone"]["fqdn"], - fips_enabled: node["firezone"]["fips_enabled"], - ssl: node["firezone"]["ssl"], - app_directory: node["firezone"]["app_directory"]) +template 'phoenix.nginx.conf' do + path "#{node['firezone']['nginx']['directory']}/sites-enabled/phoenix" + source 'phoenix.nginx.conf.erb' + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0600' + variables(nginx: node['firezone']['nginx'], + phoenix: node['firezone']['phoenix'], + fqdn: node['firezone']['fqdn'], + fips_enabled: node['firezone']['fips_enabled'], + ssl: node['firezone']['ssl'], + app_directory: node['firezone']['app_directory']) end -if node["firezone"]["phoenix"]["enabled"] - component_runit_service "phoenix" do +if node['firezone']['phoenix']['enabled'] + component_runit_service 'phoenix' do runit_attributes( - env: Firezone::Config.app_env(node["firezone"]), + env: Firezone::Config.app_env(node['firezone']), finish: true ) - package "firezone" - control ["t"] + package 'firezone' + control ['t'] action :enable - subscribes :restart, "file[environment-variables]" - subscribes :restart, "file[disable-telemetry]" - subscribes :restart, "file[telemetry-id]" + subscribes :restart, 'file[environment-variables]' + subscribes :restart, 'file[disable-telemetry]' + subscribes :restart, 'file[telemetry-id]' end else - runit_service "phoenix" do + runit_service 'phoenix' do action :disable end end diff --git a/omnibus/cookbooks/firezone/recipes/postgresql.rb b/omnibus/cookbooks/firezone/recipes/postgresql.rb index fcb5cba79..4f2f4bc68 100644 --- a/omnibus/cookbooks/firezone/recipes/postgresql.rb +++ b/omnibus/cookbooks/firezone/recipes/postgresql.rb @@ -19,38 +19,38 @@ # limitations under the License. # -include_recipe "firezone::config" -include_recipe "enterprise::runit" +include_recipe 'firezone::config' +include_recipe 'enterprise::runit' # These sysctl settings make the shared memory settings work for larger # instances %w[shmmax shmall].each do |param| sysctl "kernel.#{param}" do - value node["firezone"]["postgresql"][param] + value node['firezone']['postgresql'][param] end end -directory node["firezone"]["postgresql"]["log_directory"] do - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0700" +directory node['firezone']['postgresql']['log_directory'] do + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0700' recursive true end -if node["firezone"]["postgresql"]["enabled"] - enterprise_pg_cluster "firezone" do - data_dir node["firezone"]["postgresql"]["data_directory"] - encoding "UTF8" +if node['firezone']['postgresql']['enabled'] + enterprise_pg_cluster 'firezone' do + data_dir node['firezone']['postgresql']['data_directory'] + encoding 'UTF8' end - component_runit_service "postgresql" do - package "firezone" - control ["t"] + component_runit_service 'postgresql' do + package 'firezone' + control ['t'] action :enable - subscribes :restart, "enterprise_pg_cluster[firezone]" + subscribes :restart, 'enterprise_pg_cluster[firezone]' end else - runit_service "postgresql" do + runit_service 'postgresql' do action :disable end end diff --git a/omnibus/cookbooks/firezone/recipes/setcap.rb b/omnibus/cookbooks/firezone/recipes/setcap.rb index 62f6c3f5a..8926bc717 100644 --- a/omnibus/cookbooks/firezone/recipes/setcap.rb +++ b/omnibus/cookbooks/firezone/recipes/setcap.rb @@ -8,33 +8,33 @@ # Set capabilities for executables so they can be run without # root privileges. -include_recipe "firezone::config" +include_recipe 'firezone::config' -nft_path = "#{node["firezone"]["install_directory"]}/embedded/sbin/nft" -wg_path = "#{node["firezone"]["install_directory"]}/embedded/bin/wg" +nft_path = "#{node['firezone']['install_directory']}/embedded/sbin/nft" +wg_path = "#{node['firezone']['install_directory']}/embedded/bin/wg" file nft_path do # Ensure phoenix app can control nftables - mode "0700" - owner node["firezone"]["user"] - group node["firezone"]["group"] + mode '0700' + owner node['firezone']['user'] + group node['firezone']['group'] action :touch end file wg_path do # Ensure phoenix app can control WireGuard interface - mode "0700" - owner node["firezone"]["user"] - group node["firezone"]["group"] + mode '0700' + owner node['firezone']['user'] + group node['firezone']['group'] action :touch end # setcap must be performed after the file resource above otherwise # it gets reset -execute "setcap_nft" do +execute 'setcap_nft' do command "setcap 'cap_net_admin,cap_net_raw+eip' #{nft_path}" end -execute "setcap_wg" do +execute 'setcap_wg' do command "setcap 'cap_net_admin,cap_net_raw,cap_dac_read_search+eip' #{wg_path}" end diff --git a/omnibus/cookbooks/firezone/recipes/show_config.rb b/omnibus/cookbooks/firezone/recipes/show_config.rb index ccce59e57..8fc7f3151 100644 --- a/omnibus/cookbooks/firezone/recipes/show_config.rb +++ b/omnibus/cookbooks/firezone/recipes/show_config.rb @@ -19,4 +19,4 @@ # limitations under the License. # -puts Chef::JSONCompat.to_json_pretty(node["firezone"]) +puts Chef::JSONCompat.to_json_pretty(node['firezone']) diff --git a/omnibus/cookbooks/firezone/recipes/ssl.rb b/omnibus/cookbooks/firezone/recipes/ssl.rb index 38cf8595b..0eed4544b 100644 --- a/omnibus/cookbooks/firezone/recipes/ssl.rb +++ b/omnibus/cookbooks/firezone/recipes/ssl.rb @@ -19,62 +19,62 @@ # limitations under the License. # -include_recipe "firezone::config" +include_recipe 'firezone::config' -[node["firezone"]["ssl"]["directory"], - "#{node["firezone"]["ssl"]["directory"]}/ca"].each do |dir| +[node['firezone']['ssl']['directory'], + "#{node['firezone']['ssl']['directory']}/ca"].each do |dir| directory dir do - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0700" + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0700' end end # Unless SSL is disabled, sets up SSL certificates. # Creates a self-signed cert if none is provided. -if node["firezone"]["ssl"]["enabled"] - firezone_ca_dir = File.join(node["firezone"]["ssl"]["directory"], "ca") - ssl_dhparam = File.join(firezone_ca_dir, "dhparams.pem") +if node['firezone']['ssl']['enabled'] + firezone_ca_dir = File.join(node['firezone']['ssl']['directory'], 'ca') + ssl_dhparam = File.join(firezone_ca_dir, 'dhparams.pem') # Generate dhparams.pem for perfect forward secrecy openssl_dhparam ssl_dhparam do key_length 2048 generator 2 - owner "root" - group "root" - mode "0644" + owner 'root' + group 'root' + mode '0644' end - node.default["firezone"]["ssl"]["ssl_dhparam"] ||= ssl_dhparam + node.default['firezone']['ssl']['ssl_dhparam'] ||= ssl_dhparam # A certificate has been supplied - if node["firezone"]["ssl"]["certificate"] + if node['firezone']['ssl']['certificate'] # Link the standard CA cert into our certs directory - link "#{node["firezone"]["ssl"]["directory"]}/cacert.pem" do - to "#{node["firezone"]["install_directory"]}/embedded/ssl/certs/cacert.pem" + link "#{node['firezone']['ssl']['directory']}/cacert.pem" do + to "#{node['firezone']['install_directory']}/embedded/ssl/certs/cacert.pem" end # No certificate has been supplied; generate one else - ssl_keyfile = File.join(firezone_ca_dir, "#{node["firezone"]["fqdn"]}.key") - ssl_crtfile = File.join(firezone_ca_dir, "#{node["firezone"]["fqdn"]}.crt") + ssl_keyfile = File.join(firezone_ca_dir, "#{node['firezone']['fqdn']}.key") + ssl_crtfile = File.join(firezone_ca_dir, "#{node['firezone']['fqdn']}.crt") openssl_x509_certificate ssl_crtfile do - common_name node["firezone"]["fqdn"] - org node["firezone"]["ssl"]["company_name"] - org_unit node["firezone"]["ssl"]["organizational_unit_name"] - country node["firezone"]["ssl"]["country_name"] + common_name node['firezone']['fqdn'] + org node['firezone']['ssl']['company_name'] + org_unit node['firezone']['ssl']['organizational_unit_name'] + country node['firezone']['ssl']['country_name'] key_length 2048 expire 3650 - owner "root" - group "root" - mode "0644" + owner 'root' + group 'root' + mode '0644' end - node.default["firezone"]["ssl"]["certificate"] ||= ssl_crtfile - node.default["firezone"]["ssl"]["certificate_key"] ||= ssl_keyfile + node.default['firezone']['ssl']['certificate'] ||= ssl_crtfile + node.default['firezone']['ssl']['certificate_key'] ||= ssl_keyfile - link "#{node["firezone"]["ssl"]["directory"]}/cacert.pem" do + link "#{node['firezone']['ssl']['directory']}/cacert.pem" do to ssl_crtfile end end diff --git a/omnibus/cookbooks/firezone/recipes/teardown.rb b/omnibus/cookbooks/firezone/recipes/teardown.rb index 48b470fbc..fd78ec6c6 100644 --- a/omnibus/cookbooks/firezone/recipes/teardown.rb +++ b/omnibus/cookbooks/firezone/recipes/teardown.rb @@ -7,18 +7,18 @@ # Teardown all the network settings. Used during uninstall. -include_recipe "firezone::config" +include_recipe 'firezone::config' -require "mixlib/shellout" +require 'mixlib/shellout' -wg_interface = node["firezone"]["wireguard"]["interface_name"] -nft_path = "#{node["firezone"]["install_directory"]}/embedded/sbin/nft" +wg_interface = node['firezone']['wireguard']['interface_name'] +nft_path = "#{node['firezone']['install_directory']}/embedded/sbin/nft" # Delete wireguard interface if exists wg_exists = Mixlib::ShellOut.new("ip link show dev #{wg_interface}") wg_exists.run_command if wg_exists.status.exitstatus.zero? - execute "delete_wireguard_interface" do + execute 'delete_wireguard_interface' do command "ip link delete dev #{wg_interface}" end end @@ -27,7 +27,7 @@ end table_exists_cmd = Mixlib::ShellOut.new("#{nft_path} list table inet firezone") table_exists_cmd.run_command if table_exists_cmd.status.exitstatus.zero? - execute "delete_firewall_table" do + execute 'delete_firewall_table' do command "#{nft_path} delete table inet firezone" end end diff --git a/omnibus/cookbooks/firezone/recipes/telemetry.rb b/omnibus/cookbooks/firezone/recipes/telemetry.rb index c7549e4ec..32504f939 100644 --- a/omnibus/cookbooks/firezone/recipes/telemetry.rb +++ b/omnibus/cookbooks/firezone/recipes/telemetry.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require "securerandom" +require 'securerandom' # Cookbook:: firezone # Recipe:: telemetry @@ -9,28 +9,28 @@ require "securerandom" # Configure telemetry app-wide. -include_recipe "firezone::config" +include_recipe 'firezone::config' -disable_telemetry_path = "#{node["firezone"]["var_directory"]}/.disable_telemetry" +disable_telemetry_path = "#{node['firezone']['var_directory']}/.disable_telemetry" -if node["firezone"]["telemetry"]["enabled"] == false - file "disable_telemetry" do +if node['firezone']['telemetry']['enabled'] == false + file 'disable_telemetry' do path disable_telemetry_path - mode "0644" - user node["firezone"]["user"] - group node["firezone"]["group"] + mode '0644' + user node['firezone']['user'] + group node['firezone']['group'] end else - file "disable_telemetry" do + file 'disable_telemetry' do path disable_telemetry_path action :delete end end -file "telemetry-id" do - path "#{node["firezone"]["var_directory"]}/cache/telemetry_id" - mode "0440" - owner node["firezone"]["user"] - group node["firezone"]["group"] - content node["firezone"]["telemetry_id"] +file 'telemetry-id' do + path "#{node['firezone']['var_directory']}/cache/telemetry_id" + mode '0440' + owner node['firezone']['user'] + group node['firezone']['group'] + content node['firezone']['telemetry_id'] end diff --git a/omnibus/cookbooks/firezone/recipes/wireguard.rb b/omnibus/cookbooks/firezone/recipes/wireguard.rb index 6811496fb..9884989c1 100644 --- a/omnibus/cookbooks/firezone/recipes/wireguard.rb +++ b/omnibus/cookbooks/firezone/recipes/wireguard.rb @@ -7,23 +7,23 @@ # Sets up service to manage WireGuard interface -include_recipe "firezone::config" +include_recipe 'firezone::config' -directory node["firezone"]["wireguard"]["log_directory"] do - owner node["firezone"]["user"] - group node["firezone"]["group"] - mode "0700" +directory node['firezone']['wireguard']['log_directory'] do + owner node['firezone']['user'] + group node['firezone']['group'] + mode '0700' recursive true end -if node["firezone"]["wireguard"]["enabled"] - component_runit_service "wireguard" do - package "firezone" +if node['firezone']['wireguard']['enabled'] + component_runit_service 'wireguard' do + package 'firezone' action :enable - subscribes :restart, "template[sv-wireguard-run]" + subscribes :restart, 'template[sv-wireguard-run]' end else - runit_service "wireguard" do + runit_service 'wireguard' do action :disable end end diff --git a/omnibus/cookbooks/firezone/test/integration/default/default_test.rb b/omnibus/cookbooks/firezone/test/integration/default/default_test.rb index 8a34cf378..cade36db0 100644 --- a/omnibus/cookbooks/firezone/test/integration/default/default_test.rb +++ b/omnibus/cookbooks/firezone/test/integration/default/default_test.rb @@ -7,7 +7,7 @@ unless os.windows? # This is an example test, replace with your own test. - describe user("root"), :skip do + describe user('root'), :skip do it { should exist } end end From 1e135cff85cdfc3f1305e9e4a0adffbf26844e47 Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Sat, 5 Feb 2022 15:42:25 -0800 Subject: [PATCH 17/17] Rubocop --- .pre-commit-config.yaml | 6 + .rubocop.yml | 4 +- omnibus/config/software/erlang.rb | 2 + omnibus/config/software/firezone-cookbooks.rb | 10 +- omnibus/config/software/firezone-ctl.rb | 2 + omnibus/config/software/firezone-scripts.rb | 2 + omnibus/config/software/libossp-uuid.rb | 2 + omnibus/config/software/ncurses.rb | 2 + omnibus/config/software/omnibus-ctl.rb | 2 + omnibus/config/software/openssl.rb | 5 +- omnibus/config/software/perl-thread-queue.rb | 2 + omnibus/config/software/perl.rb | 2 + omnibus/config/software/pkg-config.rb | 2 + omnibus/config/software/ruby.rb | 8 +- omnibus/config/software/runit.rb | 7 +- omnibus/config/software/wireguard-tools.rb | 2 + omnibus/cookbooks/firezone/Policyfile.rb | 2 + .../default/ctl-commands/create_admin.rb | 35 +++--- .../files/default/ctl-commands/reconfigure.rb | 35 +++--- .../cookbooks/firezone/libraries/config.rb | 105 +++++++----------- omnibus/cookbooks/firezone/recipes/config.rb | 5 +- omnibus/cookbooks/firezone/recipes/nginx.rb | 3 +- omnibus/omnibus.rb | 12 +- 23 files changed, 141 insertions(+), 116 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 579b976f9..ebe2afba9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,6 +25,12 @@ repos: language: system pass_filenames: false files: \.ex$ + - id: rubocop + name: 'ruby: rubocop' + entry: rubocop + language: system + pass_filenames: false + files: \.rb$ # Standard pre-commit hooks - repo: https://github.com/pre-commit/pre-commit-hooks diff --git a/.rubocop.yml b/.rubocop.yml index ace622046..d00fa9c49 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -2,6 +2,4 @@ AllCops: TargetRubyVersion: 2.7 Exclude: - "apps/fz_http/assets/node_modules/**/*" - -Layout/LineLength: - Max: 120 + - "omnibus/cookbooks/firezone/attributes/default.rb" diff --git a/omnibus/config/software/erlang.rb b/omnibus/config/software/erlang.rb index 0cec462f7..9a4d6b3fe 100644 --- a/omnibus/config/software/erlang.rb +++ b/omnibus/config/software/erlang.rb @@ -56,6 +56,7 @@ version('18.3') { source sha256: 'a6d08eb7df06e749ccaf3049b33ceae617a3c466c version('18.2') { source sha256: '3944ce41d13fbef1e1e80d7335b2167849e8566581513d5d9226cd211d3d58f9' } version('18.1') { source sha256: '6b956dda690d3f3bf244249e8d422dd606231cc7229675bf5e34b5ba2ae83e9b' } +# rubocop:disable Metrics/BlockLength build do if version.satisfies?('>= 18.3') # Don't listen on 127.0.0.1/::1 implicitly whenever ERL_EPMD_ADDRESS is given @@ -145,3 +146,4 @@ build do make "-j #{workers}", env: env make 'install', env: env end +# rubocop:enable Metrics/BlockLength diff --git a/omnibus/config/software/firezone-cookbooks.rb b/omnibus/config/software/firezone-cookbooks.rb index 89de3f6c5..8d549ac30 100644 --- a/omnibus/config/software/firezone-cookbooks.rb +++ b/omnibus/config/software/firezone-cookbooks.rb @@ -1,3 +1,4 @@ +# rubocop:disable Naming/FileName # frozen_string_literal: true # @@ -21,6 +22,7 @@ license :project_license source path: 'cookbooks/firezone' +# rubocop:disable Metrics/BlockLength build do cookbooks_path = "#{install_dir}/embedded/cookbooks" env = with_standard_compiler_flags(with_embedded_path) @@ -44,17 +46,17 @@ build do end block do - open("#{cookbooks_path}/dna.json", 'w') do |file| + File.open("#{cookbooks_path}/dna.json", 'w') do |file| file.write FFI_Yajl::Encoder.encode(run_list: ['recipe[firezone::default]']) end - open("#{cookbooks_path}/show-config.json", 'w') do |file| + File.open("#{cookbooks_path}/show-config.json", 'w') do |file| file.write FFI_Yajl::Encoder.encode( run_list: ['recipe[firezone::show_config]'] ) end - open("#{cookbooks_path}/solo.rb", 'w') do |file| + File.open("#{cookbooks_path}/solo.rb", 'w') do |file| file.write <<~SOLO cookbook_path "#{cookbooks_path}" cache_path "/var/opt/firezone/cache" @@ -64,3 +66,5 @@ build do end end end +# rubocop:enable Metrics/BlockLength +# rubocop:enable Naming/FileName diff --git a/omnibus/config/software/firezone-ctl.rb b/omnibus/config/software/firezone-ctl.rb index 3227ae8c3..79f075eb9 100644 --- a/omnibus/config/software/firezone-ctl.rb +++ b/omnibus/config/software/firezone-ctl.rb @@ -1,3 +1,4 @@ +# rubocop:disable Naming/FileName # frozen_string_literal: true # @@ -44,3 +45,4 @@ build do # additional omnibus-ctl commands sync "#{project_dir}/files/default/ctl-commands", "#{install_dir}/embedded/service/omnibus-ctl/" end +# rubocop:enable Naming/FileName diff --git a/omnibus/config/software/firezone-scripts.rb b/omnibus/config/software/firezone-scripts.rb index 80c546d3e..e09b992c1 100644 --- a/omnibus/config/software/firezone-scripts.rb +++ b/omnibus/config/software/firezone-scripts.rb @@ -1,3 +1,4 @@ +# rubocop:disable Naming/FileName # frozen_string_literal: true # @@ -30,3 +31,4 @@ source path: File.expand_path('files/firezone-scripts', Omnibus::Config.project_ build do copy '*', "#{install_dir}/embedded/bin/" end +# rubocop:enable Naming/FileName diff --git a/omnibus/config/software/libossp-uuid.rb b/omnibus/config/software/libossp-uuid.rb index 61f899ef7..68331aeef 100644 --- a/omnibus/config/software/libossp-uuid.rb +++ b/omnibus/config/software/libossp-uuid.rb @@ -1,3 +1,4 @@ +# rubocop:disable Naming/FileName # frozen_string_literal: true # @@ -45,3 +46,4 @@ build do make "-j #{workers}", env: env make "-j #{workers} install", env: env end +# rubocop:enable Naming/FileName diff --git a/omnibus/config/software/ncurses.rb b/omnibus/config/software/ncurses.rb index 6701d34b8..9ac9f1ddb 100644 --- a/omnibus/config/software/ncurses.rb +++ b/omnibus/config/software/ncurses.rb @@ -54,6 +54,7 @@ relative_path "ncurses-#{version}" # ######################################################################## +# rubocop:disable Metrics/BlockLength build do env = with_standard_compiler_flags(with_embedded_path) env.delete('CPPFLAGS') @@ -156,3 +157,4 @@ build do # Ensure embedded ncurses wins in the LD search path link "#{install_dir}/embedded/lib/libcurses.so", "#{install_dir}/embedded/lib/libcurses.so.1" if smartos? end +# rubocop:enable Metrics/BlockLength diff --git a/omnibus/config/software/omnibus-ctl.rb b/omnibus/config/software/omnibus-ctl.rb index 2024c168e..a70b83dec 100644 --- a/omnibus/config/software/omnibus-ctl.rb +++ b/omnibus/config/software/omnibus-ctl.rb @@ -1,3 +1,4 @@ +# rubocop:disable Naming/FileName # frozen_string_literal: true # Copyright 2012-2015 Chef Software, Inc. @@ -43,3 +44,4 @@ build do touch "#{install_dir}/embedded/service/omnibus-ctl/.gitkeep" end +# rubocop:enable Naming/FileName diff --git a/omnibus/config/software/openssl.rb b/omnibus/config/software/openssl.rb index 571136b86..e0c135bbd 100644 --- a/omnibus/config/software/openssl.rb +++ b/omnibus/config/software/openssl.rb @@ -35,7 +35,8 @@ lib_dirs lib_dirs.concat(["#{install_dir}/embedded/lib/engines-1.1"]) if version # OpenSSL source ships with broken symlinks which windows doesn't allow. # So skip error checking with `extract: :lax_tar` if version.satisfies?('> 1.0.2u') && version.satisfies?('< 1.1.0') - # 1.0.2u was the last public release of 1.0.2. Subsequent releases come from a support contract with OpenSSL Software Services + # 1.0.2u was the last public release of 1.0.2. Subsequent releases come from a support contract with OpenSSL + # Software Services source url: "https://s3.amazonaws.com/chef-releng/openssl/openssl-#{version}.tar.gz", extract: :lax_tar else # As of 2020-09-09 even openssl-1.0.0.tar.gz can be downloaded from /source/openssl-VERSION.tar.gz @@ -55,6 +56,7 @@ version('1.0.2i') { source sha256: '9287487d11c9545b6efb287cdb70535d4e9b284dd10d relative_path "openssl-#{version}" +# rubocop:disable Metrics/BlockLength build do env = with_standard_compiler_flags(with_embedded_path) if aix? @@ -172,3 +174,4 @@ build do end make "-j #{workers} install", env: env end +# rubocop:enable Metrics/BlockLength diff --git a/omnibus/config/software/perl-thread-queue.rb b/omnibus/config/software/perl-thread-queue.rb index 0705ac84b..1908db5ec 100644 --- a/omnibus/config/software/perl-thread-queue.rb +++ b/omnibus/config/software/perl-thread-queue.rb @@ -1,3 +1,4 @@ +# rubocop:disable Naming/FileName # frozen_string_literal: true # @@ -40,3 +41,4 @@ build do make env: env make 'install', env: env end +# rubocop:enable Naming/FileName diff --git a/omnibus/config/software/perl.rb b/omnibus/config/software/perl.rb index 046afd0d8..11f8d1c67 100644 --- a/omnibus/config/software/perl.rb +++ b/omnibus/config/software/perl.rb @@ -38,6 +38,7 @@ lib_dirs lib_dirs.concat ["#{install_dir}/embedded/lib/perl5/**"] relative_path "perl-#{version}" +# rubocop:disable Metrics/BlockLength build do env = with_standard_compiler_flags(with_embedded_path) @@ -74,3 +75,4 @@ build do # us skip install the manpages make 'install.perl', env: env end +# rubocop:enable Metrics/BlockLength diff --git a/omnibus/config/software/pkg-config.rb b/omnibus/config/software/pkg-config.rb index 2ca7adbb0..de602034c 100644 --- a/omnibus/config/software/pkg-config.rb +++ b/omnibus/config/software/pkg-config.rb @@ -1,3 +1,4 @@ +# rubocop:disable Naming/FileName # frozen_string_literal: true # @@ -62,3 +63,4 @@ build do # exit with byte conversion errors. copy "#{project_dir}/glib/glib/libcharset/charset.alias", "#{install_dir}/embedded/lib/charset.alias" if openbsd? end +# rubocop:enable Naming/FileName diff --git a/omnibus/config/software/ruby.rb b/omnibus/config/software/ruby.rb index 7d4353bb9..c570d70b1 100644 --- a/omnibus/config/software/ruby.rb +++ b/omnibus/config/software/ruby.rb @@ -104,6 +104,7 @@ else # including linux end end +# rubocop:disable Metrics/BlockLength build do env['CFLAGS'] << ' -fno-omit-frame-pointer' @@ -183,7 +184,8 @@ build do patch source: 'ruby-aix-vm-core.patch', plevel: 1, env: patch_env # per IBM, just help ruby along on what it's running on - configure_command << '--host=powerpc-ibm-aix6.1.0.0 --target=powerpc-ibm-aix6.1.0.0 --build=powerpc-ibm-aix6.1.0.0 --enable-pthread' + configure_command << '--host=powerpc-ibm-aix6.1.0.0 --target=powerpc-ibm-aix6.1.0.0 --build=powerpc-ibm-aix6'\ + '.1.0.0 --enable-pthread' elsif freebsd? # Disable optional support C level backtrace support. This requires the @@ -209,7 +211,8 @@ build do configure_command << ' debugflags=-g' else # TODO: Consider pulling in Gitlab's OhaiHelper if raspberry_pi is needed - # configure_command << %w(host target build).map { |w| "--#{w}=#{OhaiHelper.gcc_target}" } if OhaiHelper.raspberry_pi? + # configure_command << %w(host target build).map { |w| "--#{w}=#{OhaiHelper.gcc_target}" } if \ + # OhaiHelper.raspberry_pi? configure_command << "--with-opt-dir=#{install_dir}/embedded" end @@ -240,3 +243,4 @@ build do end end end +# rubocop:enable Metrics/BlockLength diff --git a/omnibus/config/software/runit.rb b/omnibus/config/software/runit.rb index 3bba82db4..f28727598 100644 --- a/omnibus/config/software/runit.rb +++ b/omnibus/config/software/runit.rb @@ -40,8 +40,11 @@ build do env = with_standard_compiler_flags(with_embedded_path) # Put runit where we want it, not where they tell us to - command "sed -i -e \"s/^char\\ \\*varservice\\ \\=\\\"\\/service\\/\\\";$/char\\ \\*varservice\\ \\=\\\"#{install_dir.gsub('/', '\\/')}\\/service\\/\\\";/\" sv.c", - env: env + # rubocop:disable Style/StringConcatenation + cmd = 'sed -i -e "s/^char\ \*varservice\ \=\"\/service\/\";$/char\ \*varservice\ \=\"' + \ + install_dir.gsub('/', '\\/') + '\/service\/\";/" sv.c' + # rubocop:enable Style/StringConcatenation + command cmd, env: env # TODO: the following is not idempotent command 'sed -i -e s:-static:: Makefile', env: env diff --git a/omnibus/config/software/wireguard-tools.rb b/omnibus/config/software/wireguard-tools.rb index 211e86f9f..8ce351ad5 100644 --- a/omnibus/config/software/wireguard-tools.rb +++ b/omnibus/config/software/wireguard-tools.rb @@ -1,3 +1,4 @@ +# rubocop:disable Naming/FileName # frozen_string_literal: true # Copyright 2021 Firezone @@ -41,3 +42,4 @@ build do make "-j #{workers}", env: env make "-j #{workers} install", env: env end +# rubocop:enable Naming/FileName diff --git a/omnibus/cookbooks/firezone/Policyfile.rb b/omnibus/cookbooks/firezone/Policyfile.rb index e1cf63d55..726312eec 100644 --- a/omnibus/cookbooks/firezone/Policyfile.rb +++ b/omnibus/cookbooks/firezone/Policyfile.rb @@ -1,3 +1,4 @@ +# rubocop:disable Naming/FileName # frozen_string_literal: true # Policyfile.rb - Describe how you want Chef Infra Client to build your system. @@ -16,3 +17,4 @@ run_list 'firezone::default' # Specify a custom source for a single cookbook: cookbook 'firezone', path: '.' +# rubocop:enable Naming/FileName diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb index f511635b0..e1dca6272 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/create_admin.rb @@ -9,25 +9,28 @@ desc = <<~DESC Resets the password for admin with email specified by default['firezone']['admin_email'] or creates a new admin if that email doesn't exist. DESC +# rubocop:disable Metrics/MethodLength def capture telemetry_file = '/var/opt/firezone/cache/telemetry_id' - if File.exist?(telemetry_file) - telemetry_id = File.read(telemetry_file) - if telemetry_id - uri = URI('https://telemetry.firez.one/capture/') - data = { - api_key: 'phc_ubuPhiqqjMdedpmbWpG2Ak3axqv5eMVhFDNBaXl9UZK', - event: 'firezone-ctl create-or-reset-admin', - properties: { - distinct_id: telemetry_id - } - } - unless File.exist?('/var/opt/firezone/.disable_telemetry') || ENV['TELEMETRY_ENABLED'] == 'false' - Net::HTTP.post(uri, data.to_json, 'Content-Type' => 'application/json') - end - end - end + return unless File.exist?(telemetry_file) + + telemetry_id = File.read(telemetry_file) + + return unless telemetry_id + + uri = URI('https://telemetry.firez.one/capture/') + data = { + api_key: 'phc_ubuPhiqqjMdedpmbWpG2Ak3axqv5eMVhFDNBaXl9UZK', + event: 'firezone-ctl create-or-reset-admin', + properties: { + distinct_id: telemetry_id + } + } + return if File.exist?('/var/opt/firezone/.disable_telemetry') || ENV['TELEMETRY_ENABLED'] == 'false' + + Net::HTTP.post(uri, data.to_json, 'Content-Type' => 'application/json') end +# rubocop:enable Metrics/MethodLength add_command_under_category 'create-or-reset-admin', 'general', desc, 2 do command = %W( diff --git a/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb b/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb index 570563cd0..7dd6f7900 100644 --- a/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb +++ b/omnibus/cookbooks/firezone/files/default/ctl-commands/reconfigure.rb @@ -5,25 +5,28 @@ require 'uri' require 'net/http' require 'json' +# rubocop:disable Metrics/MethodLength def capture telemetry_file = '/var/opt/firezone/cache/telemetry_id' - if File.exist?(telemetry_file) - telemetry_id = File.read(telemetry_file) - if telemetry_id - uri = URI('https://telemetry.firez.one/capture/') - data = { - api_key: 'phc_ubuPhiqqjMdedpmbWpG2Ak3axqv5eMVhFDNBaXl9UZK', - event: 'firezone-ctl create-or-reset-admin', - properties: { - distinct_id: telemetry_id - } - } - unless File.exist?('/var/opt/firezone/.disable_telemetry') || ENV['TELEMETRY_ENABLED'] == 'false' - Net::HTTP.post(uri, data.to_json, 'Content-Type' => 'application/json') - end - end - end + return unless File.exist?(telemetry_file) + + telemetry_id = File.read(telemetry_file) + + return unless telemetry_id + + uri = URI('https://telemetry.firez.one/capture/') + data = { + api_key: 'phc_ubuPhiqqjMdedpmbWpG2Ak3axqv5eMVhFDNBaXl9UZK', + event: 'firezone-ctl create-or-reset-admin', + properties: { + distinct_id: telemetry_id + } + } + return if File.exist?('/var/opt/firezone/.disable_telemetry') || ENV['TELEMETRY_ENABLED'] == 'false' + + Net::HTTP.post(uri, data.to_json, 'Content-Type' => 'application/json') end +# rubocop:enable Metrics/MethodLength add_command_under_category 'reconfigure', 'general', 'Reconfigure the application.', 2 do status = run_chef("#{base_path}/embedded/cookbooks/dna.json", '--chef-license=accept') diff --git a/omnibus/cookbooks/firezone/libraries/config.rb b/omnibus/cookbooks/firezone/libraries/config.rb index 6518a9413..ab6d978a5 100644 --- a/omnibus/cookbooks/firezone/libraries/config.rb +++ b/omnibus/cookbooks/firezone/libraries/config.rb @@ -12,6 +12,7 @@ class Firezone class IncompleteConfig < StandardError; end class IncompatibleConfig < StandardError; end + # rubocop:disable Metrics/MethodLength def self.load_or_create!(filename, node) create_directory!(filename) if File.exist?(filename) @@ -30,6 +31,7 @@ class Firezone rescue Errno::ENOENT => e Chef::Log.warn "Could not create #{filename}: #{e}" end + # rubocop:enable Metrics/MethodLength def self.locale_variables <<~LOCALE @@ -56,7 +58,7 @@ class Firezone create_directory!(filename) if File.exist?(filename) node.consume_attributes( - 'firezone' => Chef::JSONCompat.from_json(open(filename).read) + 'firezone' => Chef::JSONCompat.from_json(File.read(filename)) ) end rescue StandardError => e @@ -65,36 +67,14 @@ class Firezone # Read in the filename (as JSON) and add its attributes to the node object. # If it doesn't exist, create it with generated secrets. + # rubocop:disable Metrics/MethodLength def self.load_or_create_secrets!(filename, node) create_directory!(filename) - secrets = Chef::JSONCompat.from_json(File.open(filename).read) + secrets = Chef::JSONCompat.from_json(File.read(filename)) node.consume_attributes('firezone' => secrets) rescue Errno::ENOENT begin - secret_key_base = - node.dig('firezone', 'secret_key_base') || SecureRandom.base64(48) - live_view_signing_salt = - node.dig('firezone', 'live_view_signing_salt') || SecureRandom.base64(24) - cookie_signing_salt = - node.dig('firezone', 'cookie_signing_salt') || SecureRandom.base64(6) - wireguard_private_key = - node.dig('firezone', - 'wireguard_private_key') || `#{node['firezone']['install_directory']}/embedded/bin/wg genkey`.chomp - database_encryption_key = - node.dig('firezone', 'database_encryption_key') || SecureRandom.base64(32) - default_admin_password = - node.dig('firezone', 'default_admin_password') || SecureRandom.base64(8) - - secrets = { - 'secret_key_base' => secret_key_base, - 'live_view_signing_salt' => live_view_signing_salt, - 'cookie_signing_salt' => cookie_signing_salt, - 'wireguard_private_key' => wireguard_private_key, - 'database_encryption_key' => database_encryption_key, - 'default_admin_password' => default_admin_password - } - - open(filename, 'w') do |file| + File.open(filename, 'w') do |file| file.puts Chef::JSONCompat.to_json_pretty(secrets) end Chef::Log.info("Creating secrets file #{filename}") @@ -104,49 +84,35 @@ class Firezone node.consume_attributes('firezone' => secrets) end + # rubocop:enable Metrics/MethodLength + + def self.secrets(node) + { + 'secret_key_base' => node.dig('firezone', 'secret_key_base') || SecureRandom.base64(48), + 'live_view_signing_salt' => node.dig('firezone', 'live_view_signing_salt') || SecureRandom.base64(24), + 'cookie_signing_salt' => node.dig('firezone', 'cookie_signing_salt') || SecureRandom.base64(6), + 'wireguard_private_key' => node.dig('firezone', 'wireguard_private_key') || \ + `#{node['firezone']['install_directory']}/embedded/bin/wg genkey`.chomp, + 'database_encryption_key' => node.dig('firezone', 'database_encryption_key') || SecureRandom.base64(32), + 'default_admin_password' => node.dig('firezone', 'default_admin_password') || SecureRandom.base64(8) + } + end def self.audit_config(config) - audit_s3_config(config) audit_fips_config(config) end - def self.audit_s3_config(config) - required_s3_vars = %w[s3_bucket s3_region].freeze - any_required_s3_vars = required_s3_vars.any? { |key| !config[key].nil? } - all_required_s3_vars = required_s3_vars.all? { |key| !(config[key].nil? || config[key].empty?) } - - if any_required_s3_vars && !all_required_s3_vars - raise IncompleteConfig, - "Got some, but not all, of the required S3 configs. Must provide #{required_s3_vars} to configure cookbook storage in an S3 bucket." - end - - static_s3_creds = %w[s3_access_key_id s3_secret_access_key].freeze - any_static_s3_creds = static_s3_creds.any? { |key| !config[key].nil? } - all_static_s3_creds = static_s3_creds.all? { |key| !(config[key].nil? || config[key].empty?) } - - if any_static_s3_creds && !all_static_s3_creds - raise IncompleteConfig, - "Got some, but not all, of AWS user credentials. To access an S3 bucket with IAM user credentials, provide #{static_s3_creds}. To use an IAM role, do not set these." - end - - if config['s3_bucket'] =~ /\./ && - (config['s3_domain_style'] != ':s3_path_url' || config['s3_region'] != 'us-east-1') - raise IncompatibleConfig, - "Incompatible S3 bucket settings. If the bucket name contains periods, the bucket must be in us-east-1 and the domain style must be :s3_path_url.\nAmazon recommends against periods in bucket names. See: https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html" - end - end - def self.audit_fips_config(config) - unless built_with_fips?(config['install_directory']) - if fips_enabled_in_kernel? - raise IncompatibleConfig, - 'Detected FIPS is enabled in the kernel, but FIPS is not supported by this installer.' - end - if config['fips_enabled'] - raise IncompatibleConfig, - 'You have enabled FIPS in your configuration, but FIPS is not supported by this installer.' - end + return if built_with_fips?(config['install_directory']) + + if fips_enabled_in_kernel? + raise IncompatibleConfig, + 'Detected FIPS is enabled in the kernel, but FIPS is not supported by this installer.' end + return unless config['fips_enabled'] + + raise IncompatibleConfig, + 'You have enabled FIPS in your configuration, but FIPS is not supported by this installer.' end def self.built_with_fips?(install_directory) @@ -158,6 +124,8 @@ class Firezone (File.exist?(fips_path) && File.read(fips_path).chomp != '0') end + # rubocop:disable Metrics/MethodLength + # rubocop:disable Metrics/AbcSize def self.maybe_turn_on_fips(node) # the compexity of this method is currently needed to figure out what words to display # to the poor human who has to deal with FIPS @@ -172,16 +140,21 @@ class Firezone node.normal['firezone']['fips_enabled'] = Firezone::Config.fips_enabled_in_kernel? if node['firezone']['fips_enabled'] Chef::Log.warn('Detected FIPS-enabled kernel; enabling FIPS 140-2 for Firezone services.') - Chef::Log.warn('fips_enabled was set to false; ignoring this and setting to true or else Firezone services will fail with crypto errors.') + Chef::Log.warn('fips_enabled was set to false; ignoring this and setting to true or else Firezone services'\ + ' will fail with crypto errors.') end when true Chef::Log.warn('Overriding FIPS detection: FIPS 140-2 mode is ON.') else node.normal['firezone']['fips_enabled'] = true - Chef::Log.warn('fips_enabled is set to something other than boolean true/false; assuming FIPS mode should be enabled.') + Chef::Log.warn( + 'fips_enabled is set to something other than boolean true/false; assuming FIPS mode should be enabled.' + ) Chef::Log.warn('Overriding FIPS detection: FIPS 140-2 mode is ON.') end end + # rubocop:enable Metrics/MethodLength + # rubocop:enable Metrics/AbcSize # Take some node attributes and return them on each line as: # @@ -199,6 +172,8 @@ class Firezone end end + # rubocop:disable Metrics/MethodLength + # rubocop:disable Metrics/AbcSize def self.app_env(attributes, reject = []) attributes = attributes.reject { |k| reject.include?(k) } @@ -255,6 +230,8 @@ class Firezone env end + # rubocop:enable Metrics/MethodLength + # rubocop:enable Metrics/AbcSize def self.create_directory!(filename) dir = File.dirname(filename) diff --git a/omnibus/cookbooks/firezone/recipes/config.rb b/omnibus/cookbooks/firezone/recipes/config.rb index 3e504f4de..fb390c66f 100644 --- a/omnibus/cookbooks/firezone/recipes/config.rb +++ b/omnibus/cookbooks/firezone/recipes/config.rb @@ -44,8 +44,9 @@ unless /[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}/.match?(node['firezone']['tele node.default['firezone']['telemetry_id'] = SecureRandom.uuid end -node.default['firezone']['wireguard_public_key'] = - `echo '#{node['firezone']['wireguard_private_key']}' | #{node['firezone']['install_directory']}/embedded/bin/wg pubkey`.chomp +pkey = node['firezone']['wireguard_private_key'] +wg = "#{node['firezone']['install_directory']}/embedded/bin/wg" +node.default['firezone']['wireguard_public_key'] = `echo '#{pkey}' | #{wg} pubkey`.chomp Firezone::Config.audit_config(node['firezone']) Firezone::Config.maybe_turn_on_fips(node) diff --git a/omnibus/cookbooks/firezone/recipes/nginx.rb b/omnibus/cookbooks/firezone/recipes/nginx.rb index 215780bf7..2bdd10696 100644 --- a/omnibus/cookbooks/firezone/recipes/nginx.rb +++ b/omnibus/cookbooks/firezone/recipes/nginx.rb @@ -71,7 +71,8 @@ template "#{node['firezone']['var_directory']}/etc/logrotate.d/nginx" do variables( 'log_directory' => node['firezone']['nginx']['log_directory'], 'log_rotation' => node['firezone']['nginx']['log_rotation'], - 'postrotate' => "#{node['firezone']['install_directory']}/embedded/sbin/nginx -c #{node['firezone']['nginx']['directory']}/nginx.conf -s reopen", + 'postrotate' => "#{node['firezone']['install_directory']}/embedded/sbin/nginx -c "\ + "#{node['firezone']['nginx']['directory']}/nginx.conf -s reopen", 'owner' => 'root', 'group' => 'root' ) diff --git a/omnibus/omnibus.rb b/omnibus/omnibus.rb index 051b2413a..51b8ca05d 100644 --- a/omnibus/omnibus.rb +++ b/omnibus/omnibus.rb @@ -14,10 +14,10 @@ # # Uncomment this line to change the default base directory to "local" # ------------------------------------------------------------------- -if ENV["CI"] - base_dir("/opt/runner/omnibus-local") +if ENV['CI'] + base_dir('/opt/runner/omnibus-local') else - base_dir("/tmp/omnibus-local") + base_dir('/tmp/omnibus-local') end # # Alternatively you can tune the individual values @@ -59,8 +59,8 @@ append_timestamp false # Windows architecture defaults # ------------------------------ -windows_arch if %w[x86 x64].include?((ENV["OMNIBUS_WINDOWS_ARCH"] || "").downcase) - ENV["OMNIBUS_WINDOWS_ARCH"].downcase.to_sym +if %w[x86 x64].include?((ENV['OMNIBUS_WINDOWS_ARCH'] || '').downcase) + windows_arch(ENV['OMNIBUS_WINDOWS_ARCH'].downcase.to_sym) else - :x86 + windows_arch(:x86) end