From 8136fbef1fc442c4547e835e93073d39c356cc89 Mon Sep 17 00:00:00 2001 From: Tom Ratcliffe Date: Tue, 13 Aug 2024 13:07:42 +0100 Subject: [PATCH] Chore: Add capability for overriding local development behaviour using env vars (#85603) --- conf/defaults.ini | 7 ++ conf/sample.ini | 8 ++ package.json | 2 + public/test/setupTests.ts | 6 +- scripts/webpack/env-util.js | 29 +++++ scripts/webpack/webpack.dev.js | 6 +- scripts/webpack/webpack.prod.js | 5 + yarn.lock | 189 ++++++++++++++++++++++++++------ 8 files changed, 218 insertions(+), 34 deletions(-) create mode 100644 scripts/webpack/env-util.js diff --git a/conf/defaults.ini b/conf/defaults.ini index 02ff494a9f8..1a9481cb1dd 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -1973,3 +1973,10 @@ feedback_url = https://docs.google.com/forms/d/e/1FAIpQLSeEE33vhbSpR8A8S1A1ocZ1B # How frequently should the frontend UI poll for changes while resources are migrating frontend_poll_interval = 2s +################################## Frontend development configuration ################################### +# Warning! Any settings placed in this section will be available on `process.env.frontend_dev_{foo}` within frontend code +# Any values placed here may be accessible to the UI. Do not place sensitive information here. +[frontend_dev] +# Should UI tests fail when console log/warn/erroring? +# Does not affect the result when running on CI - only for allowing devs to choose this behaviour locally +fail_tests_on_console = true diff --git a/conf/sample.ini b/conf/sample.ini index b1c05b984b3..5a82a9b9f25 100644 --- a/conf/sample.ini +++ b/conf/sample.ini @@ -1905,3 +1905,11 @@ timeout = 30s ;feedback_url = "" # How frequently should the frontend UI poll for changes while resources are migrating ;frontend_poll_interval = 2s + +################################## Frontend development configuration ################################### +# Warning! Any settings placed in this section will be available on `process.env.frontend_dev_{foo}` within frontend code +# Any values placed here may be accessible to the UI. Do not place sensitive information here. +[frontend_dev] +# Should UI tests fail when console log/warn/erroring? +# Does not affect the result when running on CI - only for allowing devs to choose this behaviour locally +; fail_tests_on_console = true diff --git a/package.json b/package.json index a83bd3fbeee..b9fcda3167c 100644 --- a/package.json +++ b/package.json @@ -112,6 +112,7 @@ "@types/google.analytics": "^0.0.46", "@types/gtag.js": "^0.0.20", "@types/history": "4.7.11", + "@types/ini": "^4", "@types/jest": "29.5.12", "@types/jquery": "3.5.30", "@types/js-yaml": "^4.0.5", @@ -189,6 +190,7 @@ "html-webpack-plugin": "5.6.0", "http-server": "14.1.1", "i18next-parser": "9.0.1", + "ini": "^4.1.3", "jest": "29.7.0", "jest-canvas-mock": "2.5.2", "jest-date-mock": "1.0.10", diff --git a/public/test/setupTests.ts b/public/test/setupTests.ts index aa7f7d8efb6..ca3d498dad9 100644 --- a/public/test/setupTests.ts +++ b/public/test/setupTests.ts @@ -5,9 +5,13 @@ import i18next from 'i18next'; import failOnConsole from 'jest-fail-on-console'; import { initReactI18next } from 'react-i18next'; +import getEnvConfig from '../../scripts/webpack/env-util'; + import { matchers } from './matchers'; -if (process.env.CI) { +const config = getEnvConfig() as Record; + +if (config.frontend_dev_fail_tests_on_console || process.env.CI) { failOnConsole({ shouldFailOnLog: true, shouldFailOnDebug: true, diff --git a/scripts/webpack/env-util.js b/scripts/webpack/env-util.js new file mode 100644 index 00000000000..73a437b912d --- /dev/null +++ b/scripts/webpack/env-util.js @@ -0,0 +1,29 @@ +const { parse } = require('ini'); +const { readFileSync, existsSync } = require('node:fs'); + +const getEnvConfig = () => { + const defaultSettings = readFileSync(`./conf/defaults.ini`, { + encoding: 'utf-8', + }); + + const customSettings = existsSync(`./conf/custom.ini`) + ? readFileSync(`./conf/custom.ini`, { + encoding: 'utf-8', + }) + : ''; + + const defaults = parse(defaultSettings); + const custom = parse(customSettings); + + const merged = { ...defaults.frontend_dev, ...custom.frontend_dev }; + // Take all frontend keys from the ini file and prefix with `frontend_dev_`, + // so they can be added to `process.env` elsewhere + return Object.entries(merged).reduce((acc, [key, value]) => { + return { + ...acc, + [`frontend_dev_${key}`]: value, + }; + }, {}); +}; + +module.exports = getEnvConfig; diff --git a/scripts/webpack/webpack.dev.js b/scripts/webpack/webpack.dev.js index df92c8d811c..82accfe50f0 100644 --- a/scripts/webpack/webpack.dev.js +++ b/scripts/webpack/webpack.dev.js @@ -6,11 +6,12 @@ const ESLintPlugin = require('eslint-webpack-plugin'); const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const path = require('path'); -const { DefinePlugin } = require('webpack'); +const { DefinePlugin, EnvironmentPlugin } = require('webpack'); const WebpackAssetsManifest = require('webpack-assets-manifest'); const { merge } = require('webpack-merge'); const WebpackBar = require('webpackbar'); +const getEnvConfig = require('./env-util.js'); const common = require('./webpack.common.js'); const esbuildTargets = resolveToEsbuildTarget(browserslist(), { printUnknownTargets: false }); // esbuild-loader 3.0.0+ requires format to be set to prevent it @@ -27,6 +28,8 @@ function getDecoupledPlugins() { return packages.filter((pkg) => pkg.dir.includes('plugins/datasource')).map((pkg) => `${pkg.dir}/**`); } +const envConfig = getEnvConfig(); + module.exports = (env = {}) => { return merge(common, { devtool: 'source-map', @@ -139,6 +142,7 @@ module.exports = (env = {}) => { color: '#eb7b18', name: 'Grafana', }), + new EnvironmentPlugin(envConfig), ], stats: 'minimal', diff --git a/scripts/webpack/webpack.prod.js b/scripts/webpack/webpack.prod.js index c275250cf72..98768225963 100644 --- a/scripts/webpack/webpack.prod.js +++ b/scripts/webpack/webpack.prod.js @@ -6,10 +6,12 @@ const { EsbuildPlugin } = require('esbuild-loader'); const { resolveToEsbuildTarget } = require('esbuild-plugin-browserslist'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const path = require('path'); +const { EnvironmentPlugin } = require('webpack'); const WebpackAssetsManifest = require('webpack-assets-manifest'); const { WebpackManifestPlugin } = require('webpack-manifest-plugin'); const { merge } = require('webpack-merge'); +const getEnvConfig = require('./env-util.js'); const common = require('./webpack.common.js'); const esbuildTargets = resolveToEsbuildTarget(browserslist(), { printUnknownTargets: false }); @@ -21,6 +23,8 @@ const esbuildOptions = { jsx: 'automatic', }; +const envConfig = getEnvConfig(); + module.exports = (env = {}) => merge(common, { mode: 'production', @@ -87,5 +91,6 @@ module.exports = (env = {}) => } }); }, + new EnvironmentPlugin(envConfig), ], }); diff --git a/yarn.lock b/yarn.lock index 1761c4ae9bc..fc049ff3b85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -275,7 +275,14 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.24.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.24.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.24.7 + resolution: "@babel/helper-plugin-utils@npm:7.24.7" + checksum: 10/dad51622f0123fdba4e2d40a81a6b7d6ef4b1491b2f92fd9749447a36bde809106cf117358705057a2adc8fd73d5dc090222e0561b1213dae8601c8367f5aac8 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.24.8": version: 7.24.8 resolution: "@babel/helper-plugin-utils@npm:7.24.8" checksum: 10/adbc9fc1142800a35a5eb0793296924ee8057fe35c61657774208670468a9fbfbb216f2d0bc46c680c5fefa785e5ff917cc1674b10bd75cdf9a6aa3444780630 @@ -337,6 +344,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-string-parser@npm:7.24.7" + checksum: 10/603d8d962bbe89907aa99a8f19a006759ab7b2464615f20a6a22e3e2e8375af37ddd0e5175c9e622e1c4b2d83607ffb41055a59d0ce34404502af30fde573a5c + languageName: node + linkType: hard + "@babel/helper-string-parser@npm:^7.24.8": version: 7.24.8 resolution: "@babel/helper-string-parser@npm:7.24.8" @@ -402,6 +416,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/parser@npm:7.24.7" + bin: + parser: ./bin/babel-parser.js + checksum: 10/ef9ebce60e13db560ccc7af9235d460f6726bb7e23ae2d675098c1fc43d5249067be60d4118889dad33b1d4f85162cf66baf554719e1669f29bb20e71322568e + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.3": version: 7.25.3 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.3" @@ -1590,7 +1613,18 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.22.5, @babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.22.5, @babel/template@npm:^7.24.7, @babel/template@npm:^7.3.3": + version: 7.24.7 + resolution: "@babel/template@npm:7.24.7" + dependencies: + "@babel/code-frame": "npm:^7.24.7" + "@babel/parser": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10/5975d404ef51cf379515eb0f80b115981d0b9dff5539e53a47516644abb8c83d7559f5b083eb1d4977b20d8359ebb2f911ccd4f729143f8958fdc465f976d843 + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.0": version: 7.25.0 resolution: "@babel/template@npm:7.25.0" dependencies: @@ -1616,7 +1650,18 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.5, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.5, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.24.7 + resolution: "@babel/types@npm:7.24.7" + dependencies: + "@babel/helper-string-parser": "npm:^7.24.7" + "@babel/helper-validator-identifier": "npm:^7.24.7" + to-fast-properties: "npm:^2.0.0" + checksum: 10/ad3c8c0d6fb4acb0bb74bb5b4bb849b181bf6185677ef9c59c18856c81e43628d0858253cf232f0eca806f02e08eff85a1d3e636a3e94daea737597796b0b430 + languageName: node + linkType: hard + +"@babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2": version: 7.25.2 resolution: "@babel/types@npm:7.25.2" dependencies: @@ -4847,7 +4892,7 @@ __metadata: languageName: node linkType: hard -"@msagl/core@npm:^1.1.19, @msagl/core@npm:^1.1.20": +"@msagl/core@npm:^1.1.19": version: 1.1.20 resolution: "@msagl/core@npm:1.1.20" dependencies: @@ -4860,25 +4905,25 @@ __metadata: languageName: node linkType: hard -"@msagl/drawing@npm:^1.1.20": - version: 1.1.20 - resolution: "@msagl/drawing@npm:1.1.20" +"@msagl/drawing@npm:^1.1.19": + version: 1.1.19 + resolution: "@msagl/drawing@npm:1.1.19" dependencies: - "@msagl/core": "npm:^1.1.20" - checksum: 10/69a18e6dbff44f7332cd4340678341b9a57580328bfcf6342e642e8372e27179b7f1b8c2869ad2e92f9e3e1aba4e06b622596e57927e58c93804715887e6ead6 + "@msagl/core": "npm:^1.1.19" + checksum: 10/b8963ab6f8dd7943a10d950abe11030996e12cd74503c6d704678dce54c1fd0f5ee1570cc893027e24150e475294d09a4ae4ac3be8f9e9f8d7382d7b7c5303a9 languageName: node linkType: hard "@msagl/parser@npm:^1.1.19": - version: 1.1.20 - resolution: "@msagl/parser@npm:1.1.20" + version: 1.1.19 + resolution: "@msagl/parser@npm:1.1.19" dependencies: - "@msagl/core": "npm:^1.1.20" - "@msagl/drawing": "npm:^1.1.20" + "@msagl/core": "npm:^1.1.19" + "@msagl/drawing": "npm:^1.1.19" "@types/parse-color": "npm:^1.0.1" dotparser: "npm:^1.1.1" parse-color: "npm:^1.0.0" - checksum: 10/1ae5a17ad537f1b247e7c05b0c936ceead3be923f283bb76af22ea42272d8fd1dcf0d075934174bb7b99e7e7aa0927bde3255874e50566e1a1ba90194aa5347d + checksum: 10/349dcd57a3365628699b45172359363b86a1b27f8300b5b7fde97ba65eb512191a7433b72908a544fbbdc1d91bcaa9ca498faef345078367529820a47af38609 languageName: node linkType: hard @@ -5088,7 +5133,7 @@ __metadata: languageName: node linkType: hard -"@npmcli/package-json@npm:5.2.0, @npmcli/package-json@npm:^5.0.0, @npmcli/package-json@npm:^5.1.0": +"@npmcli/package-json@npm:5.2.0, @npmcli/package-json@npm:^5.1.0": version: 5.2.0 resolution: "@npmcli/package-json@npm:5.2.0" dependencies: @@ -5103,6 +5148,21 @@ __metadata: languageName: node linkType: hard +"@npmcli/package-json@npm:^5.0.0": + version: 5.1.0 + resolution: "@npmcli/package-json@npm:5.1.0" + dependencies: + "@npmcli/git": "npm:^5.0.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^7.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^6.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.5.3" + checksum: 10/0e5cb5eff32cf80234525160a702c91a38e4b98ab74e34e2632b43c4350dbad170bd835989cc7d6e18d24798e3242e45b60f3d5e26bd128fe1c4529931105f8e + languageName: node + linkType: hard + "@npmcli/promise-spawn@npm:^7.0.0": version: 7.0.2 resolution: "@npmcli/promise-spawn@npm:7.0.2" @@ -8996,6 +9056,13 @@ __metadata: languageName: node linkType: hard +"@types/ini@npm:^4": + version: 4.1.0 + resolution: "@types/ini@npm:4.1.0" + checksum: 10/43dc756f60a4b2e828371baa0c5db006f3d31a2d58877f88ff15a58815aa804a612eea35adfc2c0e99ba09632b7a96bdf4a55ccaf5f164598f9ee314ad1171a1 + languageName: node + linkType: hard + "@types/is-hotkey@npm:0.1.10": version: 0.1.10 resolution: "@types/is-hotkey@npm:0.1.10" @@ -9211,7 +9278,16 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:20.14.14, @types/node@npm:>=13.7.0, @types/node@npm:^20.11.16": +"@types/node@npm:*, @types/node@npm:>=13.7.0, @types/node@npm:^20.11.16": + version: 20.14.2 + resolution: "@types/node@npm:20.14.2" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 10/c38e47b190fa0a8bdfde24b036dddcf9401551f2fb170a90ff33625c7d6f218907e81c74e0fa6e394804a32623c24c60c50e249badc951007830f0d02c48ee0f + languageName: node + linkType: hard + +"@types/node@npm:20.14.14": version: 20.14.14 resolution: "@types/node@npm:20.14.14" dependencies: @@ -10659,7 +10735,16 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.10.0, acorn@npm:^8.12.0, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.10.0, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: 10/b688e7e3c64d9bfb17b596e1b35e4da9d50553713b3b3630cf5690f2b023a84eac90c56851e6912b483fe60e8b4ea28b254c07e92f17ef83d72d78745a8352dd + languageName: node + linkType: hard + +"acorn@npm:^8.12.0": version: 8.12.1 resolution: "acorn@npm:8.12.1" bin: @@ -14267,7 +14352,7 @@ __metadata: languageName: node linkType: hard -"dedent@npm:1.5.3, dedent@npm:^1.0.0": +"dedent@npm:1.5.3": version: 1.5.3 resolution: "dedent@npm:1.5.3" peerDependencies: @@ -14286,6 +14371,18 @@ __metadata: languageName: node linkType: hard +"dedent@npm:^1.0.0": + version: 1.5.1 + resolution: "dedent@npm:1.5.1" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10/fc00a8bc3dfb7c413a778dc40ee8151b6c6ff35159d641f36ecd839c1df5c6e0ec5f4992e658c82624a1a62aaecaffc23b9c965ceb0bbf4d698bfc16469ac27d + languageName: node + linkType: hard + "deep-equal@npm:^2.0.5": version: 2.2.3 resolution: "deep-equal@npm:2.2.3" @@ -14999,7 +15096,7 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.16.0, enhanced-resolve@npm:^5.17.1": +"enhanced-resolve@npm:^5.16.0": version: 5.17.1 resolution: "enhanced-resolve@npm:5.17.1" dependencies: @@ -15046,7 +15143,7 @@ __metadata: languageName: node linkType: hard -"envinfo@npm:7.13.0, envinfo@npm:^7.7.3": +"envinfo@npm:7.13.0": version: 7.13.0 resolution: "envinfo@npm:7.13.0" bin: @@ -15055,6 +15152,15 @@ __metadata: languageName: node linkType: hard +"envinfo@npm:^7.7.3": + version: 7.8.1 + resolution: "envinfo@npm:7.8.1" + bin: + envinfo: dist/cli.js + checksum: 10/e7a2d71c7dfe398a4ffda0e844e242d2183ef2627f98e74e4cd71edd2af691c8707a2b34aacef92538c27b3daf9a360d32202f33c0a9f27f767c4e1c6ba8b522 + languageName: node + linkType: hard + "eol@npm:^0.9.1": version: 0.9.1 resolution: "eol@npm:0.9.1" @@ -17563,6 +17669,7 @@ __metadata: "@types/google.analytics": "npm:^0.0.46" "@types/gtag.js": "npm:^0.0.20" "@types/history": "npm:4.7.11" + "@types/ini": "npm:^4" "@types/jest": "npm:29.5.12" "@types/jquery": "npm:3.5.30" "@types/js-yaml": "npm:^4.0.5" @@ -17673,6 +17780,7 @@ __metadata: i18next-parser: "npm:9.0.1" immer: "npm:10.1.1" immutable: "npm:4.3.7" + ini: "npm:^4.1.3" jest: "npm:29.7.0" jest-canvas-mock: "npm:2.5.2" jest-date-mock: "npm:1.0.10" @@ -18707,6 +18815,13 @@ __metadata: languageName: node linkType: hard +"ini@npm:^4.1.3": + version: 4.1.3 + resolution: "ini@npm:4.1.3" + checksum: 10/f536b414d1442e5b233429e2b56efcdb354109b2d65ddd489e5939d8f0f5ad23c88aa2b19c92987249d0dd63ba8192e9aeb1a02b0459549c5a9ff31acd729a5d + languageName: node + linkType: hard + "init-package-json@npm:6.0.3": version: 6.0.3 resolution: "init-package-json@npm:6.0.3" @@ -20597,13 +20712,12 @@ __metadata: linkType: hard "knip@npm:^5.10.0": - version: 5.27.2 - resolution: "knip@npm:5.27.2" + version: 5.27.0 + resolution: "knip@npm:5.27.0" dependencies: "@nodelib/fs.walk": "npm:1.2.8" "@snyk/github-codeowners": "npm:1.1.0" easy-table: "npm:1.2.0" - enhanced-resolve: "npm:^5.17.1" fast-glob: "npm:^3.3.2" jiti: "npm:^1.21.6" js-yaml: "npm:^4.1.0" @@ -20611,6 +20725,7 @@ __metadata: picocolors: "npm:^1.0.0" picomatch: "npm:^4.0.1" pretty-ms: "npm:^9.0.0" + resolve: "npm:^1.22.8" smol-toml: "npm:^1.1.4" strip-json-comments: "npm:5.0.1" summary: "npm:2.1.0" @@ -20622,7 +20737,7 @@ __metadata: bin: knip: bin/knip.js knip-bun: bin/knip-bun.js - checksum: 10/65023f970b400e66b6d5edb7262409647399cd0f6706c54dd70f923b44776b954d3c639495a5bd6e2d82ab8c6b700fced8c0d350b34683417417394c5c8815a1 + checksum: 10/0b48a4789b9d9a4444bf6914ff2f71f6e5a926219287b170f2919fe2dc0f1bdb5ee11e1e15f511337684ab1883cb9cde8ea6c5226926f54c382072e139dd388b languageName: node linkType: hard @@ -24651,7 +24766,7 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.15, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.1": +"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.1.1": version: 6.1.1 resolution: "postcss-selector-parser@npm:6.1.1" dependencies: @@ -24661,6 +24776,16 @@ __metadata: languageName: node linkType: hard +"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.15, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": + version: 6.1.0 + resolution: "postcss-selector-parser@npm:6.1.0" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10/2f9e5045b8bbe674fed3b79dbcd3daf21f5188cd7baf179beac513710ec3d75a8fc8184a262c3aec1c628ad3fd8bdb29c5d8530f1c9c5a61a18e1980bb000945 + languageName: node + linkType: hard + "postcss-svgo@npm:^6.0.2": version: 6.0.2 resolution: "postcss-svgo@npm:6.0.2" @@ -25714,11 +25839,11 @@ __metadata: linkType: hard "react-hook-form@npm:^7.49.2": - version: 7.52.2 - resolution: "react-hook-form@npm:7.52.2" + version: 7.51.5 + resolution: "react-hook-form@npm:7.51.5" peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - checksum: 10/91a738881d9463fb73794374a5aec17b3fac41aac92ddf64ccfa205fd2ebc211376a6a41a8c579fd256cda4aae4d64b0c1f3e872e361b9673edef5e2f0b75c35 + react: ^16.8.0 || ^17 || ^18 + checksum: 10/f4ff77989202b1faf2dede7a7730210635a6225189dcaeaeb191cea12422bcb97d2adfef0712c50d13bf5c5e14b8debc00fbba16491f86a6d24945a52cacfa59 languageName: node linkType: hard @@ -26334,12 +26459,12 @@ __metadata: linkType: hard "react-zoom-pan-pinch@npm:^3.3.0": - version: 3.6.1 - resolution: "react-zoom-pan-pinch@npm:3.6.1" + version: 3.4.4 + resolution: "react-zoom-pan-pinch@npm:3.4.4" peerDependencies: react: "*" react-dom: "*" - checksum: 10/9146aa5c427dd6d0c8a4ebe3db0c720718eef6262d1b4b36033ee433bc76a9c84e30ca91311211ab95446305d3e2813d9abc576d093efbf5562be984431896cb + checksum: 10/c02a7047923ed85f6d5e45d754d3df8403c00c2bf39fce4ef07d81961bdb3bcd549ca27b3122fba17dc2ac7eb2eb4c2b4c656bb503402aa6f7869a446a8ddff4 languageName: node linkType: hard