diff --git a/.env.example b/.env.example index 19b4681f..bd7e0a09 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,3 @@ -NPM_TOKEN=replace-with-your-github-package-token IMAGEKIT_PUBLIC_KEY=replace-with-imagekit-public-key IMAGEKIT_URL_ENDPOINT=https://ik.imagekit.io/your-endpoint/ IMAGEKIT_PRIVATE_KEY=replace-with-imagekit-private-key diff --git a/.eslintrc.js b/.eslintrc.js index 8b087aa7..461c35a6 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -28,6 +28,10 @@ module.exports = { 'jsx-a11y/click-events-have-key-events': 0, 'jsx-a11y/no-static-element-interactions': 0, 'import/prefer-default-export': 0, + 'import/no-unresolved': [ + 'error', + { ignore: ['^@appbaseio/reactivesearch-playground$'] }, + ], 'react/no-unknown-property': ['error', { ignore: ['css'] }], }, }; diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b3b74d98..e9efc59a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 cache: yarn - name: Install dependencies diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index 91881130..ea5af013 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -28,9 +28,9 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 cache: yarn - name: Install dependencies run: yarn --frozen-lockfile - name: Yarn audit - run: yarn audit --groups dependencies + run: node ./scripts/audit-gate.js diff --git a/.gitignore b/.gitignore index 07c2a927..eb64614a 100644 --- a/.gitignore +++ b/.gitignore @@ -70,6 +70,7 @@ cypress.env.json *.DS_Store dist +samples/moviesData.json .idea # sentry diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 4220748f..00000000 --- a/.npmrc +++ /dev/null @@ -1,3 +0,0 @@ -scope=appbaseio-confidential -@appbaseio-confidential:registry=https://npm.pkg.github.com/ -//npm.pkg.github.com/:_authToken=REPLACE_WITH_NPM_TOKEN diff --git a/.nvmrc b/.nvmrc index 6f7f377b..2a393af5 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v16 +20.18.0 diff --git a/.yarnrc b/.yarnrc deleted file mode 100644 index 8ce8fbae..00000000 --- a/.yarnrc +++ /dev/null @@ -1,2 +0,0 @@ -"@appbaseio-confidential:registry" "https://npm.pkg.github.com/" -"npm.pkg.github.com/:_authToken" "REPLACE_WITH_NPM_TOKEN" diff --git a/README.md b/README.md index 38769d3e..2e6c0eff 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ There is currently no guaranteed maintenance SLA. ## Requirements -- Node.js 16.x (see `.nvmrc` / Volta config) +- Node.js 20.x (see `.nvmrc` / Volta config) - Yarn 1.x ## Setup diff --git a/cypress/.eslintrc.js b/cypress/.eslintrc.js index bc3f540b..f5c9a485 100644 --- a/cypress/.eslintrc.js +++ b/cypress/.eslintrc.js @@ -1,7 +1,7 @@ module.exports = { plugins: ['cypress'], env: { - 'cypress/global': true, + 'cypress/globals': true, }, rules: { 'cypress/no-assigning-return-values': 'error', diff --git a/extract-shopify.sh b/extract-shopify.sh index 706a10cb..16b5a3a1 100755 --- a/extract-shopify.sh +++ b/extract-shopify.sh @@ -1,60 +1,4 @@ #!/bin/bash set -euo pipefail -GITHUB_TOKEN="${GITHUB_TOKEN:-}" - -if ! command -v jq >/dev/null 2>&1; then - echo "jq is required to extract templates." - echo "Install jq and retry (macOS: brew install jq)." - exit 1 -fi - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -TEMPLATES_DIR="$ROOT_DIR/templates" - -rm -rf "$TEMPLATES_DIR" -mkdir -p "$TEMPLATES_DIR" - -jq -c '.[]' "$ROOT_DIR/template-sources.json" | while read -r i; do - version=$(echo "${i}" | jq -r '.version') - commit=$(echo "${i}" | jq -r '.commit') - branch=$(echo "${i}" | jq -r '.branch') - organization=$(echo "${i}" | jq -r '.organization') - repository=$(echo "${i}" | jq -r '.repository') - repositoryType=$(echo "${i}" | jq -r '.repositoryType') - - if [ -n "$version" ] && [ "$version" != "null" ]; then - url="https://codeload.github.com/$organization/$repository/legacy.zip/refs/tags/$version" - fileName="$repository@$version" - elif [ -n "$commit" ] && [ "$commit" != "null" ]; then - url="https://codeload.github.com/$organization/$repository/legacy.zip/$commit" - fileName="$repository@$commit" - elif [ -n "$branch" ] && [ "$branch" != "null" ]; then - url="https://codeload.github.com/$organization/$repository/legacy.zip/refs/heads/$branch" - fileName="$repository@$branch" - else - url="https://api.github.com/repos/$organization/$repository/zipball/" - fileName="$repository" - fi - - if [ "$repositoryType" = "private" ] && [ -z "$GITHUB_TOKEN" ]; then - echo "Skipping private repository $organization/$repository (missing GITHUB_TOKEN)" - continue - fi - - targetDir="$TEMPLATES_DIR/$fileName" - mkdir -p "$targetDir" - cd "$targetDir" - - if [ "$repositoryType" = "private" ]; then - curl -sS \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: token $GITHUB_TOKEN" \ - "$url" > file.zip - else - curl -sS "$url" > file.zip - fi - - unzip -oq file.zip - rm -f file.zip -done +exec node "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/scripts/extract-templates.js" diff --git a/package.json b/package.json index ee2c4b02..ef2fa6d5 100644 --- a/package.json +++ b/package.json @@ -8,12 +8,12 @@ "license": "MIT", "private": false, "engines": { - "node": ">=14" + "node": ">=20" }, "scripts": { - "dev": "NODE_ENV=development webpack-dev-server --mode development . --history-api-fallback --hot --progress --port 3333 --no-client-overlay", + "dev": "node ./scripts/generate-movies-sample.js && NODE_ENV=development webpack-dev-server --mode development . --history-api-fallback --hot --progress --port 3333 --no-client-overlay", "lint": "eslint --cache .", - "build": "NODE_ENV=production node ./scripts/create-env.js && node --max_old_space_size=8192 ./node_modules/webpack/bin/webpack.js --mode production --progress", + "build": "node ./scripts/extract-templates.js && node preinstall-server.js && node ./scripts/generate-movies-sample.js && NODE_ENV=production node ./scripts/create-env.js && node --max_old_space_size=8192 ./node_modules/webpack/bin/webpack.js --mode production --progress", "glow": "glow --watch", "format": "prettier --write --use-tabs 'src/!(batteries*)**/**/*.js'", "analyze": "source-map-explorer 'dist/*.js'", @@ -21,7 +21,9 @@ "cypress:run": "cypress run", "cypress:open": " cypress open", "cypress:chrome": "cypress run --headless chrome", - "preinstall": "./extract-shopify.sh && node preinstall-server.js" + "cypress:install": "npx cypress@5.6.0 install", + "setup:templates": "node ./scripts/extract-templates.js && node preinstall-server.js", + "postinstall": "node ./scripts/build-playground.js && node ./scripts/patch-importer.js" }, "husky": { "hooks": { @@ -50,7 +52,6 @@ "copy-webpack-plugin": "^9.0.1", "css-loader": "^1.0.0", "css-minimizer-webpack-plugin": "^3.1.1", - "cypress": "^5.0.0", "cypress-plugin-tab": "^1.0.5", "cypress-terminal-report": "^1.4.1", "cypress-xpath": "^1.6.1", @@ -84,7 +85,7 @@ "dependencies": { "@ant-design/icons": "^4.0.0", "@appbaseio/importer": "^0.1.4", - "@appbaseio-confidential/reactivesearch-playground": "^1.3.0-beta.6", + "@appbaseio/reactivesearch-playground": "github:appbaseio/reactivesearch-playground#e7060229f4baee86b90a94f92c8a66ff17aaa6e4", "@appbaseio/react-filter-box": "^3.4.1", "@appbaseio/reactivemaps": "^3.0.0-beta.14", "@appbaseio/reactivesearch": "^4.3.0", @@ -102,7 +103,6 @@ "brace": "^0.11.1", "can-ndjson-stream": "^1.0.2", "codesandbox": "1.2.16", - "d3-scale": "^2.1.2", "diff-match-patch": "1.0.5", "dompurify": "^3.2.4", "dotenv": "^8.0.0", @@ -119,7 +119,7 @@ "is-cidr": "^4.0.2", "is-valid-domain": "^0.1.6", "js-yaml": "^4.1.0", - "jsondiffpatch": "^0.4.1", + "jsondiffpatch": "^0.7.6", "jszip": "^3.7.1", "lint-staged": "^10.1.7", "lodash": "^4.17.10", @@ -163,8 +163,11 @@ "util": "^0.12.4", "uuid": "^8.3.2" }, + "resolutions": { + "uuid": "8.3.2" + }, "volta": { - "node": "16.20.2", + "node": "20.18.0", "yarn": "1.22.19" } } diff --git a/preinstall-server.js b/preinstall-server.js index d6a876ad..53511fd4 100644 --- a/preinstall-server.js +++ b/preinstall-server.js @@ -2,6 +2,13 @@ const https = require('https'); const fs = require('fs'); const path = require('path'); const templatesConstants = require('./template-sources.json'); +const ROOT_DIR = path.resolve(__dirname); + +function readProjectFile(filePath, encoding) { + return fs.readFileSync(path.join(ROOT_DIR, path.relative(ROOT_DIR, filePath)), { + encoding, + }); +} var walk = function (dir, done) { let results = []; @@ -71,49 +78,22 @@ async function generateTemplatesOutput() { if (err) throw err; - results.forEach((path) => { + results.forEach((filePath) => { // Read file contents and store in files.js - const fileName = path.split(`${file}`)[1]; - if (fileName.includes('.ico') || fileName.includes('.png')) { - const data = fs.readFileSync( - `./${ - path.split('arc-dashboard/')[1] || - path.split('repo/')[1] || - path.split('vercel/path0/')[1] - }`, - { - encoding: 'base64', - }, - ); - filesObj[fileName] = data; //content for files.js + const relativeFileName = filePath.split(`${file}`)[1]; + if (relativeFileName.includes('.ico') || relativeFileName.includes('.png')) { + const fileData = readProjectFile(filePath, 'base64'); + filesObj[relativeFileName] = fileData; //content for files.js } else { - if (!fileName.includes('build')) { - const data = fs.readFileSync( - `./${ - path.split('arc-dashboard/')[1] || - path.split('repo/')[1] || - path.split('vercel/path0/')[1] - }`, - { - encoding: 'utf8', - }, - ); - filesObj[fileName] = data; //content for files.js + if (!relativeFileName.includes('build')) { + const fileData = readProjectFile(filePath, 'utf8'); + filesObj[relativeFileName] = fileData; //content for files.js } } // Check if manifest file exists in the repo - if (data.manifest_path === path.split(`${file}/`)[1]) { - const templateData = fs.readFileSync( - `./${ - path.split('arc-dashboard/')[1] || - path.split('repo/')[1] || - path.split('vercel/path0/')[1] - }`, - { - encoding: 'utf8', - }, - ); + if (data.manifest_path === filePath.split(`${file}/`)[1]) { + const templateData = readProjectFile(filePath, 'utf8'); templateOutputObj = { ...data, diff --git a/scripts/audit-gate.js b/scripts/audit-gate.js new file mode 100644 index 00000000..e280a3c5 --- /dev/null +++ b/scripts/audit-gate.js @@ -0,0 +1,80 @@ +const { execSync } = require('child_process'); + +const FAIL_SEVERITIES = new Set(['critical']); + +function parseAuditOutput(output) { + const counts = { + critical: 0, + high: 0, + moderate: 0, + low: 0, + info: 0, + }; + + for (const line of output.split('\n')) { + if (!line.trim()) { + continue; + } + + try { + const entry = JSON.parse(line); + + if (entry.type === 'auditSummary' && entry.data?.vulnerabilities) { + return { ...counts, ...entry.data.vulnerabilities }; + } + + if (entry.type === 'auditAdvisory' && entry.data?.advisory?.severity) { + const { severity } = entry.data.advisory; + if (severity in counts) { + counts[severity] += 1; + } + } + } catch (error) { + // Ignore non-JSON lines from yarn audit output. + } + } + + return counts; +} + +function printSummary(counts) { + console.log('Yarn audit vulnerability summary (dependencies only):'); + console.log(` critical: ${counts.critical}`); + console.log(` high: ${counts.high}`); + console.log(` moderate: ${counts.moderate}`); + console.log(` low: ${counts.low}`); + console.log(` info: ${counts.info}`); +} + +function main() { + let output = ''; + + try { + output = execSync('yarn audit --groups dependencies --json', { + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'pipe'], + maxBuffer: 50 * 1024 * 1024, + }); + } catch (error) { + output = `${error.stdout || ''}${error.stderr || ''}`; + } + + const counts = parseAuditOutput(output); + printSummary(counts); + + const hasBlockingVulnerabilities = [...FAIL_SEVERITIES].some( + (severity) => counts[severity] > 0, + ); + + if (hasBlockingVulnerabilities) { + console.error( + '\nAudit gate failed: critical severity vulnerabilities must be resolved.', + ); + process.exit(1); + } + + console.log('\nAudit gate passed: no critical severity vulnerabilities.'); + process.exit(0); +} + +main(); diff --git a/scripts/build-playground.js b/scripts/build-playground.js new file mode 100644 index 00000000..84d443f1 --- /dev/null +++ b/scripts/build-playground.js @@ -0,0 +1,54 @@ +/** + * Builds @appbaseio/reactivesearch-playground when installed from GitHub. + * The public repo ships source only; tsdx build runs in postinstall so CI + * and local installs work without GitHub Packages auth. + */ +const fs = require('fs'); +const path = require('path'); +const { execSync } = require('child_process'); + +const playgroundPath = path.join( + __dirname, + '..', + 'node_modules', + '@appbaseio', + 'reactivesearch-playground', +); +const distIndex = path.join(playgroundPath, 'dist', 'index.js'); + +if (!fs.existsSync(playgroundPath)) { + console.log( + '[build-playground] @appbaseio/reactivesearch-playground not installed, skipping', + ); + process.exit(0); +} + +if (fs.existsSync(distIndex)) { + console.log('[build-playground] dist already present, skipping'); + process.exit(0); +} + +/** + * tsdx emits .d.ts with declaration: true. Nested yarn install inside the + * playground package duplicates redux/styled-components types, which triggers + * TS2742 when naming inferred exports. explore-cluster only consumes JS. + */ +function patchPlaygroundTsconfig() { + const tsconfigPath = path.join(playgroundPath, 'tsconfig.json'); + let source = fs.readFileSync(tsconfigPath, 'utf8'); + if (source.includes('"declaration": false')) { + return; + } + source = source.replace('"declaration": true', '"declaration": false'); + fs.writeFileSync(tsconfigPath, source); +} + +console.log( + '[build-playground] building @appbaseio/reactivesearch-playground from source...', +); +patchPlaygroundTsconfig(); +execSync('yarn install --production=false --ignore-scripts && yarn build', { + cwd: playgroundPath, + stdio: 'inherit', +}); +console.log('[build-playground] build complete'); diff --git a/scripts/extract-templates.js b/scripts/extract-templates.js new file mode 100644 index 00000000..a0842f24 --- /dev/null +++ b/scripts/extract-templates.js @@ -0,0 +1,109 @@ +const https = require('https'); +const http = require('http'); +const fs = require('fs'); +const path = require('path'); +const { execSync } = require('child_process'); + +const ROOT_DIR = path.resolve(__dirname, '..'); +const TEMPLATES_DIR = path.join(ROOT_DIR, 'templates'); +const GITHUB_TOKEN = process.env.GITHUB_TOKEN || ''; + +const sources = require(path.join(ROOT_DIR, 'template-sources.json')); + +function resolveRef(data) { + const { organization, repository, version, commit, branch } = data; + + if (version) { + return { + url: `https://codeload.github.com/${organization}/${repository}/legacy.zip/refs/tags/${version}`, + fileName: `${repository}@${version}`, + }; + } + + if (commit) { + return { + url: `https://codeload.github.com/${organization}/${repository}/legacy.zip/${commit}`, + fileName: `${repository}@${commit}`, + }; + } + + if (branch) { + return { + url: `https://codeload.github.com/${organization}/${repository}/legacy.zip/refs/heads/${branch}`, + fileName: `${repository}@${branch}`, + }; + } + + return { + url: `https://api.github.com/repos/${organization}/${repository}/zipball/`, + fileName: repository, + }; +} + +function download(url, headers = {}) { + return new Promise((resolve, reject) => { + const client = url.startsWith('https') ? https : http; + + client + .get(url, { headers }, (response) => { + if ( + response.statusCode >= 300 && + response.statusCode < 400 && + response.headers.location + ) { + download(response.headers.location, headers).then(resolve, reject); + return; + } + + if (response.statusCode !== 200) { + reject(new Error(`Download failed (${response.statusCode}): ${url}`)); + return; + } + + const chunks = []; + response.on('data', (chunk) => chunks.push(chunk)); + response.on('end', () => resolve(Buffer.concat(chunks))); + response.on('error', reject); + }) + .on('error', reject); + }); +} + +async function main() { + fs.rmSync(TEMPLATES_DIR, { recursive: true, force: true }); + fs.mkdirSync(TEMPLATES_DIR, { recursive: true }); + + for (const source of sources) { + const { url, fileName } = resolveRef(source); + + if (source.repositoryType === 'private' && !GITHUB_TOKEN) { + console.warn( + `Skipping private repository ${source.organization}/${source.repository} (missing GITHUB_TOKEN)`, + ); + continue; + } + + const targetDir = path.join(TEMPLATES_DIR, fileName); + fs.mkdirSync(targetDir, { recursive: true }); + + const headers = + source.repositoryType === 'private' + ? { + Accept: 'application/vnd.github+json', + Authorization: `token ${GITHUB_TOKEN}`, + } + : {}; + + console.log(`Downloading ${source.organization}/${source.repository}...`); + const zipData = await download(url, headers); + const zipPath = path.join(targetDir, 'file.zip'); + fs.writeFileSync(zipPath, zipData); + execSync('unzip -oq file.zip', { cwd: targetDir, stdio: 'inherit' }); + fs.unlinkSync(zipPath); + } +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/scripts/generate-movies-sample.js b/scripts/generate-movies-sample.js new file mode 100644 index 00000000..c9531f21 --- /dev/null +++ b/scripts/generate-movies-sample.js @@ -0,0 +1,11 @@ +const fs = require('fs'); +const path = require('path'); + +const moviesData = require('../src/pages/OnboardingPage/utils/dataSet/moviesData'); +const outDir = path.join(__dirname, '../samples'); +const outFile = path.join(outDir, 'moviesData.json'); + +fs.mkdirSync(outDir, { recursive: true }); +fs.writeFileSync(outFile, JSON.stringify(moviesData)); + +console.log(`Wrote ${outFile}`); diff --git a/scripts/patch-importer.js b/scripts/patch-importer.js new file mode 100644 index 00000000..250686bc --- /dev/null +++ b/scripts/patch-importer.js @@ -0,0 +1,357 @@ +/** + * Applies arc-dashboard-specific patches to @appbaseio/importer so the Cluster + * step can be prefilled from the active ReactiveSearch session. + * + * Run automatically via postinstall, or manually: node scripts/patch-importer.js + */ +const fs = require('fs'); +const path = require('path'); + +const importerPath = path.join( + __dirname, + '..', + 'node_modules', + '@appbaseio/importer', + 'dist', + 'data-importer.es.js', +); + +if (!fs.existsSync(importerPath)) { + console.log('[patch-importer] @appbaseio/importer not installed, skipping'); + process.exit(0); +} + +let source = fs.readFileSync(importerPath, 'utf8'); + +const cnPatchReplacement = `function cn({ config: b }) { + const R = xt(null); + dt(() => { + if (!b?.cluster?.url) return; + try { + const V = Oe.getState(); + V.setClusterUrl(b.cluster.url), b.cluster.authHeader && V.setAuthHeader(b.cluster.authHeader); + } catch { + } + }, [b?.cluster?.url, b?.cluster?.authHeader]); + return R.current || (R.current = new ya()), /* @__PURE__ */ w.jsx(it.StrictMode, { children: /* @__PURE__ */ w.jsx(va, { client: R.current, children: /* @__PURE__ */ w.jsx(Ya, { value: b || {}, children: /* @__PURE__ */ w.jsx(sn, {}) }) }) }); +}`; + +const AUTH_MODE_MARKER = 'children: "Basic auth"'; +const COLLAPSED_AUTH_MARKER = 'Other authentication methods'; +const APIKEY_MODE_MARKER = 'children: "API key"'; +const SIMPLIFIED_HELP_MARKER = + 'Consider security/CORS when connecting directly using Authorization header from the browser.'; +const alreadyPatched = source.includes('Prefilled from your ReactiveSearch'); +const needsAuthModeUpgrade = alreadyPatched && !source.includes(AUTH_MODE_MARKER); +const needsCollapsedAuthUpgrade = + alreadyPatched && source.includes(AUTH_MODE_MARKER) && !source.includes(COLLAPSED_AUTH_MARKER); +const needsApikeyRemovalUpgrade = + alreadyPatched && source.includes(APIKEY_MODE_MARKER) && !source.includes(SIMPLIFIED_HELP_MARKER); +const needsCnUpgrade = + alreadyPatched && + !needsAuthModeUpgrade && + !needsCollapsedAuthUpgrade && + !needsApikeyRemovalUpgrade && + !source.includes('dt(() => {\n if (!b?.cluster?.url) return;'); + +const clusterStepMarker = 'function Da() {'; +const clusterStepEnd = 'var pa = { exports: {} }'; + +const patchedClusterStep = `function Da() { + const b = Oe(), [R, V] = he(b.clusterUrl || "http://localhost:9200"), [a, A] = he("basic"), [S, H] = he(!1), [u, g] = he(""), [h, k] = he(""), [l, L] = he(""), [n, t] = he(""), [e, o] = he(null), [p, f] = he(null), [y, x] = he(!1); + dt(() => { + V(b.clusterUrl || R); + }, [b.clusterUrl]); + const T = Ka(); + dt(() => { + const c = T?.cluster?.authMode === "custom" || T?.cluster?.authMode === "apikey" ? "custom" : b.authHeader?.startsWith("Basic ") ? "basic" : b.authHeader ? "custom" : "basic"; + A(c), H(c !== "basic"); + if (b.authHeader?.startsWith("Basic ")) { + try { + const m = atob(b.authHeader.slice(6).trim()), C = m.indexOf(":"); + C > 0 && (g(m.slice(0, C)), k(m.slice(C + 1))); + } catch { + } + } else if (b.authHeader) { + L(b.authHeader); + } else if (T?.cluster?.username || T?.cluster?.password) { + T.cluster.username && g(T.cluster.username), T.cluster.password && k(T.cluster.password); + } + }, [b.authHeader, T?.cluster?.username, T?.cluster?.password, T?.cluster?.authMode]); + function U() { + b.setCluster(null), o(null), f(null), t(""); + } + function q() { + try { + const c = new URL(R); + if (c.username || c.password) { + const m = btoa(\`\${c.username}:\${c.password}\`); + return \`Basic \${m}\`; + } + } catch { + } + if (a === "basic" && u && h) return \`Basic \${btoa(\`\${u}:\${h}\`)}\`; + if (a === "custom" && l.trim()) return l.trim(); + return null; + } + async function d() { + try { + console.log("[Cluster] Checking connection to", R); + const c = q(); + c && b.setAuthHeader(c); + const m = await Oa(R); + console.log("[Cluster] Success status", m.status, m), b.setCluster(m), o(typeof m.status == "number" ? m.status : 200), f(!0), t(\`\${m.product} \${m.version}\${m.name ? " • " + m.name : ""}\`); + } catch (c) { + console.log("[Cluster] Error", c); + const m = typeof c?.status == "number" ? c.status : typeof c?.message == "string" && /\\b(\\d{3})\\b/.test(c.message) ? Number(RegExp.$1) : null; + b.setCluster(null), o(m === 0 ? null : m), f(!1), t( + m == null || m === 0 ? "Error: Network or CORS blocked" : "Error: " + (c?.message || "Connection failed") + ); + } + } + dt(() => { + !y && R && R !== "http://localhost:9200" && b.authHeader && !b.cluster && (x(!0), d()); + }, [R, b.authHeader]); + return /* @__PURE__ */ w.jsxs("div", { className: "grid gap-3", children: [ + /* @__PURE__ */ w.jsx("label", { className: "text-sm font-medium", children: "Cluster URL" }), + /* @__PURE__ */ w.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [ + /* @__PURE__ */ w.jsx( + "input", + { + className: "border rounded-md p-2 flex-1 min-w-[260px] max-w-xl", + value: R, + onChange: (c) => { + V(c.target.value), b.setClusterUrl(c.target.value), console.log( + "[Cluster] URL changed, clearing cluster state and status" + ), U(); + }, + placeholder: "https://my-search.example.com" + } + ), + /* @__PURE__ */ w.jsx( + "button", + { + onClick: d, + className: "px-3 py-2 rounded-md bg-primary text-white hover:bg-primary-light w-fit", + children: "Validate connection" + } + ) + ] }), + S && /* @__PURE__ */ w.jsxs("label", { className: "grid gap-1 text-sm max-w-xl", children: [ + /* @__PURE__ */ w.jsx("span", { className: "font-medium", children: "Authentication" }), + /* @__PURE__ */ w.jsxs("select", { + className: "border rounded-md p-2", + value: a, + onChange: (c) => { + A(c.target.value), U(); + }, + children: [ + /* @__PURE__ */ w.jsx("option", { value: "basic", children: "Basic auth" }), + /* @__PURE__ */ w.jsx("option", { value: "custom", children: "Custom Authorization header" }) + ] + }) + ] }), + (!S || a === "basic") && /* @__PURE__ */ w.jsxs("div", { className: "grid gap-2 sm:grid-cols-2 max-w-xl", children: [ + /* @__PURE__ */ w.jsxs("label", { className: "grid gap-1 text-sm", children: [ + /* @__PURE__ */ w.jsx("span", { className: "font-medium", children: "Username" }), + /* @__PURE__ */ w.jsx("input", { className: "border rounded-md p-2", value: u, onChange: (c) => { + g(c.target.value), U(); + }, placeholder: "Cluster username" }) + ] }), + /* @__PURE__ */ w.jsxs("label", { className: "grid gap-1 text-sm", children: [ + /* @__PURE__ */ w.jsx("span", { className: "font-medium", children: "Password" }), + /* @__PURE__ */ w.jsx("input", { type: "password", className: "border rounded-md p-2", value: h, onChange: (c) => { + k(c.target.value), U(); + }, placeholder: "Cluster password" }) + ] }) + ] }), + !S && /* @__PURE__ */ w.jsx( + "button", + { + type: "button", + className: "text-xs text-primary hover:underline w-fit text-left", + onClick: () => H(!0), + children: "Other authentication methods" + } + ), + S && a === "custom" && /* @__PURE__ */ w.jsxs("label", { className: "grid gap-1 text-sm max-w-xl", children: [ + /* @__PURE__ */ w.jsx("span", { className: "font-medium", children: "Authorization header value" }), + /* @__PURE__ */ w.jsx("input", { className: "border rounded-md p-2 font-mono text-xs", value: l, onChange: (c) => { + L(c.target.value), U(); + }, placeholder: "e.g. ApiKey or Bearer " }) + ] }), + /* @__PURE__ */ w.jsxs("div", { className: "text-sm text-neutral-700 flex items-center gap-2", children: [ + e != null && /* @__PURE__ */ w.jsx(da, { status: e, ok: p ?? void 0 }), + /* @__PURE__ */ w.jsx("span", { children: n }) + ] }), + /* @__PURE__ */ w.jsx("p", { className: "text-xs text-neutral-500 max-w-xl", children: "Prefilled from your ReactiveSearch session when available. Consider security/CORS when connecting directly using Authorization header from the browser." }) + ] }); +} +`; + +function replaceClusterStep(src) { + const clusterStepStart = src.indexOf(clusterStepMarker); + const clusterStepStop = src.indexOf(clusterStepEnd, clusterStepStart); + if (clusterStepStart === -1 || clusterStepStop === -1) { + console.error('[patch-importer] could not locate cluster step in importer bundle'); + process.exit(1); + } + return `${src.slice(0, clusterStepStart)}${patchedClusterStep}${src.slice(clusterStepStop)}`; +} + +function writeImporterTypes() { + const typesPath = path.join( + __dirname, + '..', + 'node_modules', + '@appbaseio/importer', + 'dist', + 'context', + 'ImporterConfig.d.ts', + ); + + if (!fs.existsSync(typesPath)) { + return; + } + + fs.writeFileSync( + typesPath, + `import React from "react"; +export type ImporterAuthMode = "basic" | "custom"; +export type SampleDatasetConfig = { + url: string; + label?: string; + filename?: string; +}; +export type ImporterClusterConfig = { + url: string; + authHeader?: string; + authMode?: ImporterAuthMode; + username?: string; + password?: string; +}; +export type ImporterConfig = { + sampleDataset?: SampleDatasetConfig; + cluster?: ImporterClusterConfig; +}; +export declare function ImporterConfigProvider({ value, children, }: { + value: ImporterConfig; + children: React.ReactNode; +}): import("react/jsx-runtime").JSX.Element; +export declare function useImporterConfig(): ImporterConfig; +`, + ); +} + +if ( + alreadyPatched && + !needsCnUpgrade && + !needsAuthModeUpgrade && + !needsCollapsedAuthUpgrade && + !needsApikeyRemovalUpgrade +) { + console.log('[patch-importer] already patched'); + process.exit(0); +} + +if (needsApikeyRemovalUpgrade) { + source = replaceClusterStep(source); + fs.writeFileSync(importerPath, source); + writeImporterTypes(); + console.log('[patch-importer] upgraded cluster step to simplified auth options'); + process.exit(0); +} + +if (needsCollapsedAuthUpgrade) { + source = replaceClusterStep(source); + fs.writeFileSync(importerPath, source); + writeImporterTypes(); + console.log('[patch-importer] upgraded cluster step to collapsed auth options'); + process.exit(0); +} + +if (needsAuthModeUpgrade) { + source = replaceClusterStep(source); + fs.writeFileSync(importerPath, source); + writeImporterTypes(); + console.log('[patch-importer] upgraded cluster step to auth mode selector'); + process.exit(0); +} + +if (needsCnUpgrade) { + const cnRenderPatch = `function cn({ config: b }) { + const R = xt(null); + if (b?.cluster?.url) { + try { + const V = Oe.getState(); + V.setClusterUrl(b.cluster.url), b.cluster.authHeader && V.setAuthHeader(b.cluster.authHeader); + } catch { + } + } + return R.current || (R.current = new ya()), /* @__PURE__ */ w.jsx(it.StrictMode, { children: /* @__PURE__ */ w.jsx(va, { client: R.current, children: /* @__PURE__ */ w.jsx(Ya, { value: b || {}, children: /* @__PURE__ */ w.jsx(sn, {}) }) }) }); +}`; + if (source.includes(cnRenderPatch)) { + source = source.replace(cnRenderPatch, cnPatchReplacement); + fs.writeFileSync(importerPath, source); + console.log('[patch-importer] upgraded cn cluster init to useEffect'); + } + process.exit(0); +} + +const oaPatchTarget = `async function Oa(b) { + const R = new URL(b), V = {}; + let n = b; + if (R.username || R.password) { + const c = btoa(\`\${R.username}:\${R.password}\`); + V.Authorization = \`Basic \${c}\`, R.username = "", R.password = "", n = R.toString(); + try { + Oe.getState().authHeader = \`Basic \${c}\`; + } catch { + } + } + let t;`; + +const oaPatchReplacement = `async function Oa(b) { + const R = new URL(b), V = {}; + let n = b; + if (R.username || R.password) { + const c = btoa(\`\${R.username}:\${R.password}\`); + V.Authorization = \`Basic \${c}\`, R.username = "", R.password = "", n = R.toString(); + try { + Oe.getState().authHeader = \`Basic \${c}\`; + } catch { + } + } else { + try { + const c = Oe.getState().authHeader; + c && (V.Authorization = c); + } catch { + } + } + let t;`; + +const cnPatchTarget = `function cn({ config: b }) { + const R = xt(null); + return R.current || (R.current = new ya()), /* @__PURE__ */ w.jsx(it.StrictMode, { children: /* @__PURE__ */ w.jsx(va, { client: R.current, children: /* @__PURE__ */ w.jsx(Ya, { value: b || {}, children: /* @__PURE__ */ w.jsx(sn, {}) }) }) }); +}`; + +if (source.includes(oaPatchTarget)) { + source = source.replace(oaPatchTarget, oaPatchReplacement); +} else if (!source.includes('c && (V.Authorization = c)')) { + console.error('[patch-importer] Oa patch target not found; importer version may have changed'); + process.exit(1); +} + +if (source.includes(cnPatchTarget)) { + source = source.replace(cnPatchTarget, cnPatchReplacement); +} else if (!source.includes('b.cluster.authHeader && V.setAuthHeader(b.cluster.authHeader)')) { + console.error('[patch-importer] cn patch target not found; importer version may have changed'); + process.exit(1); +} + +source = replaceClusterStep(source); + +fs.writeFileSync(importerPath, source); +writeImporterTypes(); + +console.log('[patch-importer] applied cluster prefill patches'); diff --git a/src/batteries b/src/batteries index ca355286..50a23dc3 160000 --- a/src/batteries +++ b/src/batteries @@ -1 +1 @@ -Subproject commit ca355286f258bd1de2fae48c6d05cbb308b70187 +Subproject commit 50a23dc360a351ebe6e847583617149ebb5aa230 diff --git a/src/components/AppFilters/index.js b/src/components/AppFilters/index.js index c94c7c48..4b6adb4b 100644 --- a/src/components/AppFilters/index.js +++ b/src/components/AppFilters/index.js @@ -5,6 +5,7 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { css } from 'emotion'; import { loadApps, updateAppScreenPreferences } from '../../actions'; +import { getAppIndexName, isSystemIndex } from '../../batteries/utils'; import { children as childrenProp } from '../../utils/prop-types'; const commonFlex = css` @@ -44,13 +45,11 @@ function AppFilters({ apps, children, preferences, updatePreferences, fetchApps const setFilteredData = () => { const dataToPonder = systemIndices ? apps - : apps.filter( - (dataItem) => - dataItem.index && - dataItem.index[0] !== '.' && - !dataItem.index.includes('metricbeat-'), - ); - setData(dataToPonder.filter((dataItem) => (dataItem.index || '').includes(searchTerm))); + : apps.filter((dataItem) => { + const indexName = getAppIndexName(dataItem); + return indexName && !isSystemIndex(indexName); + }); + setData(dataToPonder.filter((dataItem) => getAppIndexName(dataItem).includes(searchTerm))); }; const handleInputChange = (e) => { setSearchTerm(e.target.value); diff --git a/src/components/AppHeader/UserMenu.js b/src/components/AppHeader/UserMenu.js index 901cdde9..1d06a973 100644 --- a/src/components/AppHeader/UserMenu.js +++ b/src/components/AppHeader/UserMenu.js @@ -32,6 +32,7 @@ const handleLogout = () => { localStorage.removeItem('allowedActions'); localStorage.removeItem('authToken'); localStorage.removeItem('isUsingOpenSearch'); + localStorage.removeItem('isUsingElasticsearchServerless'); window.location.href = '/'; }; diff --git a/src/components/AppLayout/ClusterRouteContainer.js b/src/components/AppLayout/ClusterRouteContainer.js index 02c87925..427a262d 100644 --- a/src/components/AppLayout/ClusterRouteContainer.js +++ b/src/components/AppLayout/ClusterRouteContainer.js @@ -744,6 +744,7 @@ class ClusterRouteContainer extends React.Component { <> {get(allowedRoutes, '/cluster/role-based-access') && (backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.SYSTEM.name || backend === BACKENDS.OPENSEARCH.name) ? ( @@ -760,6 +761,7 @@ class ClusterRouteContainer extends React.Component { <> {get(allowedRoutes, '/cluster/sync-preferences') && (backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.SYSTEM.name || backend === BACKENDS.OPENSEARCH.name) ? ( diff --git a/src/components/AppSwitcher/index.js b/src/components/AppSwitcher/index.js index 58ddd132..9b8243f3 100644 --- a/src/components/AppSwitcher/index.js +++ b/src/components/AppSwitcher/index.js @@ -7,6 +7,7 @@ import get from 'lodash/get'; import keys from 'lodash/keys'; import { css } from 'emotion'; import { setCurrentApp } from '../../batteries/modules/actions'; +import { isSystemIndex } from '../../batteries/utils'; import { loadApps } from '../../actions'; const selectStyle = css` @@ -137,9 +138,7 @@ class AppSwitcher extends React.Component { const { computedWidth } = this.state; const route = get(match, 'params.route'); - const filteredApps = keys(apps).filter((app) => !app.startsWith('.')); - - const userApps = filteredApps.filter((index) => index && !index.includes('metricbeat-')); + const userApps = keys(apps).filter((app) => app && !isSystemIndex(app)); const sortedApps = (userApps || []).sort((a, b) => { if (a < b) { diff --git a/src/components/CreateCredentials/utils.js b/src/components/CreateCredentials/utils.js index 15c12620..83251d1c 100644 --- a/src/components/CreateCredentials/utils.js +++ b/src/components/CreateCredentials/utils.js @@ -269,9 +269,12 @@ export const shouldHavePipelines = (backendImage) => ALLOWED_SLS.includes(backen export const shouldHaveIndices = (backendImage) => !ALLOWED_SLS.includes(backendImage); export const shouldHaveFieldsFiltering = (backendImage, backend) => - [BACKENDS.ELASTICSEARCH.name, BACKENDS.OPENSEARCH.name, BACKENDS.SYSTEM.name].includes( - backend, - ) && !ALLOWED_SLS.includes(backendImage); + [ + BACKENDS.ELASTICSEARCH.name, + BACKENDS.ELASTICSEARCH_SERVERLESS.name, + BACKENDS.OPENSEARCH.name, + BACKENDS.SYSTEM.name, + ].includes(backend) && !ALLOWED_SLS.includes(backendImage); const filterCategories = (value) => { const limits = value.ip_limit ? { ip_limit: parseFloat(value.ip_limit, 10) } : undefined; diff --git a/src/components/HelpChat/HelpChat.js b/src/components/HelpChat/HelpChat.js index d863a249..408c1d8d 100644 --- a/src/components/HelpChat/HelpChat.js +++ b/src/components/HelpChat/HelpChat.js @@ -1,61 +1,34 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import { QuestionOutlined } from '@ant-design/icons'; +import { BugOutlined } from '@ant-design/icons'; import { Button, Dropdown, Menu } from 'antd'; import { css } from 'emotion'; import { heading, subHeading } from './styles'; +const GITHUB_ISSUES_URL = 'https://github.com/appbaseio/explore-cluster/issues/new'; + const helpIcon = css` - i { + .anticon { font-size: 22px !important; position: relative; + top: -1px; } `; class HelpButton extends React.Component { - handleClick = (e) => { - const { key } = e; - switch (key) { - case 'chat': { - if (window.Tawk_API) { - window.Tawk_API.toggle(); - } else if (window.Intercom) { - // Fallback to Intercom if Tawk.to is not loaded - window.Intercom('show'); - } - break; - } - case 'twitter': - window.open('https://x.com/reactiveCo', '_blank'); - break; - case 'updates': - window.open('https://reactivesearch.io/', '_blank'); - break; - case 'privacy': - window.open('https://reactivesearch.io/privacy/', '_blank'); - break; - default: + handleClick = ({ key }) => { + if (key === 'github') { + window.open(GITHUB_ISSUES_URL, '_blank'); } }; render() { const menu = ( - -

- Ask us anything!{' '} - - 👋 - -

-

We reply to every issue.

-
- -

@reactiveCo - Twitter/X

-
- -

Terms & Privacy

+ +

Found a bug?

+

Report it on GitHub

); @@ -67,7 +40,7 @@ class HelpButton extends React.Component { type="primary" size="large" shape="circle" - icon={} + icon={} /> diff --git a/src/components/IndexSwitcher/index.js b/src/components/IndexSwitcher/index.js index 8404e746..e091a336 100644 --- a/src/components/IndexSwitcher/index.js +++ b/src/components/IndexSwitcher/index.js @@ -7,6 +7,7 @@ import get from 'lodash/get'; import { css } from 'emotion'; import { connect } from 'react-redux'; import LabelTag from '../LabelTag'; +import { isSystemIndex } from '../../batteries/utils'; import { setSessionData } from '../../actions'; const popOverClass = css` @@ -31,7 +32,7 @@ function IndexSwitcher({ disablePopover, sessionData, }) { - const userApps = filteredApps.filter((index) => index && !index.includes('metricbeat-')); + const userApps = filteredApps.filter((index) => index && !isSystemIndex(index)); if (userApps.length === 1 && item.link) return ( diff --git a/src/components/RSPlayground/index.js b/src/components/RSPlayground/index.js index bcbde4a1..d2c45402 100644 --- a/src/components/RSPlayground/index.js +++ b/src/components/RSPlayground/index.js @@ -1,5 +1,5 @@ import React from 'react'; -import Playground from '@appbaseio-confidential/reactivesearch-playground'; +import Playground from '@appbaseio/reactivesearch-playground'; import PropTypes from 'prop-types'; import get from 'lodash/get'; import { connect } from 'react-redux'; diff --git a/src/constants/config.js b/src/constants/config.js index bd711fd1..45912d0c 100644 --- a/src/constants/config.js +++ b/src/constants/config.js @@ -16,6 +16,16 @@ export const getVersion = () => { export const isUsingOpenSearch = () => { return localStorage.getItem('isUsingOpenSearch') === 'true'; }; + +export const isUsingElasticsearchServerless = () => { + return localStorage.getItem('isUsingElasticsearchServerless') === 'true'; +}; + +export const persistElasticsearchServerlessFlavor = (esResponse) => { + const isServerless = esResponse?.version?.['build_flavor'] === 'serverless'; + localStorage.setItem('isUsingElasticsearchServerless', isServerless ? 'true' : 'false'); + return isServerless; +}; export const SCALR_URL = 'scalr.api.appbase.io'; export const ACC_API = 'https://accapi.appbase.io'; export const SCALR_API = 'https://scalr.api.appbase.io'; diff --git a/src/pages/AppWrapper/AppWrapper.js b/src/pages/AppWrapper/AppWrapper.js index 4d519b1e..847a11f1 100644 --- a/src/pages/AppWrapper/AppWrapper.js +++ b/src/pages/AppWrapper/AppWrapper.js @@ -115,6 +115,7 @@ class AppWrapper extends Component { action: ALLOWED_ACTIONS.UI_BUILDER, menu: [ ...(backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.OPENSEARCH.name || backend === BACKENDS.SYSTEM.name ? [ @@ -132,6 +133,7 @@ class AppWrapper extends Component { tag: 'Beta', }, ...(backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.OPENSEARCH.name || backend === BACKENDS.SYSTEM.name ? [ @@ -169,6 +171,7 @@ class AppWrapper extends Component { link: '/cluster/credentials', }, ...(backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.OPENSEARCH.name || backend === BACKENDS.SYSTEM.name ? [ @@ -273,6 +276,7 @@ class AppWrapper extends Component { tag: 'Beta', }, ...(backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.OPENSEARCH.name || backend === BACKENDS.SYSTEM.name ? [ @@ -315,6 +319,7 @@ class AppWrapper extends Component { link: '/cluster/credentials', }, ...(backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.OPENSEARCH.name || backend === BACKENDS.SYSTEM.name ? [ diff --git a/src/pages/ConfigureBackendPage/ConfigureBackend.js b/src/pages/ConfigureBackendPage/ConfigureBackend.js index fb6f5f28..1b797cee 100644 --- a/src/pages/ConfigureBackendPage/ConfigureBackend.js +++ b/src/pages/ConfigureBackendPage/ConfigureBackend.js @@ -156,6 +156,17 @@ const urlValidator = (control) => { }; const { Header } = Layout; + +const renderBackendOption = (name, logo) => { + if (name === BACKENDS.SYSTEM.name) { + return

System

; + } + if (name === BACKENDS.ELASTICSEARCH_SERVERLESS.name) { + return

Elasticsearch Serverless

; + } + return {name}; +}; + const ConfigureBackend = (props) => { const { backendImage, backend: backendProp } = props; const bannerDetails = { @@ -409,15 +420,7 @@ const ConfigureBackend = (props) => { value={name} key={name} > - {name === BACKENDS.SYSTEM.name ? ( -

System

- ) : ( - {name} - )} + {renderBackendOption(name, logo)} ))} diff --git a/src/pages/DashboardWrapper/DashboardWrapper.js b/src/pages/DashboardWrapper/DashboardWrapper.js index 5046edc8..2e1ccd76 100644 --- a/src/pages/DashboardWrapper/DashboardWrapper.js +++ b/src/pages/DashboardWrapper/DashboardWrapper.js @@ -24,7 +24,7 @@ import { loadApps, setIsSidebarCollapsed } from '../../actions'; import SidebarAutocomplete from '../../components/SidebarAutocomplete'; import searchInputStyle from './styles'; import UnauthorizedPage from '../UnauthorizedPage'; -import { ALLOWED_ACTIONS_BY_BACKEND, BACKENDS } from '../../batteries/utils'; +import { ALLOWED_ACTIONS_BY_BACKEND, BACKENDS, isSystemIndex } from '../../batteries/utils'; import { iconMap } from '../../components/iconMap'; const NoMatch = Loadable({ @@ -140,6 +140,7 @@ class DashboardWrapper extends Component { action: ALLOWED_ACTIONS.UI_BUILDER, menu: [ ...(backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.OPENSEARCH.name || backend === BACKENDS.SYSTEM.name ? [ @@ -156,6 +157,7 @@ class DashboardWrapper extends Component { tag: 'Beta', }, ...(backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.OPENSEARCH.name || backend === BACKENDS.SYSTEM.name ? [ @@ -191,6 +193,7 @@ class DashboardWrapper extends Component { link: '/cluster/credentials', }, ...(backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.OPENSEARCH.name || backend === BACKENDS.SYSTEM.name ? [ @@ -297,6 +300,7 @@ class DashboardWrapper extends Component { tag: 'Beta', }, ...(backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.OPENSEARCH.name || backend === BACKENDS.SYSTEM.name ? [ @@ -337,6 +341,7 @@ class DashboardWrapper extends Component { link: '/cluster/credentials', }, ...(backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.OPENSEARCH.name || backend === BACKENDS.SYSTEM.name ? [ @@ -397,7 +402,7 @@ class DashboardWrapper extends Component { const { showHeader, routes, activeSubMenu, activeMenuItem, value, readOnlySearchInput } = this.state; const { apps, history, match, collapsed, sessionData, backendImage, backend } = this.props; - const filteredApps = keys(apps).filter((app) => !app.startsWith('.')); + const filteredApps = keys(apps).filter((app) => app && !isSystemIndex(app)); const routesFiltered = {}; Object.keys(routes).forEach((key) => { diff --git a/src/pages/HomePage/CreateAppModal.js b/src/pages/HomePage/CreateAppModal.js index 668a9a12..8650c587 100644 --- a/src/pages/HomePage/CreateAppModal.js +++ b/src/pages/HomePage/CreateAppModal.js @@ -25,7 +25,13 @@ import LanguageDropdown from '../../components/LanguageDropdown'; import languages from '../../constants/language'; import { getDefaultSettings, putSettings } from '../../batteries/modules/actions'; import { getLanguageFallback } from '../../utils/language'; -import { features, isEqual, isValidPlan } from '../../batteries/utils'; +import { + features, + isEqual, + isValidPlan, + stripIndexShardsAndReplicas, + supportsIndexShardsAndReplicas, +} from '../../batteries/utils'; import { allowedTiers } from '../../utils/prop-types'; import { withErrorToaster } from '../../batteries/components/shared/ErrorToaster/ErrorToaster'; import Ace from '../../batteries/components/SearchSandbox/containers/AceEditor'; @@ -149,7 +155,8 @@ class CreateAppModal extends Component { handleOk = async () => { const { appName, shards, replicas, indexSettings, indexMappings, hasJSON } = this.state; - const { handleCreateApp } = this.props; + const { handleCreateApp, backend } = this.props; + const includeShardsAndReplicas = supportsIndexShardsAndReplicas(backend); let { language } = this.state; language = getLanguageFallback(language); // validate advanced settings @@ -174,15 +181,25 @@ class CreateAppModal extends Component { return; } } + let settings = { + ...(indexSettings ? JSON.parse(indexSettings) : null), + ...(includeShardsAndReplicas + ? { + 'index.number_of_shards': shards, + 'index.number_of_replicas': replicas, + } + : {}), + analysis: get(languages, [language, 'analysis']), + }; + + if (!includeShardsAndReplicas) { + settings = stripIndexShardsAndReplicas(settings); + } + const options = { appName, hasJSON, - settings: { - ...(indexSettings ? JSON.parse(indexSettings) : null), - 'index.number_of_shards': shards, - 'index.number_of_replicas': replicas, - analysis: get(languages, [language, 'analysis']), - }, + settings, mappings: { ...(indexMappings ? JSON.parse(indexMappings) : null), }, @@ -246,7 +263,8 @@ class CreateAppModal extends Component { indexSettings, indexMappings, } = this.state; - const { createdApp, showModal } = this.props; + const { createdApp, showModal, backend } = this.props; + const showShardsAndReplicas = supportsIndexShardsAndReplicas(backend); return ( )} /> -

- Shards -

- this.handleInputNumber('shards', value)} - value={shards} - /> -

- Replicas -

- this.handleInputNumber('replicas', value)} - value={replicas} - /> + {showShardsAndReplicas ? ( + +

+ Shards +

+ this.handleInputNumber('shards', value)} + value={shards} + /> +

+ Replicas +

+ this.handleInputNumber('replicas', value)} + value={replicas} + /> +
+ ) : null}

Additional Index Settings @@ -498,12 +520,14 @@ CreateAppModal.propTypes = { defaultSettings: PropTypes.object, getDefaultSettingsAction: PropTypes.func.isRequired, handleCreateApp: PropTypes.func.isRequired, + backend: PropTypes.string, tier: allowedTiers, featureSearchRelevancy: PropTypes.bool, }; CreateAppModal.defaultProps = { defaultSettings: null, + backend: '', tier: undefined, featureSearchRelevancy: false, }; @@ -515,6 +539,7 @@ const mapStateToProps = (state) => ({ defaultSettings: get(state, '$getAppSettings.defaultSettings'), tier: get(state, '$getAppPlan.results.tier'), featureSearchRelevancy: get(state, '$getAppPlan.results.feature_search_relevancy', false), + backend: get(state, '$getAppPlan.results.backend', ''), }); const mapDispatchToProps = (dispatch) => ({ diff --git a/src/pages/ImporterPage/ImporterPage.js b/src/pages/ImporterPage/ImporterPage.js index 67445938..6a10cc3d 100644 --- a/src/pages/ImporterPage/ImporterPage.js +++ b/src/pages/ImporterPage/ImporterPage.js @@ -6,6 +6,7 @@ import { event, timingEvent } from '../../utils/gtag'; import moment from '../../utils/moment'; import ErrorToaster from '../../batteries/components/shared/ErrorToaster'; +import { getImporterClusterConfig } from '../../utils/importerCluster'; // eslint-disable-next-line no-unused-expressions injectGlobal` @@ -24,6 +25,7 @@ class ImporterPage extends React.Component { this.startTime = moment(); this.state = { preparingApp: true, + importerConfig: null, }; } @@ -35,7 +37,10 @@ class ImporterPage extends React.Component { label: 'visit', value: null, }); - this.togglePreparing(); + this.setState({ + preparingApp: false, + importerConfig: this.buildImporterConfig(), + }); setTimeout(() => { window.scrollTo({ @@ -56,14 +61,20 @@ class ImporterPage extends React.Component { }); } - togglePreparing = () => { - this.setState((prevState) => ({ - preparingApp: !prevState.preparingApp, - })); + buildImporterConfig = () => { + const cluster = getImporterClusterConfig(); + return { + sampleDataset: { + url: '/samples/moviesData.json', + label: 'Load sample movies', + filename: 'movies.json', + }, + ...(cluster ? { cluster } : {}), + }; }; render() { - const { preparingApp } = this.state; + const { preparingApp, importerConfig } = this.state; return ( @@ -84,15 +95,7 @@ class ImporterPage extends React.Component { ) : ( - + )} diff --git a/src/pages/IndexSettings/IndexSettings.js b/src/pages/IndexSettings/IndexSettings.js index 9f302263..7a9a2c75 100644 --- a/src/pages/IndexSettings/IndexSettings.js +++ b/src/pages/IndexSettings/IndexSettings.js @@ -28,6 +28,7 @@ import ErrorToaster from '../../batteries/components/shared/ErrorToaster'; import { withErrorToaster } from '../../batteries/components/shared/ErrorToaster/ErrorToaster'; import { event, timingEvent } from '../../utils/gtag'; import moment from '../../utils/moment'; +import { supportsIndexShardsAndReplicas } from '../../batteries/utils'; // helper to call ES with basic auth const esRequest = async ({ path, method = 'GET', credentials, body }) => { @@ -109,9 +110,9 @@ class IndexSettings extends React.Component { } componentDidUpdate(prevProps) { - const { appName } = this.props; + const { appName, backend } = this.props; - if (prevProps.appName !== appName) { + if (prevProps.appName !== appName || prevProps.backend !== backend) { this.initializeSettings(); } } @@ -134,24 +135,33 @@ class IndexSettings extends React.Component { }; initializeSettings = async () => { - const { credentials, appName } = this.props; - + const { credentials, appName, backend } = this.props; const esVersion = getVersion() || (await getESVersion(appName, credentials)); - const nodes = await getNodes(appName, credentials); + const showShardsAndReplicas = supportsIndexShardsAndReplicas(backend); - this.setState({ - esVersion: esVersion.split('.')[0], - totalNodes: nodes._nodes.total, - }); + if (showShardsAndReplicas) { + const nodes = await getNodes(appName, credentials); - fetchSettings({ appName, credentials }).then(({ shards, replicas }) => { - this.allocated_replicas = replicas; - this.allocated_shards = shards; this.setState({ - shards, - replicas, + esVersion: esVersion.split('.')[0], + totalNodes: nodes._nodes.total, + shardsReplicasSupported: true, }); - }); + + fetchSettings({ appName, credentials }).then(({ shards, replicas }) => { + this.allocated_replicas = replicas; + this.allocated_shards = shards; + this.setState({ + shards, + replicas, + }); + }); + } else { + this.setState({ + esVersion: esVersion.split('.')[0], + shardsReplicasSupported: false, + }); + } }; handleSlider = (name, value) => { @@ -293,7 +303,8 @@ class IndexSettings extends React.Component { (data) => data[appName].settings, ); - appSettings = getUpdatedSettings({ settings: appSettings, shards, replicas }); + const { backend } = this.props; + appSettings = getUpdatedSettings({ settings: appSettings, shards, replicas, backend }); const reIndexPromise = reIndex({ mappings, @@ -355,7 +366,12 @@ class IndexSettings extends React.Component { analysisJsonValid, } = this.state; const { allocated_replicas, allocated_shards } = this; - const { isFetchingMapping } = this.props; + const { isFetchingMapping, backend } = this.props; + const { shardsReplicasSupported } = this.state; + const showShardsAndReplicas = + shardsReplicasSupported !== undefined + ? shardsReplicasSupported + : supportsIndexShardsAndReplicas(backend); if (isFetchingMapping) { return ( @@ -375,29 +391,33 @@ class IndexSettings extends React.Component {
- - this.updateShards()} - handleModal={this.handleModal} - shardsModal={shardsModal} - shards={shards} - allocated_shards={allocated_shards} - /> - - - - - + {showShardsAndReplicas ? ( + + this.updateShards()} + handleModal={this.handleModal} + shardsModal={shardsModal} + shards={shards} + allocated_shards={allocated_shards} + /> + + ) : null} + + {showShardsAndReplicas ? ( + + + + ) : null} {/* Scoped styles for the card title */} @@ -514,12 +534,14 @@ IndexSettings.propTypes = { apps: PropTypes.object, isFetchingMapping: PropTypes.bool, updateReIndexingTasks: PropTypes.func.isRequired, + backend: PropTypes.string, }; IndexSettings.defaultProps = { mappings: null, apps: {}, isFetchingMapping: false, + backend: '', }; const mapStateToProps = (state) => { @@ -533,6 +555,7 @@ const mapStateToProps = (state) => { mappings, isFetchingMapping: get(state, '$getAppMappings.isFetching'), appName, + backend: get(state, '$getAppPlan.results.backend', ''), }; }; diff --git a/src/pages/LogoutPage/index.js b/src/pages/LogoutPage/index.js index cfa84b3d..4ae0c2d5 100644 --- a/src/pages/LogoutPage/index.js +++ b/src/pages/LogoutPage/index.js @@ -22,6 +22,7 @@ const LogoutPage = () => { localStorage.removeItem('allowedActions'); localStorage.removeItem('authToken'); localStorage.removeItem('isUsingOpenSearch'); + localStorage.removeItem('isUsingElasticsearchServerless'); localStorage.removeItem('clusterId'); window.location.href = '/'; }; diff --git a/src/utils/importerCluster.js b/src/utils/importerCluster.js new file mode 100644 index 00000000..be748c21 --- /dev/null +++ b/src/utils/importerCluster.js @@ -0,0 +1,80 @@ +import { getURL } from '../constants/config'; + +function getStorageItem(key) { + try { + return localStorage.getItem(key) || sessionStorage.getItem(key); + } catch (e) { + return null; + } +} + +function decodeBasicCredentials(token) { + if (!token) { + return { username: '', password: '' }; + } + + const raw = token.startsWith('Basic ') ? token.slice(6).trim() : token; + + try { + const decoded = atob(raw); + const separator = decoded.indexOf(':'); + if (separator > -1) { + return { + username: decoded.slice(0, separator), + password: decoded.slice(separator + 1), + }; + } + } catch (e) { + // ignore decode errors + } + + return { username: '', password: '' }; +} + +/** + * Default cluster settings for the data importer, derived from the active RS session. + * Returns null when no cluster URL or credentials are available. + */ +export function getImporterClusterConfig() { + const url = getURL(); + if (!url) { + return null; + } + + let authToken = getStorageItem('authToken'); + let username = getStorageItem('username') || ''; + let password = getStorageItem('password') || ''; + + if (!username || !password) { + const decoded = decodeBasicCredentials(authToken); + username = username || decoded.username; + password = password || decoded.password; + } + + if (!authToken && username && password) { + try { + authToken = btoa(`${username}:${password}`); + } catch (e) { + return null; + } + } + + if (!authToken) { + return null; + } + + let authHeader = authToken; + if (!authHeader.startsWith('Basic ') && !authHeader.startsWith('ApiKey ')) { + authHeader = `Basic ${authHeader}`; + } + + const authMode = authHeader.startsWith('ApiKey ') ? 'custom' : 'basic'; + + return { + url, + authHeader, + authMode, + username, + password, + }; +} diff --git a/src/utils/index.js b/src/utils/index.js index cfee3d5c..9db18fce 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -11,7 +11,7 @@ import { getESVersion } from '../batteries/utils/mappings'; import { doGet } from '../batteries/utils/requestService'; import { getDefaultAllowedActions } from './allowedActions'; import { ALLOWED_ACTIONS, SUB_FIELDS } from '../constants'; -import { getURL } from '../constants/config'; +import { getURL, persistElasticsearchServerlessFlavor } from '../constants/config'; export async function getUser(username, password, url) { const ACC_API = getURL(); @@ -63,6 +63,7 @@ export async function getUser(username, password, url) { 'isUsingOpenSearch', esResponse?.version?.distribution === 'opensearch', ); + persistElasticsearchServerlessFlavor(esResponse); localStorage.setItem('version', version); localStorage.setItem('clusterId', clusterId); }) @@ -136,7 +137,11 @@ export async function getESIndices(authToken, backend, endpointConfig = {}) { } else { url = `${ACC_API}/${getValidURL(endpointConfig.index)}`; try { - if (backend === BACKENDS.ELASTICSEARCH.name || backend === BACKENDS.SYSTEM.name) { + if ( + backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || + backend === BACKENDS.SYSTEM.name + ) { const esVersion = await getESVersion(null, atob(authToken)); // older endpoint // Note: OpenSearch v3 resolves to esVersion as 3, and should use the new endpoint. @@ -762,6 +767,7 @@ export const getAuthorizedViews = (routes = {}, allowedActions = [], backend) => // overview page is showed only if user has develop, analytics or search relevancy access const hasOverviewPageAccess = (backend === BACKENDS.ELASTICSEARCH.name || + backend === BACKENDS.ELASTICSEARCH_SERVERLESS.name || backend === BACKENDS.OPENSEARCH.name || backend === BACKENDS.ZINC.name || backend === BACKENDS.SYSTEM.name) && diff --git a/webpack.config.js b/webpack.config.js index 1e53ac51..fb83ecab 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -26,7 +26,7 @@ const plugins = [ filename: 'index.html', }), new CopyWebpackPlugin({ - patterns: [{ from: 'static', to: 'static' }, '_redirects'], + patterns: [{ from: 'static', to: 'static' }, { from: 'samples', to: 'samples' }, '_redirects'], }), new webpack.IgnorePlugin({ resourceRegExp: /^\.\/locale$/, diff --git a/yarn.lock b/yarn.lock index 2b22d4a4..701ec92d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -58,21 +58,6 @@ lodash "^4.17.21" resize-observer-polyfill "^1.5.1" -"@appbaseio-confidential/reactivesearch-playground@^1.3.0-beta.6": - version "1.3.0-beta.9" - resolved "https://npm.pkg.github.com/download/@appbaseio-confidential/reactivesearch-playground/1.3.0-beta.9/8e9d4d5c13ffb7006e02497f4ae58f3649b2ad0b#8e9d4d5c13ffb7006e02497f4ae58f3649b2ad0b" - integrity sha512-mINaImKfZUIrECdD2VZbX/48/BMo1LeItoTJMOkspskwKcw7b+FgJInq4hvRRW12w19x4R9TNhQvVuHDeaYkCg== - dependencies: - "@monaco-editor/react" "^4.3.1" - "@reduxjs/toolkit" "^1.6.0" - "@types/styled-components" "^5.1.11" - firebase "^8.8.0" - react-redux "^7.2.4" - redux-logger "^3.0.6" - redux-persist "^6.0.0" - styled-components "^5.3.0" - xss "^1.0.14" - "@appbaseio/analytics@^1.2.0-alpha.1": version "1.2.0" resolved "https://registry.yarnpkg.com/@appbaseio/analytics/-/analytics-1.2.0.tgz#e48da3fcd4ca78029aa9981d7e4c9689fe9aa078" @@ -135,6 +120,20 @@ prop-types "^15.6.0" react-leaflet "^2.1.3" +"@appbaseio/reactivesearch-playground@github:appbaseio/reactivesearch-playground#e7060229f4baee86b90a94f92c8a66ff17aaa6e4": + version "1.3.0" + resolved "https://codeload.github.com/appbaseio/reactivesearch-playground/tar.gz/e7060229f4baee86b90a94f92c8a66ff17aaa6e4" + dependencies: + "@monaco-editor/react" "^4.3.1" + "@reduxjs/toolkit" "^1.6.0" + "@types/styled-components" "^5.1.11" + firebase "^8.8.0" + react-redux "^7.2.4" + redux-logger "^3.0.6" + redux-persist "^6.0.0" + styled-components "^5.3.0" + xss "^1.0.14" + "@appbaseio/reactivesearch@^4.3.0": version "4.3.0" resolved "https://registry.yarnpkg.com/@appbaseio/reactivesearch/-/reactivesearch-4.3.0.tgz#8ebda81603bfa119b0f43e3282a2ffd1d591d1b1" @@ -1581,63 +1580,21 @@ resolved "https://registry.yarnpkg.com/@codesandbox/sandpack-themes/-/sandpack-themes-1.19.0.tgz#d3af0c93c7e34210c1993640018a402c3e0ec55b" integrity sha512-IbFnx3CmldOpwh+lJoRps4vRA41mSn4ZqU4sNxoIt6HrAVuOZodTBe52hDn58N/l0RRaEh/hMw0UFB4Bmp7wqw== -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - "@ctrl/tinycolor@^3.4.0": version "3.6.1" resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31" integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== -"@cypress/listr-verbose-renderer@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" - integrity sha512-EDiBsVPWC27DDLEJCo+dpl9ODHhdrwU57ccr9tspwCdG2ni0QVkf6LF0FGbhfujcjPxnXLIwsaks4sOrwrA4Qw== - dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" - date-fns "^1.27.2" - figures "^1.7.0" - -"@cypress/request@^2.88.5": - version "2.88.12" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.12.tgz#ba4911431738494a85e93fb04498cb38bc55d590" - integrity sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA== - 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" - http-signature "~1.3.6" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - performance-now "^2.1.0" - qs "~6.10.3" - safe-buffer "^5.1.2" - tough-cookie "^4.1.3" - tunnel-agent "^0.6.0" - uuid "^8.3.2" - -"@cypress/xvfb@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" - integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== - dependencies: - debug "^3.1.0" - lodash.once "^4.1.1" - "@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@dmsnell/diff-match-patch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@dmsnell/diff-match-patch/-/diff-match-patch-1.1.0.tgz#5bac00243fa2583fa970d9865609f632dcd90e32" + integrity sha512-yejLPmM5pjsGvxS9gXablUSbInW7H976c/FJ4iQxWIm7/38xBySRemTPDe34lhg1gVLbJntX0+sH0jYfU+PN9A== + "@emotion/babel-utils@^0.6.4": version "0.6.10" resolved "https://registry.yarnpkg.com/@emotion/babel-utils/-/babel-utils-0.6.10.tgz#83dbf3dfa933fae9fc566e54fbb45f14674c6ccc" @@ -2540,13 +2497,6 @@ redux-thunk "^2.4.2" reselect "^4.1.8" -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" - integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== - dependencies: - any-observable "^0.3.0" - "@sentry-internal/feedback@7.119.1": version "7.119.1" resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.119.1.tgz#98285dc9dba0ab62369d758124901b00faf58697" @@ -2997,16 +2947,6 @@ "@types/node" "*" "@types/send" "*" -"@types/sinonjs__fake-timers@^6.0.1": - version "6.0.4" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.4.tgz#0ecc1b9259b76598ef01942f547904ce61a6a77d" - integrity sha512-IFQTJARgMUBF+xVd2b+hIgXWrZEjND3vJtRCvIelcFB5SIXfjV4bOHbHJ0eXKh+0COrBRc8MqteKAz/j88rE0A== - -"@types/sizzle@^2.3.2": - version "2.3.8" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" - integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== - "@types/sockjs@^0.3.33": version "0.3.36" resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" @@ -3636,11 +3576,6 @@ antd@~5.0.0: scroll-into-view-if-needed "^3.0.3" shallowequal "^1.1.0" -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -3680,11 +3615,6 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -arch@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - argparse@^1.0.10, argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3930,7 +3860,7 @@ async-validator@^4.1.0: resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== -async@^3.2.0, async@^3.2.3: +async@^3.2.3: version "3.2.5" resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== @@ -3940,11 +3870,6 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -4279,12 +4204,7 @@ blessed@^0.1.81: resolved "https://registry.yarnpkg.com/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129" integrity sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ== -blob-util@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" - integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== - -bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.7.2: +bluebird@^3.5.0, bluebird@^3.5.1: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -4437,11 +4357,6 @@ buffer-alloc@^1.2.0: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -4533,11 +4448,6 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" -cachedir@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" - integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== - call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" @@ -4690,11 +4600,6 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-more-types@^2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" - integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== - chokidar@^2.0.0: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -4810,14 +4715,7 @@ cli-boxes@^2.2.1: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== -cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - integrity sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A== - dependencies: - restore-cursor "^1.0.1" - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: +cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== @@ -4836,23 +4734,6 @@ cli-spinners@^1.0.1: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== -cli-table3@~0.6.0: - version "0.6.5" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" - integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg== - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" @@ -4924,11 +4805,6 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - codemirror@^5.42.0: version "5.65.16" resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.16.tgz#efc0661be6bf4988a6a1c2fe6893294638cdb334" @@ -5044,11 +4920,6 @@ commander@^4.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - commander@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" @@ -5064,11 +4935,6 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -5122,7 +4988,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.5.0, concat-stream@^1.6.2: +concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -5633,50 +5499,6 @@ cypress-xpath@^1.6.1: resolved "https://registry.yarnpkg.com/cypress-xpath/-/cypress-xpath-1.8.0.tgz#6dd6949cd8a12eaac723875b2b5a845d5f096ea2" integrity sha512-a76JxNgkYwKCi8tJkY6DjLV8NQ2TBBFA4pIcq5nMDIGOee2DnIIbYbD0ucT7qxF2LSwOow/Ze49WhaTL4pRPmg== -cypress@^5.0.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-5.6.0.tgz#6781755c3ddfd644ce3179fcd7389176c0c82280" - integrity sha512-cs5vG3E2JLldAc16+5yQxaVRLLqMVya5RlrfPWkC72S5xrlHFdw7ovxPb61s4wYweROKTyH01WQc2PFzwwVvyQ== - dependencies: - "@cypress/listr-verbose-renderer" "^0.4.1" - "@cypress/request" "^2.88.5" - "@cypress/xvfb" "^1.2.4" - "@types/sinonjs__fake-timers" "^6.0.1" - "@types/sizzle" "^2.3.2" - arch "^2.1.2" - blob-util "2.0.2" - bluebird "^3.7.2" - cachedir "^2.3.0" - chalk "^4.1.0" - check-more-types "^2.24.0" - cli-table3 "~0.6.0" - commander "^5.1.0" - common-tags "^1.8.0" - debug "^4.1.1" - eventemitter2 "^6.4.2" - execa "^4.0.2" - executable "^4.1.1" - extract-zip "^1.7.0" - fs-extra "^9.0.1" - getos "^3.2.1" - is-ci "^2.0.0" - is-installed-globally "^0.3.2" - lazy-ass "^1.6.0" - listr "^0.14.3" - lodash "^4.17.19" - log-symbols "^4.0.0" - minimist "^1.2.5" - moment "^2.27.0" - ospath "^1.2.2" - pretty-bytes "^5.4.1" - ramda "~0.26.1" - request-progress "^3.0.0" - supports-color "^7.2.0" - tmp "~0.2.1" - untildify "^4.0.0" - url "^0.11.0" - yauzl "^2.10.0" - d3-array@1, d3-array@^1.2.0: version "1.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" @@ -5732,7 +5554,7 @@ d3-path@1: resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== -d3-scale@^2.1.0, d3-scale@^2.1.2: +d3-scale@^2.1.0: version "2.2.2" resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f" integrity sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw== @@ -5828,11 +5650,6 @@ datauri@^1.1.0: mimer "^0.3.2" semver "^5.5.0" -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - dayjs@^1.11.1, dayjs@^1.11.7: version "1.11.11" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e" @@ -5843,7 +5660,7 @@ debounce@^1.2.1: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -6046,7 +5863,7 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -diff-match-patch@1.0.5, diff-match-patch@^1.0.0, diff-match-patch@^1.0.4: +diff-match-patch@1.0.5, diff-match-patch@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== @@ -6260,11 +6077,6 @@ electron-to-chromium@^1.4.668: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz#1017d1758aaeeefe5423aa9d67b4b1e5d1d0a856" integrity sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg== -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ== - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -6878,11 +6690,6 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter2@^6.4.2: - version "6.4.9" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" - integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== - eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -6940,7 +6747,7 @@ execa@^3.2.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^4.0.2, execa@^4.1.0: +execa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -6970,13 +6777,6 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -executable@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" - integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== - dependencies: - pify "^2.2.0" - exenv@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" @@ -6987,11 +6787,6 @@ exifr@^7.0.0: resolved "https://registry.yarnpkg.com/exifr/-/exifr-7.1.3.tgz#f6218012c36dbb7d843222011b27f065fddbab6f" integrity sha512-g/aje2noHivrRSLbAUtBPWFbxKdKhgj/xr1vATDdUXPOFYJlQ62Ft0oy+72V6XLIpDJfHs6gXLbBLAolqOXYRw== -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - integrity sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg== - exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -7125,16 +6920,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" - integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== - dependencies: - concat-stream "^1.6.2" - debug "^2.6.9" - mkdirp "^0.5.4" - yauzl "^2.10.0" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -7239,26 +7024,11 @@ fbjs@^3.0.0, fbjs@^3.0.1: setimmediate "^1.0.5" ua-parser-js "^1.0.35" -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - fetch-jsonp@^1.0.6: version "1.3.0" resolved "https://registry.yarnpkg.com/fetch-jsonp/-/fetch-jsonp-1.3.0.tgz#99b8c25bd100938d7a7a6b5db9d6b81f32a10809" integrity sha512-hxCYGvmANEmpkHpeWY8Kawfa5Z1t2csTpIClIDG/0S92eALWHRU1RnGaj86Tf5Cc0QF+afSa4SQ4pFB2rFM5QA== -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -7556,16 +7326,6 @@ fs-extra@^3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" -fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-monkey@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" @@ -7724,13 +7484,6 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== -getos@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" - integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== - dependencies: - async "^3.2.0" - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -7815,13 +7568,6 @@ global-dirs@^0.1.0: dependencies: ini "^1.3.4" -global-dirs@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" - integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== - dependencies: - ini "1.3.7" - global-dirs@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" @@ -7961,7 +7707,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -8321,15 +8067,6 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -http-signature@~1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" - integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.14.1" - https-proxy-agent@^2.1.0: version "2.2.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" @@ -8555,11 +8292,6 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -ini@1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - ini@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" @@ -8847,13 +8579,6 @@ is-finalizationregistry@^1.0.2: dependencies: call-bind "^1.0.2" -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -8898,14 +8623,6 @@ is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" -is-installed-globally@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - is-installed-globally@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" @@ -8968,13 +8685,6 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -9001,7 +8711,7 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-path-inside@^3.0.1, is-path-inside@^3.0.2: +is-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -9028,11 +8738,6 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-promise@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" @@ -9801,13 +9506,12 @@ json5@^2.1.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsondiffpatch@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/jsondiffpatch/-/jsondiffpatch-0.4.1.tgz#9fb085036767f03534ebd46dcd841df6070c5773" - integrity sha512-t0etAxTUk1w5MYdNOkZBZ8rvYYN5iL+2dHCCx/DpkFm/bW28M6y5nUS83D4XdZiHy35Fpaw6LBb+F88fHZnVCw== +jsondiffpatch@^0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/jsondiffpatch/-/jsondiffpatch-0.7.6.tgz#5b71221911ef1bc2725a42da66a4aea83ec7220a" + integrity sha512-zE9+AXFq+MkTolDor2Cw1nJzLC0aleqPkYf52Kb4Kn4mJcka/gFHpGI2JBVEJCfWOvBl0OoxZS+wuLdislQcqg== dependencies: - chalk "^2.3.0" - diff-match-patch "^1.0.0" + "@dmsnell/diff-match-patch" "^1.1.0" jsonexport@^3.0.0: version "3.2.0" @@ -9821,15 +9525,6 @@ jsonfile@^3.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - jsprim@^1.2.2: version "1.4.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" @@ -9840,16 +9535,6 @@ jsprim@^1.2.2: json-schema "0.4.0" verror "1.10.0" -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" @@ -9940,11 +9625,6 @@ launch-editor@^2.6.0: picocolors "^1.0.0" shell-quote "^1.8.1" -lazy-ass@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== - lazy-cache@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" @@ -10055,35 +9735,6 @@ lint-staged@^10.1.7: string-argv "0.3.1" stringify-object "^3.3.0" -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA== - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - listr2@^3.2.2: version "3.14.0" resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" @@ -10098,21 +9749,6 @@ listr2@^3.2.2: through "^2.3.8" wrap-ansi "^7.0.0" -listr@^0.14.3: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -10223,11 +9859,6 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== -lodash.once@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -10248,13 +9879,6 @@ lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ== - dependencies: - chalk "^1.0.0" - log-symbols@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -10270,15 +9894,6 @@ log-symbols@^4.0.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg== - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - log-update@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" @@ -10684,7 +10299,7 @@ minimist@1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw== -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -10729,14 +10344,14 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@^0.5.5: +mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" -moment@^2.27.0, moment@^2.29.4: +moment@^2.29.4: version "2.30.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== @@ -11041,11 +10656,6 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - nwsapi@^2.2.0: version "2.2.10" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.10.tgz#0b77a68e21a0b483db70b11fad055906e867cda8" @@ -11187,11 +10797,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A== - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -11300,11 +10905,6 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -ospath@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" - integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== - p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -11627,11 +11227,6 @@ pegjs@^0.10.0: resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" integrity sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow== -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -11647,7 +11242,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.0.0, pify@^2.2.0: +pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== @@ -12072,11 +11667,6 @@ prettier@^2.0.4: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -pretty-bytes@^5.4.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -12224,7 +11814,7 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== -psl@^1.1.28, psl@^1.1.33: +psl@^1.1.28: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== @@ -12262,11 +11852,6 @@ pumpify@^1.3.3: inherits "^2.0.3" pump "^2.0.0" -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - punycode@^2.1.0, punycode@^2.1.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -12296,20 +11881,6 @@ qs@6.13.0: dependencies: side-channel "^1.0.6" -qs@^6.11.2: - version "6.12.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.1.tgz#39422111ca7cbdb70425541cba20c7d7b216599a" - integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== - dependencies: - side-channel "^1.0.6" - -qs@~6.10.3: - version "6.10.5" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4" - integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ== - dependencies: - side-channel "^1.0.4" - qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" @@ -12367,11 +11938,6 @@ rafl@~1.2.1: dependencies: global "~4.3.0" -ramda@~0.26.1: - version "0.26.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" - integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== - randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -13517,13 +13083,6 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== -request-progress@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" - integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== - dependencies: - throttleit "^1.0.0" - request-promise-core@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" @@ -13666,14 +13225,6 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - integrity sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw== - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -13777,7 +13328,7 @@ rx@^4.1.0: resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" integrity sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug== -rxjs@^6.3.3, rxjs@^6.4.0: +rxjs@^6.4.0: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -14205,11 +13756,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw== - slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -14452,7 +13998,7 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.14.1, sshpk@^1.7.0: +sshpk@^1.7.0: version "1.18.0" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== @@ -14562,15 +14108,6 @@ string-length@^3.1.0: astral-regex "^1.0.0" strip-ansi "^5.2.0" -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -14666,7 +14203,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: +strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== @@ -14802,7 +14339,7 @@ supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -14842,11 +14379,6 @@ svgo@^2.7.0: picocolors "^1.0.0" stable "^0.1.8" -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -14963,11 +14495,6 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -throttleit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" - integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== - through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -15013,11 +14540,6 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@~0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -15123,16 +14645,6 @@ tough-cookie@^3.0.1: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" - integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -15409,16 +14921,6 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -15432,11 +14934,6 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" @@ -15517,7 +15014,7 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" -url-parse@^1.1.7, url-parse@^1.4.7, url-parse@^1.5.3: +url-parse@^1.1.7, url-parse@^1.4.7: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== @@ -15540,14 +15037,6 @@ url-search-params@^1.1.0: resolved "https://registry.yarnpkg.com/url-search-params/-/url-search-params-1.1.0.tgz#865669a6e4e9e5543f86fc972b27c91485375326" integrity sha512-XiO5GLAxmlZgdLob/RmKZRc2INHrssMbpwD6O46JkB1aEJO4fkV3x3mR6+CDX01ijfEUwvfwCiUQZrKqfm1ILw== -url@^0.11.0: - version "0.11.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" - integrity sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== - dependencies: - punycode "^1.4.1" - qs "^6.11.2" - "urlsafe-base64@https://github.com/farhan687/urlsafe-base64.git": version "0.0.0" resolved "https://github.com/farhan687/urlsafe-base64.git#a2cafe3e36e37698d9b5aa3e8d03fc02096f734b" @@ -15623,12 +15112,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.3.2, uuid@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.2: +uuid@8.3.2, uuid@^3.3.2, uuid@^3.3.3, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -16026,14 +15510,6 @@ word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -16239,14 +15715,6 @@ yargs@^17.7.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"